Browse Source

Moving grad_fd to string.c

dinesh 17 years ago
parent
commit
e52b97e4d9
3 changed files with 31 additions and 2 deletions
  1. 25 0
      ccan/string/string.c
  2. 4 0
      ccan/string/string.h
  3. 2 2
      tools/grab_file.c

+ 25 - 0
ccan/string/string.c

@@ -6,6 +6,10 @@
 #include <stdlib.h>
 #include "string.h"
 #include "talloc/talloc.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
 
 char **strsplit(const void *ctx, const char *string, const char *delims,
 		 unsigned int *nump)
@@ -42,3 +46,24 @@ char *strjoin(const void *ctx, char *strings[], const char *delim)
 	}
 	return ret;
 }
+
+void *grab_fd(const void *ctx, int fd)
+{
+	int ret;
+	unsigned int max = 16384, size = 0;
+	char *buffer;
+
+	buffer = talloc_array(ctx, char, max+1);
+	while ((ret = read(fd, buffer + size, max - size)) > 0) {
+		size += ret;
+		if (size == max)
+			buffer = talloc_realloc(ctx, buffer, char, max*=2 + 1);
+	}
+	if (ret < 0) {
+		talloc_free(buffer);
+		buffer = NULL;
+	} else
+		buffer[size] = '\0';
+
+	return buffer;
+}

+ 4 - 0
ccan/string/string.h

@@ -102,4 +102,8 @@ char **strsplit(const void *ctx, const char *string, const char *delims,
  *	}
  */
 char *strjoin(const void *ctx, char *strings[], const char *delim);
+
+void *grab_fd(const void *ctx, int fd);
+
+void *grab_file(const void *ctx, const char *filename);
 #endif /* CCAN_STRING_H */

+ 2 - 2
tools/grab_file.c

@@ -16,7 +16,7 @@ static int close_no_errno(int fd)
 	return ret;
 }
 
-void *grab_fd(const void *ctx, int fd)
+/*void *grab_fd(const void *ctx, int fd)
 {
 	int ret;
 	unsigned int max = 16384, size = 0;
@@ -35,7 +35,7 @@ void *grab_fd(const void *ctx, int fd)
 		buffer[size] = '\0';
 
 	return buffer;
-}
+}*/
 
 /* This version adds one byte (for nul term) */
 void *grab_file(const void *ctx, const char *filename)