X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fcommand-line.c;h=b881c042ada693eece3e3d59079d491aaabcbbb6;hb=refs%2Fheads%2Fmanual;hp=17344c36aaf9efbf8dc8c592fbf1ba8278fd3a93;hpb=02dd3123a0e312f1d33403e744af52dd6096f12d;p=openvswitch diff --git a/lib/command-line.c b/lib/command-line.c index 17344c36..b881c042 100644 --- a/lib/command-line.c +++ b/lib/command-line.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,9 @@ #include #include #include "util.h" +#include "vlog.h" + +VLOG_DEFINE_THIS_MODULE(command_line); /* Given the GNU-style long options in 'options', returns a string that may be * passed to getopt() with the corresponding short options. The caller is @@ -29,7 +32,7 @@ long_options_to_short_options(const struct option options[]) { char short_options[UCHAR_MAX * 3 + 1]; char *p = short_options; - + for (; options->name; options++) { const struct option *o = options; if (o->flag == NULL && o->val > 0 && o->val <= UCHAR_MAX) { @@ -43,7 +46,7 @@ long_options_to_short_options(const struct option options[]) } } *p = '\0'; - + return xstrdup(short_options); } @@ -66,30 +69,30 @@ run_command(int argc, char *argv[], const struct command commands[]) if (!strcmp(p->name, argv[0])) { int n_arg = argc - 1; if (n_arg < p->min_args) { - ovs_fatal(0, "'%s' command requires at least %d arguments", - p->name, p->min_args); + VLOG_FATAL( "'%s' command requires at least %d arguments", + p->name, p->min_args); } else if (n_arg > p->max_args) { - ovs_fatal(0, "'%s' command takes at most %d arguments", - p->name, p->max_args); + VLOG_FATAL("'%s' command takes at most %d arguments", + p->name, p->max_args); } else { p->handler(argc, argv); if (ferror(stdout)) { - ovs_fatal(0, "write to stdout failed"); + VLOG_FATAL("write to stdout failed"); } if (ferror(stderr)) { - ovs_fatal(0, "write to stderr failed"); + VLOG_FATAL("write to stderr failed"); } return; } } } - ovs_fatal(0, "unknown command '%s'; use --help for help", argv[0]); + VLOG_FATAL("unknown command '%s'; use --help for help", argv[0]); } /* Process title. */ -#ifdef __linux__ +#ifdef LINUX_DATAPATH static char *argv_start; /* Start of command-line arguments in memory. */ static size_t argv_size; /* Number of bytes of command-line arguments. */ static char *saved_proctitle; /* Saved command-line arguments. */ @@ -137,8 +140,8 @@ proctitle_init(int argc, char **argv) } } -/* Changes the name of the process, as shown by "ps", to 'format', which is - * formatted as if by printf(). */ +/* Changes the name of the process, as shown by "ps", to the program name + * followed by 'format', which is formatted as if by printf(). */ void proctitle_set(const char *format, ...) { @@ -154,7 +157,10 @@ proctitle_set(const char *format, ...) } va_start(args, format); - n = vsnprintf(argv_start, argv_size, format, args); + n = snprintf(argv_start, argv_size, "%s: ", program_name); + if (n < argv_size) { + n += vsnprintf(argv_start + n, argv_size - n, format, args); + } if (n >= argv_size) { /* The name is too long, so add an ellipsis at the end. */ strcpy(&argv_start[argv_size - 4], "..."); @@ -176,7 +182,7 @@ proctitle_restore(void) saved_proctitle = NULL; } } -#else /* !__linux__ */ +#else /* !LINUX_DATAPATH*/ /* Stubs that don't do anything on non-Linux systems. */ void @@ -184,13 +190,16 @@ proctitle_init(int argc OVS_UNUSED, char **argv OVS_UNUSED) { } +#ifndef __FreeBSD__ +/* On FreeBSD we #define this to setproctitle. */ void proctitle_set(const char *format OVS_UNUSED, ...) { } +#endif void proctitle_restore(void) { } -#endif /* !__linux__ */ +#endif /* !LINUX_DATAPATH */