X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=generator%2Fgenerator_fish.ml;h=53e4fd5639c3cc30481a5d42af9d7c81d7e198e1;hp=3d52421b9e255690c23789959e128c2eca847225;hb=7123f0cab155c5c25ecae670677683001c1634ad;hpb=3c9dfd1e95fae5c31df1fbcb6bdec2982a69a004 diff --git a/generator/generator_fish.ml b/generator/generator_fish.ml index 3d52421..53e4fd5 100644 --- a/generator/generator_fish.ml +++ b/generator/generator_fish.ml @@ -29,6 +29,7 @@ open Generator_actions open Generator_structs open Generator_prepopts open Generator_c +open Generator_events let doc_opttype_of = function | Bool n -> "true|false" @@ -971,3 +972,93 @@ and generate_fish_prep_options_c () = name name; ) prepopts; pr "};\n" + +and generate_fish_event_names () = + generate_header CStyle GPLv2plus; + + pr "\ +#include +#include +#include + +#include \"fish.h\" + +const char * +event_name_of_event_bitmask (uint64_t ev) +{ + switch (ev) { +"; + + List.iter ( + fun (name, _) -> + pr " case GUESTFS_EVENT_%s:\n" (String.uppercase name); + pr " return \"%s\";\n" name + ) events; + + pr " default: + abort (); /* should not happen */ + } +} + +void +print_event_set (uint64_t event_bitmask, FILE *fp) +{ + int comma = 0; + + if (event_bitmask == GUESTFS_EVENT_ALL) { + fputs (\"*\", fp); + return; + } + +"; + + List.iter ( + fun (name, _) -> + pr " if (event_bitmask & GUESTFS_EVENT_%s) {\n" (String.uppercase name); + pr " if (comma) fputc (',', fp);\n"; + pr " comma = 1;\n"; + pr " fputs (\"%s\", fp);\n" name; + pr " }\n" + ) events; + + pr "\ +} + +int +event_bitmask_of_event_set (const char *arg, uint64_t *eventset_r) +{ + size_t n; + + if (STREQ (arg, \"*\")) { + *eventset_r = GUESTFS_EVENT_ALL; + return 0; + } + + *eventset_r = 0; + + while (*arg) { + n = strcspn (arg, \",\"); + + "; + + List.iter ( + fun (name, _) -> + pr "if (STREQLEN (arg, \"%s\", n))\n" name; + pr " *eventset_r |= GUESTFS_EVENT_%s;\n" (String.uppercase name); + pr " else "; + ) events; + + pr "\ +{ + fprintf (stderr, _(\"unknown event name: %%s\\n\"), arg); + return -1; + } + + arg += n; + if (*arg == ',') + arg++; + } + + return 0; +} +"