X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=daemon%2Fguestfsd.c;h=0fc01283901fa84156baa988bb09d67bcaec304e;hp=acb44f9908d6c905677504ad5638bd2231197301;hb=6c97a65ce768b357a1481cde0533d4cf0b8b931c;hpb=8e33cd5f2f2e7e30525cb2a70d86de70e3d6a4f9 diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index acb44f9..0fc0128 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -39,13 +39,17 @@ #include #include #include +#include +#include #ifdef HAVE_PRINTF_H # include #endif +#include "sockets.h" #include "c-ctype.h" #include "ignore-value.h" +#include "error.h" #include "daemon.h" @@ -89,10 +93,31 @@ daemon (int nochdir, int noclose) } #endif /* WIN32 */ +#ifdef WIN32 +static int +winsock_init (void) +{ + int r; + + /* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */ + r = gl_sockets_startup (SOCKETS_2_2); + return r == 0 ? 0 : -1; +} +#else /* !WIN32 */ +static int +winsock_init (void) +{ + return 0; +} +#endif /* !WIN32 */ + /* Location to mount root device. */ const char *sysroot = "/sysroot"; /* No trailing slash. */ int sysroot_len = 8; +/* Not used explicitly, but required by the gnulib 'error' module. */ +const char *program_name = "guestfsd"; + static void usage (void) { @@ -116,6 +141,9 @@ main (int argc, char *argv[]) char *cmdline; char *vmchannel = NULL; + if (winsock_init () == -1) + error (EXIT_FAILURE, 0, "winsock initialization failed"); + #ifdef HAVE_REGISTER_PRINTF_SPECIFIER /* http://udrepper.livejournal.com/20948.html */ register_printf_specifier ('Q', print_shell_quote, print_arginfo); @@ -1010,31 +1038,19 @@ device_name_translation (char *device, const char *func) * involved. eg. You can create or remove some device, but the /dev * device node won't appear until some time later. This means that * you get an error if you run one command followed by another. + * * Use 'udevadm settle' after certain commands, but don't be too * fussed if it fails. + * + * 'udevsettle' was the old name for this command (RHEL 5). This was + * deprecated in favour of 'udevadm settle'. The old 'udevsettle' + * command was left as a symlink. Then in Fedora 13 the old symlink + * remained but it stopped working (RHBZ#548121), so we have to be + * careful not to assume that we can use 'udevsettle' if it exists. */ void udev_settle (void) { - static int which_prog = 0; - - if (which_prog == 0) { - if (access ("/sbin/udevsettle", X_OK) == 0) - which_prog = 2; - else if (access ("/sbin/udevadm", X_OK) == 0) - which_prog = 1; - else - which_prog = 3; - } - - switch (which_prog) { - case 1: - command (NULL, NULL, "/sbin/udevadm", "settle", NULL); - break; - case 2: - command (NULL, NULL, "/sbin/udevsettle", NULL); - break; - default: - ; - } + (void) command (NULL, NULL, "/sbin/udevadm", "settle", NULL); + (void) command (NULL, NULL, "/sbin/udevsettle", NULL); }