]> err.no Git - varnish/commitdiff
Add a vreadfile() utility function, which reads a file into malloc'ed
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 21 Nov 2008 11:32:56 +0000 (11:32 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 21 Nov 2008 11:32:56 +0000 (11:32 +0000)
memory

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3414 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/include/libvarnish.h
varnish-cache/lib/libvarnish/vtmpfile.c
varnish-cache/lib/libvcl/vcc_compile.c

index c023fbeba1622db844162678accb549f81eb805a..99ef27d85228568cc9a34648a060fb9c05b9137f 100644 (file)
@@ -86,6 +86,7 @@ void varnish_version(const char *);
 
 /* from libvarnish/vtmpfile.c */
 int vtmpfile(char *);
+char *vreadfile(int fd);
 
 /*
  * assert(), AN() and AZ() are static checks that should not happen.
index 3e251485f22b2a5e3b5cdc6ccef255e95522d110..733efa26f77763a05703129270f985dd7baad6fa 100644 (file)
@@ -35,6 +35,9 @@
 #include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
 
 #include "libvarnish.h"
 
@@ -74,3 +77,21 @@ vtmpfile(char *template)
        }
        /* not reached */
 }
+
+char *
+vreadfile(int fd)
+{
+       struct stat st;
+       char *f;
+       int i;
+
+       assert(0 == fstat(fd, &st));
+       if (!S_ISREG(st.st_mode))
+               return (NULL);
+       f = malloc(st.st_size + 1);
+       assert(f != NULL);
+       i = read(fd, f, st.st_size);
+       assert(i == st.st_size);
+       f[i] = '\0';
+       return (f);
+}
index 0db0c569673c63cd3765883ba940bba97392b142..a7674ce56293ed680c9bf0c06c9217c7cfed7e25 100644 (file)
@@ -402,8 +402,6 @@ static struct source *
 vcc_file_source(struct vsb *sb, const char *fn, int fd)
 {
        char *f;
-       int i;
-       struct stat st;
        struct source *sp;
 
        if (fd < 0) {
@@ -414,19 +412,10 @@ vcc_file_source(struct vsb *sb, const char *fn, int fd)
                        return (NULL);
                }
        }
-       assert(0 == fstat(fd, &st));
-       if (! S_ISREG(st.st_mode)) {
-               vsb_printf(sb, "File '%s' is not a regular file\n", fn);
-               AZ(close(fd));
-               return (NULL);
-       }
-       f = malloc(st.st_size + 1);
-       assert(f != NULL);
-       i = read(fd, f, st.st_size);
-       assert(i == st.st_size);
+       f = vreadfile(fd);
+       AN(f);
        AZ(close(fd));
-       f[i] = '\0';
-       sp = vcc_new_source(f, f + i, fn);
+       sp = vcc_new_source(f, NULL, fn);
        sp->freeit = f;
        return (sp);
 }