summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2007-02-06 05:26:25 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:44:42 -0500
commit8538af1107a6e894d4941708b77e79fac587e35d (patch)
tree1494d0029526a4c9c7a99a7906749b382a7cab28 /source4/lib
parent80d3b780e566dcb0a23fe4f1a89749acf4c3f470 (diff)
downloadsamba-8538af1107a6e894d4941708b77e79fac587e35d.tar.gz
samba-8538af1107a6e894d4941708b77e79fac587e35d.tar.bz2
samba-8538af1107a6e894d4941708b77e79fac587e35d.zip
r21174: many thanks to Paul Wayper for pointing out that C99 requires a
matching va_end() for each va_copy(). This doesn't matter for most architectures, but there could be some obscure ones where it does matter. some of this should be ported to Samba3 (This used to be commit 21eb316473486cb6b73bb3ff9c5f3a44ecd57e4a)
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/replace/snprintf.c6
-rw-r--r--source4/lib/talloc/talloc.c17
-rw-r--r--source4/lib/util/dprintf.c2
-rw-r--r--source4/lib/util/util_file.c2
-rw-r--r--source4/lib/util/xfile.c2
5 files changed, 18 insertions, 11 deletions
diff --git a/source4/lib/replace/snprintf.c b/source4/lib/replace/snprintf.c
index b38d8dad34..9f8a7657e5 100644
--- a/source4/lib/replace/snprintf.c
+++ b/source4/lib/replace/snprintf.c
@@ -742,6 +742,8 @@ static int dopr(char *buffer, size_t maxlen, const char *format, va_list args_in
ret = currlen;
done:
+ va_end(args);
+
while (chunks) {
cnk = chunks->next;
free(chunks);
@@ -1260,16 +1262,16 @@ static int add_cnk_list_entry(struct pr_chunk_x **list,
va_list ap2;
VA_COPY(ap2, ap);
-
ret = vsnprintf(NULL, 0, format, ap2);
+ va_end(ap2);
if (ret <= 0) return ret;
(*ptr) = (char *)malloc(ret+1);
if (!*ptr) return -1;
VA_COPY(ap2, ap);
-
ret = vsnprintf(*ptr, ret+1, format, ap2);
+ va_end(ap2);
return ret;
}
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c
index 15a44bd0d9..028b44a8c7 100644
--- a/source4/lib/talloc/talloc.c
+++ b/source4/lib/talloc/talloc.c
@@ -1174,10 +1174,11 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap)
va_list ap2;
char c;
- va_copy(ap2, ap);
-
/* this call looks strange, but it makes it work on older solaris boxes */
- if ((len = vsnprintf(&c, 1, fmt, ap2)) < 0) {
+ va_copy(ap2, ap);
+ len = vsnprintf(&c, 1, fmt, ap2);
+ va_end(ap2);
+ if (len < 0) {
return NULL;
}
@@ -1185,6 +1186,7 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap)
if (ret) {
va_copy(ap2, ap);
vsnprintf(ret, len+1, fmt, ap2);
+ va_end(ap2);
_talloc_set_name_const(ret, ret);
}
@@ -1226,10 +1228,13 @@ char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
tc = talloc_chunk_from_ptr(s);
+ s_len = tc->size - 1;
+
va_copy(ap2, ap);
+ len = vsnprintf(&c, 1, fmt, ap2);
+ va_end(ap2);
- s_len = tc->size - 1;
- if ((len = vsnprintf(&c, 1, fmt, ap2)) <= 0) {
+ if (len <= 0) {
/* Either the vsnprintf failed or the format resulted in
* no characters being formatted. In the former case, we
* ought to return NULL, in the latter we ought to return
@@ -1243,8 +1248,8 @@ char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
if (!s) return NULL;
va_copy(ap2, ap);
-
vsnprintf(s+s_len, len+1, fmt, ap2);
+ va_end(ap2);
_talloc_set_name_const(s, s);
return s;
diff --git a/source4/lib/util/dprintf.c b/source4/lib/util/dprintf.c
index 62dc2a227a..79b90ec3e1 100644
--- a/source4/lib/util/dprintf.c
+++ b/source4/lib/util/dprintf.c
@@ -39,8 +39,8 @@ _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBU
/* do any message translations */
va_copy(ap2, ap);
-
ret = vasprintf(&p, format, ap2);
+ va_end(ap2);
if (ret <= 0) return ret;
diff --git a/source4/lib/util/util_file.c b/source4/lib/util/util_file.c
index 887efb9836..3c44351c50 100644
--- a/source4/lib/util/util_file.c
+++ b/source4/lib/util/util_file.c
@@ -364,8 +364,8 @@ _PUBLIC_ int vfdprintf(int fd, const char *format, va_list ap) _PRINTF_ATTRIBUTE
va_list ap2;
va_copy(ap2, ap);
-
len = vasprintf(&p, format, ap2);
+ va_end(ap2);
if (len <= 0) return len;
ret = write(fd, p, len);
SAFE_FREE(p);
diff --git a/source4/lib/util/xfile.c b/source4/lib/util/xfile.c
index 1cf77a3220..870cd4c136 100644
--- a/source4/lib/util/xfile.c
+++ b/source4/lib/util/xfile.c
@@ -203,8 +203,8 @@ size_t x_fwrite(const void *p, size_t size, size_t nmemb, XFILE *f)
va_list ap2;
va_copy(ap2, ap);
-
len = vasprintf(&p, format, ap2);
+ va_end(ap2);
if (len <= 0) return len;
ret = x_fwrite(p, 1, len, f);
SAFE_FREE(p);