diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-04-16 09:40:02 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-04-16 09:40:02 +0000 |
commit | 37c0312def0b0c1b3c4248bd8d797db15d88d772 (patch) | |
tree | 8dcb976c17049887e27d4119a900200ad29c56ea /source3/lib | |
parent | d79a8c68d6ea2288dc8574f994bb281c2a784cf8 (diff) | |
download | samba-37c0312def0b0c1b3c4248bd8d797db15d88d772.tar.gz samba-37c0312def0b0c1b3c4248bd8d797db15d88d772.tar.bz2 samba-37c0312def0b0c1b3c4248bd8d797db15d88d772.zip |
added fdprintf()
this is like fprintf() but operates on a file descriptor
combined with file_load_lines() this makes it really easy to get rid
of the use of fopen() in Samba.
(This used to be commit bd5cd502bf52164b95d7bfc026189e04988171db)
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/slprintf.c | 30 | ||||
-rw-r--r-- | source3/lib/util_file.c | 6 |
2 files changed, 34 insertions, 2 deletions
diff --git a/source3/lib/slprintf.c b/source3/lib/slprintf.c index a755bf1bc5..ed7113c865 100644 --- a/source3/lib/slprintf.c +++ b/source3/lib/slprintf.c @@ -64,3 +64,33 @@ va_dcl va_end(ap); return ret; } + + /* this is rather line fprintf, except that it works on a file descriptor + and is limited to one pstring of output */ +#ifdef HAVE_STDARG_H + int fdprintf(int fd, char *format, ...) +{ +#else + int fdprintf(va_alist) +va_dcl +{ + int fd; + char *format; +#endif + va_list ap; + int ret; + pstring str; + +#ifdef HAVE_STDARG_H + va_start(ap, format); +#else + va_start(ap); + fd = va_arg(ap,int); + format = va_arg(ap,char *); +#endif + str[0] = 0; + + ret = vslprintf(str,sizeof(str),format,ap); + va_end(ap); + return write(fd, str, strlen(str)); +} diff --git a/source3/lib/util_file.c b/source3/lib/util_file.c index 39c97d5c3f..d533e6428f 100644 --- a/source3/lib/util_file.c +++ b/source3/lib/util_file.c @@ -362,12 +362,13 @@ char **file_lines_load(char *fname, int *numlines) if (s[0] == '\n') i++; } - ret = (char **)malloc(sizeof(ret[0])*(i+1)); + ret = (char **)malloc(sizeof(ret[0])*(i+2)); if (!ret) { free(p); return NULL; } - *numlines = i; + memset(ret, 0, sizeof(ret[0])*(i+2)); + if (numlines) *numlines = i; ret[0] = p; for (s = p, i=0; s < p+size; s++) { @@ -391,3 +392,4 @@ void file_lines_free(char **lines) free(lines[0]); free(lines); } + |