9p-local.c (84a5a8014801a83d1b8d15fa7f0fde03db081530) | 9p-local.c (f314ea4e30a1ef87bf8845da952c6dd0bac20b95) |
---|---|
1/* 2 * 9p Posix callback 3 * 4 * Copyright IBM, Corp. 2010 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 334 unchanged lines hidden (view full) --- 343 344static int local_close(FsContext *ctx, V9fsFidOpenState *fs) 345{ 346 return close(fs->fd); 347} 348 349static int local_closedir(FsContext *ctx, V9fsFidOpenState *fs) 350{ | 1/* 2 * 9p Posix callback 3 * 4 * Copyright IBM, Corp. 2010 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 334 unchanged lines hidden (view full) --- 343 344static int local_close(FsContext *ctx, V9fsFidOpenState *fs) 345{ 346 return close(fs->fd); 347} 348 349static int local_closedir(FsContext *ctx, V9fsFidOpenState *fs) 350{ |
351 return closedir(fs->dir); | 351 return closedir(fs->dir.stream); |
352} 353 354static int local_open(FsContext *ctx, V9fsPath *fs_path, 355 int flags, V9fsFidOpenState *fs) 356{ 357 char *buffer; 358 char *path = fs_path->data; 359 --- 5 unchanged lines hidden (view full) --- 365 366static int local_opendir(FsContext *ctx, 367 V9fsPath *fs_path, V9fsFidOpenState *fs) 368{ 369 char *buffer; 370 char *path = fs_path->data; 371 372 buffer = rpath(ctx, path); | 352} 353 354static int local_open(FsContext *ctx, V9fsPath *fs_path, 355 int flags, V9fsFidOpenState *fs) 356{ 357 char *buffer; 358 char *path = fs_path->data; 359 --- 5 unchanged lines hidden (view full) --- 365 366static int local_opendir(FsContext *ctx, 367 V9fsPath *fs_path, V9fsFidOpenState *fs) 368{ 369 char *buffer; 370 char *path = fs_path->data; 371 372 buffer = rpath(ctx, path); |
373 fs->dir = opendir(buffer); | 373 fs->dir.stream = opendir(buffer); |
374 g_free(buffer); | 374 g_free(buffer); |
375 if (!fs->dir) { | 375 if (!fs->dir.stream) { |
376 return -1; 377 } 378 return 0; 379} 380 381static void local_rewinddir(FsContext *ctx, V9fsFidOpenState *fs) 382{ | 376 return -1; 377 } 378 return 0; 379} 380 381static void local_rewinddir(FsContext *ctx, V9fsFidOpenState *fs) 382{ |
383 rewinddir(fs->dir); | 383 rewinddir(fs->dir.stream); |
384} 385 386static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs) 387{ | 384} 385 386static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs) 387{ |
388 return telldir(fs->dir); | 388 return telldir(fs->dir.stream); |
389} 390 391static int local_readdir_r(FsContext *ctx, V9fsFidOpenState *fs, 392 struct dirent *entry, 393 struct dirent **result) 394{ 395 int ret; 396 397again: | 389} 390 391static int local_readdir_r(FsContext *ctx, V9fsFidOpenState *fs, 392 struct dirent *entry, 393 struct dirent **result) 394{ 395 int ret; 396 397again: |
398 ret = readdir_r(fs->dir, entry, result); | 398 ret = readdir_r(fs->dir.stream, entry, result); |
399 if (ctx->export_flags & V9FS_SM_MAPPED) { 400 entry->d_type = DT_UNKNOWN; 401 } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) { 402 if (!ret && *result != NULL && 403 !strcmp(entry->d_name, VIRTFS_META_DIR)) { 404 /* skp the meta data directory */ 405 goto again; 406 } 407 entry->d_type = DT_UNKNOWN; 408 } 409 return ret; 410} 411 412static void local_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off) 413{ | 399 if (ctx->export_flags & V9FS_SM_MAPPED) { 400 entry->d_type = DT_UNKNOWN; 401 } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) { 402 if (!ret && *result != NULL && 403 !strcmp(entry->d_name, VIRTFS_META_DIR)) { 404 /* skp the meta data directory */ 405 goto again; 406 } 407 entry->d_type = DT_UNKNOWN; 408 } 409 return ret; 410} 411 412static void local_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off) 413{ |
414 seekdir(fs->dir, off); | 414 seekdir(fs->dir.stream, off); |
415} 416 417static ssize_t local_preadv(FsContext *ctx, V9fsFidOpenState *fs, 418 const struct iovec *iov, 419 int iovcnt, off_t offset) 420{ 421#ifdef CONFIG_PREADV 422 return preadv(fs->fd, iov, iovcnt, offset); --- 182 unchanged lines hidden (view full) --- 605} 606 607static int local_fstat(FsContext *fs_ctx, int fid_type, 608 V9fsFidOpenState *fs, struct stat *stbuf) 609{ 610 int err, fd; 611 612 if (fid_type == P9_FID_DIR) { | 415} 416 417static ssize_t local_preadv(FsContext *ctx, V9fsFidOpenState *fs, 418 const struct iovec *iov, 419 int iovcnt, off_t offset) 420{ 421#ifdef CONFIG_PREADV 422 return preadv(fs->fd, iov, iovcnt, offset); --- 182 unchanged lines hidden (view full) --- 605} 606 607static int local_fstat(FsContext *fs_ctx, int fid_type, 608 V9fsFidOpenState *fs, struct stat *stbuf) 609{ 610 int err, fd; 611 612 if (fid_type == P9_FID_DIR) { |
613 fd = dirfd(fs->dir); | 613 fd = dirfd(fs->dir.stream); |
614 } else { 615 fd = fs->fd; 616 } 617 618 err = fstat(fd, stbuf); 619 if (err) { 620 return err; 621 } --- 371 unchanged lines hidden (view full) --- 993} 994 995static int local_fsync(FsContext *ctx, int fid_type, 996 V9fsFidOpenState *fs, int datasync) 997{ 998 int fd; 999 1000 if (fid_type == P9_FID_DIR) { | 614 } else { 615 fd = fs->fd; 616 } 617 618 err = fstat(fd, stbuf); 619 if (err) { 620 return err; 621 } --- 371 unchanged lines hidden (view full) --- 993} 994 995static int local_fsync(FsContext *ctx, int fid_type, 996 V9fsFidOpenState *fs, int datasync) 997{ 998 int fd; 999 1000 if (fid_type == P9_FID_DIR) { |
1001 fd = dirfd(fs->dir); | 1001 fd = dirfd(fs->dir.stream); |
1002 } else { 1003 fd = fs->fd; 1004 } 1005 1006 if (datasync) { 1007 return qemu_fdatasync(fd); 1008 } else { 1009 return fsync(fd); --- 273 unchanged lines hidden --- | 1002 } else { 1003 fd = fs->fd; 1004 } 1005 1006 if (datasync) { 1007 return qemu_fdatasync(fd); 1008 } else { 1009 return fsync(fd); --- 273 unchanged lines hidden --- |