From 25c2e03228e00f577fac4a52079c601010df4f15 Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Wed, 27 Apr 2016 01:30:12 +0200 Subject: Revert "main: loader: use file utils from squareball" This reverts commit c7b4bc4d64a3ce669e54b7c7dae87527d9ee3123. --- configure.ac | 2 +- src/file.c | 26 +++++++++++++++++++++++++- src/main.c | 52 ++++++++++++++++++++++++++++++++++++---------------- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/configure.ac b/configure.ac index 16f141f..0bc1e19 100644 --- a/configure.ac +++ b/configure.ac @@ -119,7 +119,7 @@ AS_IF([test "x$have_cmocka" = "xyes"], , [ ]) AM_CONDITIONAL([USE_CMOCKA], [test "x$have_cmocka" = "xyes"]) -AC_CHECK_HEADERS([sys/types.h sys/stat.h time.h libgen.h]) +AC_CHECK_HEADERS([sys/types.h sys/stat.h time.h]) LT_LIB_M diff --git a/src/file.c b/src/file.c index a12fbc2..972f433 100644 --- a/src/file.c +++ b/src/file.c @@ -10,8 +10,10 @@ #include #endif /* HAVE_CONFIG_H */ +#include #include #include +#include #include #include "file.h" #include "error.h" @@ -23,7 +25,29 @@ char* blogc_file_get_contents(const char *path, size_t *len, sb_error_t **err) { - return sb_file_get_contents(path, len, err); + if (path == NULL || err == NULL || *err != NULL) + return NULL; + + *len = 0; + FILE *fp = fopen(path, "r"); + + if (fp == NULL) { + int tmp_errno = errno; + *err = sb_error_new_printf(BLOGC_ERROR_LOADER, + "Failed to open file (%s): %s", path, strerror(tmp_errno)); + return NULL; + } + + sb_string_t *str = sb_string_new(); + char buffer[BLOGC_FILE_CHUNK_SIZE]; + + while (!feof(fp)) { + size_t read_len = fread(buffer, sizeof(char), BLOGC_FILE_CHUNK_SIZE, fp); + *len += read_len; + sb_string_append_len(str, buffer, read_len); + } + fclose(fp); + return sb_string_free(str, false); } diff --git a/src/main.c b/src/main.c index 1f5c76c..709b37e 100644 --- a/src/main.c +++ b/src/main.c @@ -18,10 +18,6 @@ #include #endif /* HAVE_SYS_TYPES_H */ -#ifdef HAVE_LIBGEN_H -#include -#endif /* HAVE_LIBGEN_H */ - #include #include #include @@ -72,6 +68,41 @@ blogc_print_usage(void) } +static void +blogc_mkdir_recursive(const char *filename) +{ + char *fname = sb_strdup(filename); + for (char *tmp = fname; *tmp != '\0'; tmp++) { + if (*tmp != '/' && *tmp != '\\') + continue; +#if defined(HAVE_SYS_STAT_H) && defined(HAVE_SYS_TYPES_H) + char bkp = *tmp; + *tmp = '\0'; + if ((strlen(fname) > 0) && +#if defined(WIN32) || defined(_WIN32) + (-1 == mkdir(fname)) && +#else + (-1 == mkdir(fname, 0777)) && +#endif + (errno != EEXIST)) + { + fprintf(stderr, "blogc: error: failed to create output " + "directory (%s): %s\n", fname, strerror(errno)); + free(fname); + exit(2); + } + *tmp = bkp; +#else + // FIXME: show this warning only if actually trying to create a directory. + fprintf(stderr, "blogc: warning: can't create output directories " + "for your platform. please create the directories yourself.\n"); + break; +#endif + } + free(fname); +} + + int main(int argc, char **argv) { @@ -221,18 +252,7 @@ main(int argc, char **argv) FILE *fp = stdout; if (!write_to_stdout) { - -#ifdef HAVE_LIBGEN_H - char *_output = sb_strdup(output); - sb_mkdir_recursive(dirname(_output), &err); - free(_output); - if (err != NULL) { - blogc_error_print(err); - rv = 2; - goto cleanup4; - } -#endif - + blogc_mkdir_recursive(output); fp = fopen(output, "w"); if (fp == NULL) { fprintf(stderr, "blogc: error: failed to open output file (%s): %s\n", -- cgit v1.2.3-18-g5258