X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fguestfsd.c;h=9691053fb9f084f36b1418043df0dbe2c51ab3f1;hb=0a302b78780bad541debf3d3c2f46ad42afecef3;hp=67206d0ee28782d164b0f0651e1de15506b23824;hpb=b884456237b71e1a39fae3fc60f5a168b020cd6b;p=libguestfs.git diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index 67206d0..9691053 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -20,6 +20,10 @@ #define _BSD_SOURCE /* for daemon(3) */ +#ifdef HAVE_WINDOWS_H +#include +#endif + #include #include #include @@ -56,6 +60,10 @@ static char *read_cmdline (void); #define AI_ADDRCONFIG 0 #endif +#ifndef MAX +#define MAX(a,b) ((a)>(b)?(a):(b)) +#endif + int verbose = 0; static int print_shell_quote (FILE *stream, const struct printf_info *info, const void *const *args); @@ -167,6 +175,9 @@ main (int argc, char *argv[]) perror ("sigaction SIGPIPE"); /* but try to continue anyway ... */ #endif +#ifdef WIN32 +#define setenv(n,v,f) _putenv(n "=" v) +#endif /* Set up a basic environment. After we are called by /init the * environment is essentially empty. * https://bugzilla.redhat.com/show_bug.cgi?id=502074#c5 @@ -175,8 +186,16 @@ main (int argc, char *argv[]) setenv ("SHELL", "/bin/sh", 1); setenv ("LC_ALL", "C", 1); +#ifndef WIN32 /* We document that umask defaults to 022 (it should be this anyway). */ umask (022); +#else + /* This is the default for Windows anyway. It's not even clear if + * Windows ever uses this -- the MSDN documentation for the function + * contains obvious errors. + */ + _umask (0); +#endif /* Get the vmchannel string. * @@ -311,7 +330,7 @@ main (int argc, char *argv[]) XDR xdr; uint32_t len = GUESTFS_LAUNCH_FLAG; xdrmem_create (&xdr, lenbuf, sizeof lenbuf, XDR_ENCODE); - xdr_uint32_t (&xdr, &len); + xdr_u_int (&xdr, &len); if (xwrite (sock, lenbuf, sizeof lenbuf) == -1) exit (EXIT_FAILURE); @@ -320,10 +339,15 @@ main (int argc, char *argv[]) /* Fork into the background. */ if (!dont_fork) { +#ifndef WIN32 if (daemon (0, 1) == -1) { perror ("daemon"); exit (EXIT_FAILURE); } +#else /* WIN32 */ + fprintf (stderr, "On Windows the daemon does not support forking into the background.\nYou *must* run the daemon with the -f option.\n"); + exit (EXIT_FAILURE); +#endif /* WIN32 */ } /* Enter the main loop, reading and performing actions. */