nfs_set_error(nfs, "stat call failed with \"%s\"", (char *)data);
return;
}
-
- memcpy(cb_data->return_data, data, sizeof(struct stat));
+#ifdef WIN32
+ memcpy(cb_data->return_data, data, sizeof(struct __stat64));
+#else
+ memcpy(cb_data->return_data, data, sizeof(struct stat));
+#endif
}
+#ifdef WIN32
+int nfs_stat(struct nfs_context *nfs, const char *path, struct __stat64 *st)
+#else
int nfs_stat(struct nfs_context *nfs, const char *path, struct stat *st)
+#endif
{
struct sync_cb_data cb_data;
}
-
-
/*
* open()
*/
return cb_data.status;
}
+/*
+ * chdir()
+ */
+static void chdir_cb(int status, struct nfs_context *nfs, void *data, void *private_data)
+{
+ struct sync_cb_data *cb_data = private_data;
+
+ cb_data->is_finished = 1;
+ cb_data->status = status;
+
+ if (status < 0) {
+ nfs_set_error(nfs, "chdir call failed with \"%s\"", (char *)data);
+ return;
+ }
+}
+
+int nfs_chdir(struct nfs_context *nfs, const char *path)
+{
+ struct sync_cb_data cb_data;
+
+ cb_data.is_finished = 0;
+
+ if (nfs_chdir_async(nfs, path, chdir_cb, &cb_data) != 0) {
+ nfs_set_error(nfs, "nfs_chdir_async failed with %s",
+ nfs_get_error(nfs));
+ return -1;
+ }
+
+ wait_for_nfs_reply(nfs, &cb_data);
+
+ return cb_data.status;
+}