Quoting Christian Seiler (christ...@iwakd.de): > Signed-off-by: Christian Seiler <christ...@iwakd.de>
Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> but I notice that lxc_read_line_from_file() is not being used here or later. The function would seem more useful if it accepted a line number to read. Otherwise I'd suggest we drop the function. Thoughts? > --- > src/lxc/utils.c | 91 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/lxc/utils.h | 5 +++ > 2 files changed, 96 insertions(+) > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index dc98443..02336d7 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -39,6 +39,12 @@ > #include <sys/wait.h> > #include <assert.h> > > +#ifndef HAVE_GETLINE > +#ifdef HAVE_FGETLN > +#include <../include/getline.h> > +#endif > +#endif > + > #include "utils.h" > #include "log.h" > > @@ -807,3 +813,88 @@ void **lxc_dup_array(void **array, lxc_dup_fn > element_dup_fn, lxc_free_fn elemen > > return result; > } > + > +int lxc_write_to_file(const char *filename, const void* buf, size_t count, > bool add_newline) > +{ > + int fd, saved_errno; > + ssize_t ret; > + > + fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT | O_CLOEXEC, 0666); > + if (fd < 0) > + return -1; > + ret = lxc_write_nointr(fd, buf, count); > + if (ret < 0) > + goto out_error; > + if ((size_t)ret != count) > + goto out_error; > + if (add_newline) { > + ret = lxc_write_nointr(fd, "\n", 1); > + if (ret != 1) > + goto out_error; > + } > + close(fd); > + return 0; > + > +out_error: > + saved_errno = errno; > + close(fd); > + errno = saved_errno; > + return -1; > +} > + > +int lxc_read_from_file(const char *filename, void* buf, size_t count) > +{ > + int fd = -1, saved_errno; > + ssize_t ret; > + > + fd = open(filename, O_RDONLY | O_CLOEXEC); > + if (fd < 0) > + return -1; > + > + if (!buf || !count) { > + char buf2[100]; > + size_t count2 = 0; > + while ((ret = read(fd, buf2, 100)) > 0) > + count2 += ret; > + if (ret >= 0) > + ret = count2; > + } else { > + memset(buf, 0, count); > + ret = read(fd, buf, count); > + } > + > + if (ret < 0) > + ERROR("read %s: %s", filename, strerror(errno)); > + > + saved_errno = errno; > + close(fd); > + errno = saved_errno; > + return ret; > +} > + > +char *lxc_read_line_from_file(const char *filename) > +{ > + FILE *f; > + char *line = NULL; > + int saved_errno; > + size_t sz = 0; > + > + f = fopen_cloexec(filename, "r"); > + if (!f) > + return NULL; > + > + if (getline(&line, &sz, f) == -1) { > + saved_errno = errno; > + fclose(f); > + errno = saved_errno; > + return NULL; > + } > + > + fclose(f); > + > + /* trim line, if necessary */ > + if (strlen(line) > 0 && line[strlen(line) - 1] == '\n') > + line[strlen(line) - 1] = '\0'; > + > + return line; > +} > diff --git a/src/lxc/utils.h b/src/lxc/utils.h > index 7261846..4c2ab29 100644 > --- a/src/lxc/utils.h > +++ b/src/lxc/utils.h > @@ -194,6 +194,11 @@ extern ssize_t lxc_read_nointr_expect(int fd, void* buf, > size_t count, const voi > extern int sha1sum_file(char *fnam, unsigned char *md_value); > #endif > > +/* read and write whole files */ > +extern int lxc_write_to_file(const char *filename, const void* buf, size_t > count, bool add_newline); > +extern int lxc_read_from_file(const char *filename, void* buf, size_t count); > +extern char *lxc_read_line_from_file(const char *filename); > + > /* convert variadic argument lists to arrays (for execl type argument lists) > */ > extern char** lxc_va_arg_list_to_argv(va_list ap, size_t skip, int > do_strdup); > extern const char** lxc_va_arg_list_to_argv_const(va_list ap, size_t skip); > -- > 1.7.10.4 > > > ------------------------------------------------------------------------------ > Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more! > Discover the easy way to master current and previous Microsoft technologies > and advance your career. Get an incredible 1,500+ hours of step-by-step > tutorial videos with LearnDevNow. Subscribe today and save! > http://pubads.g.doubleclick.net/gampad/clk?id=58041391&iu=/4140/ostg.clktrk > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel