aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file.c26
-rw-r--r--src/main.c52
2 files changed, 17 insertions, 61 deletions
diff --git a/src/file.c b/src/file.c
index 972f433..a12fbc2 100644
--- a/src/file.c
+++ b/src/file.c
@@ -10,10 +10,8 @@
#include <config.h>
#endif /* HAVE_CONFIG_H */
-#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
-#include <string.h>
#include <squareball.h>
#include "file.h"
#include "error.h"
@@ -25,29 +23,7 @@
char*
blogc_file_get_contents(const char *path, size_t *len, sb_error_t **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);
+ return sb_file_get_contents(path, len, err);
}
diff --git a/src/main.c b/src/main.c
index 709b37e..1f5c76c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -18,6 +18,10 @@
#include <sys/types.h>
#endif /* HAVE_SYS_TYPES_H */
+#ifdef HAVE_LIBGEN_H
+#include <libgen.h>
+#endif /* HAVE_LIBGEN_H */
+
#include <errno.h>
#include <locale.h>
#include <stdbool.h>
@@ -68,41 +72,6 @@ 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)
{
@@ -252,7 +221,18 @@ main(int argc, char **argv)
FILE *fp = stdout;
if (!write_to_stdout) {
- blogc_mkdir_recursive(output);
+
+#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
+
fp = fopen(output, "w");
if (fp == NULL) {
fprintf(stderr, "blogc: error: failed to open output file (%s): %s\n",