Kaynağa Gözat

Fix file operations

- Files not closed in read_file() and write_file()
 - New error messaging
 - Path stripping performed backwards
master
Nathaniel Walizer 11 ay önce
ebeveyn
işleme
967850c681
1 değiştirilmiş dosya ile 25 ekleme ve 7 silme
  1. +25
    -7
      src/file.c

+ 25
- 7
src/file.c Dosyayı Görüntüle

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


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




const char* basename(const char* filename) { 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, 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; int status = -1;


FILE* file = fopen(filename, "wb"); 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; return status;
@@ -61,8 +72,15 @@ int read_file(const char* filename, void* data, int len) {
int status = -1; int status = -1;


FILE* file = fopen(filename, "rb"); 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; return status;


Yükleniyor…
İptal
Kaydet