+
+void mount_getexports_cb(struct rpc_context *mount_context _U_, int status, void *data, void *private_data)
+{
+ struct sync_cb_data *cb_data = private_data;
+ exports export = *(exports *)data;
+
+ cb_data->is_finished = 1;
+ cb_data->status = status;
+ cb_data->return_data = NULL;
+
+ while (export != NULL) {
+ exports new_export;
+
+ new_export = malloc(sizeof(*new_export));
+ memset(new_export, 0, sizeof(*new_export));
+ new_export->ex_dir = strdup(export->ex_dir);
+ new_export->ex_next = cb_data->return_data;
+
+ cb_data->return_data = new_export;
+
+ export = export->ex_next;
+ }
+}
+
+struct exportnode *mount_getexports(const char *server)
+{
+ struct sync_cb_data cb_data;
+ struct rpc_context *rpc;
+
+
+ cb_data.is_finished = 0;
+ cb_data.return_data = NULL;
+
+ rpc = rpc_init_context();
+ if (mount_getexports_async(rpc, server, mount_getexports_cb, &cb_data) != 0) {
+ rpc_destroy_context(rpc);
+ return NULL;
+ }
+
+ wait_for_reply(rpc, &cb_data);
+ rpc_destroy_context(rpc);
+
+ return cb_data.return_data;
+}
+
+void mount_free_export_list(struct exportnode *exports)
+{
+ struct exportnode *tmp;
+
+ while ((tmp = exports)) {
+ exports = exports->ex_next;
+ free(tmp->ex_dir);
+ free(tmp);
+ }
+}
+