summaryrefslogtreecommitdiff
path: root/file_io/win32
diff options
context:
space:
mode:
authormanoj <manoj@13f79535-47bb-0310-9956-ffa450edef68>1999-11-05 21:16:18 +0000
committermanoj <manoj@13f79535-47bb-0310-9956-ffa450edef68>1999-11-05 21:16:18 +0000
commit134bb8768fda1747c83f4788b930ff12b1a14063 (patch)
tree86ad7d81f13ac268b4ec59a5fae324d6aff2153b /file_io/win32
parentb8298068a4597722e5b42c70c887dfb43b8c8682 (diff)
downloadlibapr-134bb8768fda1747c83f4788b930ff12b1a14063.tar.gz
Rewrite ap_fprintf to be uniform on all platforms. This fixes a memory
leak and potential buffer overflow. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@59456 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'file_io/win32')
-rw-r--r--file_io/win32/readwrite.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/file_io/win32/readwrite.c b/file_io/win32/readwrite.c
index 3e3944601..1fad6ec53 100644
--- a/file_io/win32/readwrite.c
+++ b/file_io/win32/readwrite.c
@@ -256,7 +256,6 @@ API_EXPORT(int) ap_fprintf(struct file_t *fptr, const char *format, ...)
{
int cc;
va_list ap;
- ap_vformatter_buff_t vbuff;
char *buf;
int len;
@@ -264,20 +263,12 @@ API_EXPORT(int) ap_fprintf(struct file_t *fptr, const char *format, ...)
if (buf == NULL) {
return 0;
}
- /* save one byte for nul terminator */
- vbuff.curpos = buf;
- vbuff.endpos = buf + len - 1;
va_start(ap, format);
-#if 0
- cc = ap_vformatter(printf_flush, &vbuff, format, ap);
+ len = ap_vsnprintf(buf, HUGE_STRING_LEN, format, ap);
+ cc = ap_puts(buf, fptr);
va_end(ap);
- *vbuff.curpos = '\0';
-#endif
- vsprintf(buf, format, ap);
- len = strlen(buf);
- cc = ap_write(fptr, buf, &len);
- va_end(ap);
- return (cc == -1) ? len : cc;
+ free(buf);
+ return (cc == APR_SUCCESS) ? len : -1;
}