Просмотр исходного кода

Fix file operations

- Files not closed in read_file() and write_file()
 - New error messaging
 - Path stripping performed backwards
master
Nathaniel Walizer 11 месяцев назад
Родитель
Сommit
967850c681
1 измененных файлов: 25 добавлений и 7 удалений
  1. +25
    -7
      src/file.c

+ 25
- 7
src/file.c Просмотреть файл

@@ -1,3 +1,4 @@
#include <errno.h>
#include <stdio.h>
#include <string.h>

@@ -5,9 +6,12 @@


const char* basename(const char* filename) {
const char* slash = filename;
for ( ; *slash && *slash != '\\' && *slash != '/'; ++slash);
return (*slash ? (&slash[1]) : filename);
const char* slash = filename + strlen(filename) - 1;
for ( ; slash >= filename &&
*slash != '\\' &&
*slash != '/';
--slash );
return &slash[1];
}

int replace_extension(char* filename, int max_len,
@@ -49,8 +53,15 @@ int write_file(const char* filename, const void* data, int len) {
int status = -1;

FILE* file = fopen(filename, "wb");
if (NULL != file && 1 == fwrite(data, len, 1, file)) {
status = 0;
if (NULL != file) {
if (1 == fwrite(data, len, 1, file)) {
status = 0;
} else {
fprintf(stderr, "Failed to write %d bytes from %s: %d\n", len, filename, errno);
}
fclose(file);
} else {
fprintf(stderr, "Failed to open %s: %d\n", filename, errno);
}

return status;
@@ -61,8 +72,15 @@ int read_file(const char* filename, void* data, int len) {
int status = -1;

FILE* file = fopen(filename, "rb");
if (NULL != file && 1 == fread(data, len, 1, file)) {
status = 0;
if (NULL != file) {
if (1 == fread(data, len, 1, file)) {
status = 0;
} else {
fprintf(stderr, "Failed to read %d bytes from %s: %d\n", len, filename, errno);
}
fclose(file);
} else {
fprintf(stderr, "Failed to open %s: %d\n", filename, errno);
}

return status;


Загрузка…
Отмена
Сохранить