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);
}
/**
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
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;
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') {