- ) ["pv", pv_cols; "vg", vg_cols; "lv", lv_cols];
-
- (* Stat copy functions. *)
- List.iter (
- fun (typ, cols) ->
- pr "static CAMLprim value\n";
- pr "copy_%s (const struct guestfs_%s *%s)\n" typ typ typ;
- pr "{\n";
- pr " CAMLparam0 ();\n";
- pr " CAMLlocal2 (rv, v);\n";
- pr "\n";
- pr " rv = caml_alloc (%d, 0);\n" (List.length cols);
- iteri (
- fun i col ->
- (match col with
- | name, `Int ->
- pr " v = caml_copy_int64 (%s->%s);\n" typ name
- );
- pr " Store_field (rv, %d, v);\n" i
- ) cols;
- pr " CAMLreturn (rv);\n";
- pr "}\n";
- pr "\n";
- ) ["stat", stat_cols; "statvfs", statvfs_cols];
-
- (* Dirent copy functions. *)
- pr "static CAMLprim value\n";
- pr "copy_dirent (const struct guestfs_dirent *dirent)\n";
- pr "{\n";
- pr " CAMLparam0 ();\n";
- pr " CAMLlocal2 (rv, v);\n";
- pr "\n";
- pr " rv = caml_alloc (%d, 0);\n" (List.length dirent_cols);
- iteri (
- fun i col ->
- (match col with
- | name, `String ->
- pr " v = caml_copy_string (dirent->%s);\n" name
- | name, `Int ->
- pr " v = caml_copy_int64 (dirent->%s);\n" name
- | name, `Char ->
- pr " v = Val_int (dirent->%s);\n" name
- );
- pr " Store_field (rv, %d, v);\n" i
- ) dirent_cols;
- pr " CAMLreturn (rv);\n";
- pr "}\n";
- pr "\n";
-
- pr "static CAMLprim value\n";
- pr "copy_dirent_list (const struct guestfs_dirent_list *dirents)\n";
- pr "{\n";
- pr " CAMLparam0 ();\n";
- pr " CAMLlocal2 (rv, v);\n";
- pr " int i;\n";
- pr "\n";
- pr " if (dirents->len == 0)\n";
- pr " CAMLreturn (Atom (0));\n";
- pr " else {\n";
- pr " rv = caml_alloc (dirents->len, 0);\n";
- pr " for (i = 0; i < dirents->len; ++i) {\n";
- pr " v = copy_dirent (&dirents->val[i]);\n";
- pr " caml_modify (&Field (rv, i), v);\n";
- pr " }\n";
- pr " CAMLreturn (rv);\n";
- pr " }\n";
- pr "}\n";
- pr "\n";