[ovs-dev] [PATCH v2] util: New wrapper function ovs_vsnprintf().
Saurabh Shah
ssaurabh at nicira.com
Fri Dec 20 22:58:47 UTC 2013
So that vsnprintf on windows has C99 like semantics.
Signed-off-by: Saurabh Shah <ssaurabh at nicira.com>
---
lib/command-line.c | 2 +-
lib/dynamic-string.c | 4 ++--
lib/util.c | 18 ++++++++++++++++--
lib/util.h | 1 +
4 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/lib/command-line.c b/lib/command-line.c
index 805e51b..01f6b16 100644
--- a/lib/command-line.c
+++ b/lib/command-line.c
@@ -171,7 +171,7 @@ proctitle_set(const char *format, ...)
va_start(args, format);
n = snprintf(argv_start, argv_size, "%s: ", program_name);
if (n < argv_size) {
- n += vsnprintf(argv_start + n, argv_size - n, format, args);
+ n += ovs_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. */
diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c
index 914af64..dcc1379 100644
--- a/lib/dynamic-string.c
+++ b/lib/dynamic-string.c
@@ -152,7 +152,7 @@ ds_put_format_valist(struct ds *ds, const char *format, va_list args_)
va_copy(args, args_);
available = ds->string ? ds->allocated - ds->length + 1 : 0;
- needed = vsnprintf(&ds->string[ds->length], available, format, args);
+ needed = ovs_vsnprintf(&ds->string[ds->length], available, format, args);
va_end(args);
if (needed < available) {
@@ -162,7 +162,7 @@ ds_put_format_valist(struct ds *ds, const char *format, va_list args_)
va_copy(args, args_);
available = ds->allocated - ds->length + 1;
- needed = vsnprintf(&ds->string[ds->length], available, format, args);
+ needed = ovs_vsnprintf(&ds->string[ds->length], available, format, args);
va_end(args);
ovs_assert(needed < available);
diff --git a/lib/util.c b/lib/util.c
index 984ab45..4e60b0e 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -155,11 +155,11 @@ xvasprintf(const char *format, va_list args)
char *s;
va_copy(args2, args);
- needed = vsnprintf(NULL, 0, format, args);
+ needed = ovs_vsnprintf(NULL, 0, format, args);
s = xmalloc(needed + 1);
- vsnprintf(s, needed + 1, format, args2);
+ ovs_vsnprintf(s, needed + 1, format, args2);
va_end(args2);
return s;
@@ -502,6 +502,20 @@ ovs_hex_dump(FILE *stream, const void *buf_, size_t size,
}
}
+int
+ovs_vsnprintf(char * s, size_t n, const char * format, va_list arg)
+{
+#ifndef _WIN32
+ return vsnprintf(s, n ,format, arg);
+#else
+ int needed = _vscprintf(format, arg);
+ if (s && (needed < n)) {
+ vsnprintf(s, n, format, arg);
+ }
+ return needed;
+#endif
+}
+
bool
str_to_int(const char *s, int base, int *i)
{
diff --git a/lib/util.h b/lib/util.h
index 8886a54..1519808 100644
--- a/lib/util.h
+++ b/lib/util.h
@@ -273,6 +273,7 @@ void ovs_error_valist(int err_no, const char *format, va_list)
const char *ovs_retval_to_string(int);
const char *ovs_strerror(int);
void ovs_hex_dump(FILE *, const void *, size_t, uintptr_t offset, bool ascii);
+int ovs_vsnprintf(char * s, size_t n, const char * format, va_list arg);
bool str_to_int(const char *, int base, int *);
bool str_to_long(const char *, int base, long *);
--
1.7.9.5
More information about the dev
mailing list