From: Aliaksei Karaliou Date: Thu, 27 Dec 2018 09:25:47 +0000 (-0500) Subject: s3:util: Move static file_pload() function to lib/util X-Git-Tag: samba-4.9.10~74 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecd28164948f1b217cb2135b548738752a97153e;p=thirdparty%2Fsamba.git s3:util: Move static file_pload() function to lib/util file_pload() is static private function in Samba3 library, however it does not have any special dependencies and might be widely used as common function, so moving it into common samba-util library. Extra fix needed to enable easy back-port of code for: BUG: https://bugzilla.samba.org/show_bug.cgi?id=13964 Signed-off-by: Aliaksei Karaliou Reviewed-by: Garming Sam Reviewed-by: Andrew Bartlett (cherry picked from commit d21fc7d8b86b0cddc619ffe528d9cd93eeedbb0b) --- diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h index 7b96a595d43..fff5478cd6d 100644 --- a/lib/util/samba_util.h +++ b/lib/util/samba_util.h @@ -394,6 +394,11 @@ _PUBLIC_ int fdprintf(int fd, const char *format, ...) PRINTF_ATTRIBUTE(2,3); */ bool file_compare(const char *path1, const char *path2); +/* + load from a pipe into memory. + */ +char *file_pload(const char *syscmd, size_t *size); + /* The following definitions come from lib/util/util.c */ diff --git a/lib/util/util_file.c b/lib/util/util_file.c index 926eda240f6..90d39f7cdd3 100644 --- a/lib/util/util_file.c +++ b/lib/util/util_file.c @@ -24,6 +24,8 @@ #include "system/filesys.h" #include #include "lib/util/samba_util.h" +#include "lib/util/sys_popen.h" +#include "lib/util/sys_rw.h" #include "lib/util/debug.h" /** @@ -362,3 +364,49 @@ bool file_compare(const char *path1, const char *path2) talloc_free(mem_ctx); return true; } + + +/** + Load from a pipe into memory. +**/ +char *file_pload(const char *syscmd, size_t *size) +{ + int fd, n; + char *p; + char buf[1024]; + size_t total; + + fd = sys_popen(syscmd); + if (fd == -1) { + return NULL; + } + + p = NULL; + total = 0; + + while ((n = sys_read(fd, buf, sizeof(buf))) > 0) { + p = talloc_realloc(NULL, p, char, total + n + 1); + if (!p) { + DEBUG(0,("file_pload: failed to expand buffer!\n")); + close(fd); + return NULL; + } + memcpy(p+total, buf, n); + total += n; + } + + if (p) { + p[total] = 0; + } + + /* FIXME: Perhaps ought to check that the command completed + * successfully (returned 0); if not the data may be + * truncated. */ + sys_pclose(fd); + + if (size) { + *size = total; + } + + return p; +} diff --git a/source3/lib/util_file.c b/source3/lib/util_file.c index 94e1118225f..cfbcf278caa 100644 --- a/source3/lib/util_file.c +++ b/source3/lib/util_file.c @@ -151,53 +151,6 @@ int file_pload_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, return 0; } -/** - Load from a pipe into memory. -**/ - -static char *file_pload(const char *syscmd, size_t *size) -{ - int fd, n; - char *p; - char buf[1024]; - size_t total; - - fd = sys_popen(syscmd); - if (fd == -1) { - return NULL; - } - - p = NULL; - total = 0; - - while ((n = sys_read(fd, buf, sizeof(buf))) > 0) { - p = talloc_realloc(NULL, p, char, total + n + 1); - if (!p) { - DEBUG(0,("file_pload: failed to expand buffer!\n")); - close(fd); - return NULL; - } - memcpy(p+total, buf, n); - total += n; - } - - if (p) { - p[total] = 0; - } - - /* FIXME: Perhaps ought to check that the command completed - * successfully (returned 0); if not the data may be - * truncated. */ - sys_pclose(fd); - - if (size) { - *size = total; - } - - return p; -} - - /** Load a pipe into memory and return an array of pointers to lines in the data