aboutsummaryrefslogtreecommitdiff
path: root/file_loader.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2021-01-15 02:05:17 -0800
committerBruce Hill <bruce@bruce-hill.com>2021-01-15 02:05:17 -0800
commitb29060f38b30e6e379769582a0cf7cc3e9ae5056 (patch)
treea8ace7d44e071f4d77de9b300855f8d9687cee86 /file_loader.c
parent8ff80b09ccd7e680829d0911d965ad4b0d6f7939 (diff)
Cleaned up and simplified global state setting stuff (e.g. --verbose)
Diffstat (limited to 'file_loader.c')
-rw-r--r--file_loader.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/file_loader.c b/file_loader.c
index 48e81e4..acbf8a6 100644
--- a/file_loader.c
+++ b/file_loader.c
@@ -42,10 +42,16 @@ static void populate_lines(file_t *f)
//
// Read an entire file into memory.
//
-file_t *load_file(file_t **files, const char *filename)
+file_t *load_file(file_t **files, const char *fmt, ...)
{
- if (filename == NULL) filename = "-";
- int fd = streq(filename, "-") ? STDIN_FILENO : open(filename, O_RDONLY);
+ char filename[PATH_MAX+1] = {0};
+ va_list args;
+ va_start(args, fmt);
+ check(vsnprintf(filename, PATH_MAX, fmt, args) <= PATH_MAX,
+ "File name is too large");
+ va_end(args);
+
+ int fd = filename[0] == '\0' ? STDIN_FILENO : open(filename, O_RDONLY);
if (fd < 0) return NULL;
size_t length;
file_t *f = new(file_t);