lib: Reformat x_fgets_slash
[martins/samba.git] / lib / util / util_file.c
index 83c746b654bec9247d21266a816d5df8d070dad7..4777951024889832273736c4343994644a798771 100644 (file)
@@ -36,74 +36,78 @@ read a line from a file with possible \ continuation chars.
 Blanks at the start or end of a line are stripped.
 The string will be allocated if s2 is NULL
 **/
-_PUBLIC_ char *fgets_slash(char *s2,int maxlen,XFILE *f)
+_PUBLIC_ char *x_fgets_slash(char *s2,int maxlen,XFILE *f)
 {
-  char *s=s2;
-  int len = 0;
-  int c;
-  bool start_of_line = true;
-
-  if (x_feof(f))
-    return(NULL);
-
-  if (maxlen <2) return(NULL);
-
-  if (!s2)
-    {
-      maxlen = MIN(maxlen,8);
-      s = (char *)malloc(maxlen);
-    }
-
-  if (!s) return(NULL);
-
-  *s = 0;
-
-  while (len < maxlen-1)
-    {
-      c = x_getc(f);
-      switch (c)
-       {
-       case '\r':
-         break;
-       case '\n':
-         while (len > 0 && s[len-1] == ' ')
-           {
-             s[--len] = 0;
-           }
-         if (len > 0 && s[len-1] == '\\')
-           {
-             s[--len] = 0;
-             start_of_line = true;
-             break;
-           }
-         return(s);
-       case EOF:
-         if (len <= 0 && !s2)
-           SAFE_FREE(s);
-         return(len>0?s:NULL);
-       case ' ':
-         if (start_of_line)
-           break;
-         /* fall through */
-       default:
-         start_of_line = false;
-         s[len++] = c;
-         s[len] = 0;
+       char *s=s2;
+       int len = 0;
+       int c;
+       bool start_of_line = true;
+
+       if (x_feof(f)) {
+               return(NULL);
+       }
+
+       if (maxlen <2) {
+               return(NULL);
+       }
+
+       if (!s2) {
+               maxlen = MIN(maxlen,8);
+               s = (char *)malloc(maxlen);
        }
-      if (!s2 && len > maxlen-3)
-       {
-         char *t;
-
-         maxlen *= 2;
-         t = realloc_p(s, char, maxlen);
-         if (!t) {
-           DEBUG(0,("fgets_slash: failed to expand buffer!\n"));
-           SAFE_FREE(s);
-           return(NULL);
-         } else s = t;
+
+       if (!s) {
+               return(NULL);
+       }
+
+       *s = 0;
+
+       while (len < maxlen-1) {
+               c = x_getc(f);
+               switch (c)
+               {
+                   case '\r':
+                           break;
+                   case '\n':
+                           while (len > 0 && s[len-1] == ' ') {
+                                   s[--len] = 0;
+                           }
+                           if (len > 0 && s[len-1] == '\\') {
+                                   s[--len] = 0;
+                                   start_of_line = true;
+                                   break;
+                           }
+                           return(s);
+                   case EOF:
+                           if (len <= 0 && !s2) {
+                                   SAFE_FREE(s);
+                           }
+                           return(len>0?s:NULL);
+                   case ' ':
+                           if (start_of_line) {
+                                   break;
+                           }
+                           /* fall through */
+                   default:
+                           start_of_line = false;
+                           s[len++] = c;
+                           s[len] = 0;
+               }
+               if (!s2 && len > maxlen-3) {
+                       char *t;
+
+                       maxlen *= 2;
+                       t = realloc_p(s, char, maxlen);
+                       if (!t) {
+                               DBG_ERR("failed to expand buffer!\n");
+                               SAFE_FREE(s);
+                               return(NULL);
+                       } else {
+                               s = t;
+                       }
+               }
        }
-    }
-  return(s);
+       return(s);
 }
 
 /**
@@ -211,62 +215,6 @@ _PUBLIC_ char *file_load(const char *fname, size_t *size, size_t maxsize, TALLOC
        return p;
 }
 
-
-/**
-mmap (if possible) or read a file
-**/
-_PUBLIC_ void *map_file(const char *fname, size_t size)
-{
-       size_t s2 = 0;
-       void *p = NULL;
-#ifdef HAVE_MMAP
-       int fd;
-       fd = open(fname, O_RDONLY, 0);
-       if (fd == -1) {
-               DEBUG(2,("Failed to load %s - %s\n", fname, strerror(errno)));
-               return NULL;
-       }
-       p = mmap(NULL, size, PROT_READ, MAP_SHARED|MAP_FILE, fd, 0);
-       close(fd);
-       if (p == MAP_FAILED) {
-               DEBUG(1,("Failed to mmap %s - %s\n", fname, strerror(errno)));
-               return NULL;
-       }
-#endif
-       if (!p) {
-               p = file_load(fname, &s2, 0, NULL);
-               if (!p) return NULL;
-               if (s2 != size) {
-                       DEBUG(1,("incorrect size for %s - got %d expected %d\n",
-                                fname, (int)s2, (int)size));
-                       talloc_free(p);
-                       return NULL;
-               }
-       }
-
-       return p;
-}
-
-/**
- unmap or free memory
-**/
-
-bool unmap_file(void *start, size_t size)
-{
-#ifdef HAVE_MMAP
-       if (munmap( start, size ) != 0) {
-               DEBUG( 1, ("map_file: Failed to unmap address %p "
-                       "of size %u - %s\n",
-                       start, (unsigned int)size, strerror(errno) ));
-               return false;
-       }
-       return true;
-#else
-       talloc_free(start);
-       return true;
-#endif
-}
-
 /**
 parse a buffer into lines
 'p' will be freed on error, and otherwise will be made a child of the returned array
@@ -282,7 +230,7 @@ char **file_lines_parse(char *p, size_t size, int *numlines, TALLOC_CTX *mem_ctx
                if (s[0] == '\n') i++;
        }
 
-       ret = talloc_array(mem_ctx, char *, i+2);
+       ret = talloc_zero_array(mem_ctx, char *, i+2);
        if (!ret) {
                talloc_free(p);
                return NULL;
@@ -290,8 +238,6 @@ char **file_lines_parse(char *p, size_t size, int *numlines, TALLOC_CTX *mem_ctx
 
        talloc_steal(ret, p);
 
-       memset(ret, 0, sizeof(ret[0])*(i+2));
-
        ret[0] = p;
        for (s = p, i=0; s < p+size; s++) {
                if (s[0] == '\n') {