чување 696731a7e646deb87794475c12f1486ab381cd2f
родитељ 15960c581e1f94845ee6300570efcfcee78d01b2
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Sat, 4 May 2024 18:14:21 +0200
slweb.c: read_file_into_buffer: Print error if directory given as
argument; main: Exit if read_file_into_buffer failed
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | slweb.c | | | 33 | ++++++++++++++++++++++----------- |
измењених датотека: 1, додавања: 22(+), брисања: 11(-)
diff --git a/slweb.c b/slweb.c
@@ -516,11 +516,19 @@ read_file_into_buffer(FILE** input, u8** buffer, size_t* buffer_size,
*input = fopen(input_filename, "r");
if (!*input)
+ {
+ perror("fopen");
return error(ENOENT,
- (u8*)"read_file_into_buffer: No such file: %s",
+ (u8*)"read_file_into_buffer: fopen failed: %s",
input_filename);
+ }
fstat(fileno(*input), &fs);
+ if (S_ISDIR(fs.st_mode))
+ return error(EISDIR,
+ (u8*)"read_file_into_buffer: Is a directory: %s",
+ input_filename);
+
free(*buffer);
*buffer_size = fs.st_size + 1;
CALLOC(*buffer, u8, *buffer_size);
@@ -5624,9 +5632,13 @@ int
main(const int argc, const char** argv)
{
const char* arg;
- Command cmd = CMD_NONE;
- int body_only = 0;
- int result = 0;
+ Command cmd = CMD_NONE;
+ int body_only = 0;
+ int result = 0;
+ FILE* input = NULL;
+ FILE* output = stdout;
+ u8* buffer = NULL;
+ size_t buffer_size = 0;
basedir_size = 2;
CALLOC(basedir, char, basedir_size);
@@ -5742,14 +5754,13 @@ main(const int argc, const char** argv)
else if (cmd == CMD_VERSION)
return version(0);
- FILE* input = NULL;
- FILE* output = stdout;
- u8* buffer = NULL;
- size_t buffer_size = 0;
-
if (input_filename)
- read_file_into_buffer(&input, &buffer, &buffer_size,
- input_filename, &input_dirname);
+ {
+ int result = read_file_into_buffer(&input, &buffer,
+ &buffer_size, input_filename, &input_dirname);
+ if (result)
+ exit(result);
+ }
else
{
u8* bufline = NULL;