X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fgenerator.ml;h=0904afc0435e63dcc854277753e88b0cce1d9d12;hb=995715ebf9935a64f0321c09a527538706aa3cb7;hp=d94ec14663dcac853908e5648bbffe75dfa39c3e;hpb=2f70ca487bee8babe5aef27f00a2131ea86ebd50;p=libguestfs.git diff --git a/src/generator.ml b/src/generator.ml index d94ec14..0904afc 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -636,6 +636,36 @@ qemu subprocess, then this will return an error. This is an internal call used for debugging and testing."); + ("version", (RStruct ("version", "version"), []), -1, [], + [InitBasicFS, Always, TestOutputStruct ( + [["version"]], [CompareWithInt ("major", 1)])], + "get the library version number", + "\ +Return the libguestfs version number that the program is linked +against. + +Note that because of dynamic linking this is not necessarily +the version of libguestfs that you compiled against. You can +compile the program, and then at runtime dynamically link +against a completely different C library. + +This call was added in version C<1.0.58>. In previous +versions of libguestfs there was no way to get the version +number. From C code you can use ELF weak linking tricks to find out if +this symbol exists (if it doesn't, then it's an earlier version). + +The call returns a structure with four elements. The first +three (C, C and C) are numbers and +correspond to the usual version triplet. The fourth element +(C) is a string and is normally empty, but may be +used for distro-specific information. + +To construct the original version string: +C<$major.$minor.$release$extra> + +I Don't use this call to test for availability +of features. Distro backports makes this unreliable."); + ] (* daemon_functions are any functions which cause some action @@ -2928,6 +2958,14 @@ let structs = [ "ftyp", FChar; "name", FString; ]; + + (* Version numbers. *) + "version", [ + "major", FInt64; + "minor", FInt64; + "release", FInt64; + "extra", FString; + ]; ] (* end of structs *) (* Ugh, Java has to be different .. @@ -2940,7 +2978,8 @@ let java_structs = [ "lvm_lv", "LV"; "stat", "Stat"; "statvfs", "StatVFS"; - "dirent", "Dirent" + "dirent", "Dirent"; + "version", "Version"; ] (* Used for testing language bindings. *) @@ -6048,30 +6087,33 @@ and generate_perl_struct_code typ cols name style n do_cleanups = do_cleanups (); pr " if (%s == NULL)\n" n; pr " croak (\"%s: %%s\", guestfs_last_error (g));\n" name; - pr " EXTEND (SP, %d);\n" (List.length cols); + pr " EXTEND (SP, 2 * %d);\n" (List.length cols); List.iter ( - function - | name, FString -> - pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 0)));\n" - n name - | name, FUUID -> - pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 32)));\n" - n name - | name, (FBytes|FUInt64) -> - pr " PUSHs (sv_2mortal (my_newSVull (%s->%s)));\n" - n name - | name, FInt64 -> - pr " PUSHs (sv_2mortal (my_newSVll (%s->%s)));\n" - n name - | name, (FInt32|FUInt32) -> - pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" - n name - | name, FChar -> - pr " PUSHs (sv_2mortal (newSVpv (&%s->%s, 1)));\n" - n name - | name, FOptPercent -> - pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" - n name + fun ((name, _) as col) -> + pr " PUSHs (sv_2mortal (newSVpv (\"%s\", 0)));\n" name; + + match col with + | name, FString -> + pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 0)));\n" + n name + | name, FUUID -> + pr " PUSHs (sv_2mortal (newSVpv (%s->%s, 32)));\n" + n name + | name, (FBytes|FUInt64) -> + pr " PUSHs (sv_2mortal (my_newSVull (%s->%s)));\n" + n name + | name, FInt64 -> + pr " PUSHs (sv_2mortal (my_newSVll (%s->%s)));\n" + n name + | name, (FInt32|FUInt32) -> + pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" + n name + | name, FChar -> + pr " PUSHs (sv_2mortal (newSVpv (&%s->%s, 1)));\n" + n name + | name, FOptPercent -> + pr " PUSHs (sv_2mortal (newSVnv (%s->%s)));\n" + n name ) cols; pr " free (%s);\n" n