git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
process: Add thread safety comments.
[sliver-openvswitch.git]
/
lib
/
command-line.c
diff --git
a/lib/command-line.c
b/lib/command-line.c
index
2f99798
..
70b1f4d
100644
(file)
--- 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.
*
* 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 <limits.h>
#include <stdlib.h>
#include "util.h"
#include <limits.h>
#include <stdlib.h>
#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
/* 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;
{
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) {
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';
}
}
*p = '\0';
-
+
return xstrdup(short_options);
}
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) {
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) {
} 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)) {
} else {
p->handler(argc, argv);
if (ferror(stdout)) {
-
ovs_fatal(0,
"write to stdout failed");
+
VLOG_FATAL(
"write to stdout failed");
}
if (ferror(stderr)) {
}
if (ferror(stderr)) {
-
ovs_fatal(0,
"write to stderr failed");
+
VLOG_FATAL(
"write to stderr failed");
}
return;
}
}
}
}
return;
}
}
}
-
ovs_fatal(0,
"unknown command '%s'; use --help for help", argv[0]);
+
VLOG_FATAL(
"unknown command '%s'; use --help for help", argv[0]);
}
\f
/* Process title. */
}
\f
/* 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. */
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
+ * fo
llowed by 'format', which is fo
rmatted as if by printf(). */
void
proctitle_set(const char *format, ...)
{
void
proctitle_set(const char *format, ...)
{
@@
-154,7
+157,10
@@
proctitle_set(const char *format, ...)
}
va_start(args, 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], "...");
if (n >= argv_size) {
/* The name is too long, so add an ellipsis at the end. */
strcpy(&argv_start[argv_size - 4], "...");
@@
-176,21
+182,24
@@
proctitle_restore(void)
saved_proctitle = NULL;
}
}
saved_proctitle = NULL;
}
}
-#else /* !
__linux__
*/
+#else /* !
LINUX_DATAPATH
*/
/* Stubs that don't do anything on non-Linux systems. */
void
/* Stubs that don't do anything on non-Linux systems. */
void
-proctitle_init(int argc
UNUSED, char **argv
UNUSED)
+proctitle_init(int argc
OVS_UNUSED, char **argv OVS_
UNUSED)
{
}
{
}
+#if !(defined(__FreeBSD__) || defined(__NetBSD__))
+/* On these platforms we #define this to setproctitle. */
void
void
-proctitle_set(const char *format UNUSED, ...)
+proctitle_set(const char *format
OVS_
UNUSED, ...)
{
}
{
}
+#endif
void
proctitle_restore(void)
{
}
void
proctitle_restore(void)
{
}
-#endif /* !
__linux__
*/
+#endif /* !
LINUX_DATAPATH
*/