Npfcall* diod_fsync (Npfid *fid) { Fid *f = fid->aux; Npfcall *ret; if ((f->xflags & XFLAGS_RO)) { np_uerror (EROFS); goto error_quiet; } if (fsync(f->fd) < 0) { np_uerror (errno); goto error_quiet; } if (!((ret = np_create_rfsync ()))) { np_uerror (ENOMEM); goto error; } return ret; error: errn (np_rerror (), "diod_fsync %s@%s:%s", fid->user->uname, np_conn_get_client_id (fid->conn), f->path); error_quiet: return NULL; }
Npfcall* diod_fsync (Npfid *fid) { Fid *f = fid->aux; Npfcall *ret; if ((f->flags & DIOD_FID_FLAGS_ROFS)) { np_uerror (EROFS); goto error_quiet; } if (!f->ioctx) { msg ("diod_fsync: fid is not open"); np_uerror (EBADF); goto error; } if (ioctx_fsync (f->ioctx) < 0) { np_uerror (errno); goto error_quiet; } if (!((ret = np_create_rfsync ()))) { np_uerror (ENOMEM); goto error; } return ret; error: errn (np_rerror (), "diod_fsync %s@%s:%s", fid->user->uname, np_conn_get_client_id (fid->conn), path_s (f->path)); error_quiet: return NULL; }
static void test_rfsync (void) { Npfcall *fc, *fc2; if (!(fc = np_create_rfsync())) msg_exit ("out of memory"); fc2 = _rcv_buf (fc, P9_RFSYNC, __FUNCTION__); free (fc); free (fc2); }