diff options
author | Olivier Blin <oblin@mandriva.com> | 2007-08-27 13:18:22 +0000 |
---|---|---|
committer | Olivier Blin <oblin@mandriva.com> | 2007-08-27 13:18:22 +0000 |
commit | f82916359be360c46950fc37cd04e73288ebe918 (patch) | |
tree | 9464dcb5e0144dd817398da530dc5815aa2544e2 /mdk-stage1/utils.c | |
parent | 14817fd460bd1ec65c69a64fc4300d0ba8ac67c2 (diff) | |
download | drakx-f82916359be360c46950fc37cd04e73288ebe918.tar drakx-f82916359be360c46950fc37cd04e73288ebe918.tar.gz drakx-f82916359be360c46950fc37cd04e73288ebe918.tar.bz2 drakx-f82916359be360c46950fc37cd04e73288ebe918.tar.xz drakx-f82916359be360c46950fc37cd04e73288ebe918.zip |
move some code in new cat_file and line_counts functions
Diffstat (limited to 'mdk-stage1/utils.c')
-rw-r--r-- | mdk-stage1/utils.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/mdk-stage1/utils.c b/mdk-stage1/utils.c index 5e25c41ff..4846a0aea 100644 --- a/mdk-stage1/utils.c +++ b/mdk-stage1/utils.c @@ -16,6 +16,7 @@ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> +#include <fcntl.h> #include <unistd.h> #include <ctype.h> #include <dirent.h> @@ -46,6 +47,38 @@ off_t file_size(const char * path) return statr.st_size; } +char * cat_file(const char * file, struct stat * s) { + char * buf; + int fd = open(file, O_RDONLY); + if (fd == -1) { + log_perror(file); + return NULL; + } + + fstat(fd, s); + buf = malloc(s->st_size + 1); + if (read(fd, buf, s->st_size) != (ssize_t)s->st_size) { + close(fd); + free(buf); + log_perror(file); + return NULL; + } + buf[s->st_size] = '\0'; + close(fd); + + return buf; +} + +int line_counts(const char * buf) { + const char * ptr = buf; + int line = 0; + while (ptr) { + line++; + ptr = strchr(ptr + 1, '\n'); + } + return line; +} + int total_memory(void) { int value; |