|
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
-
- #include "file.h"
-
-
- const char* basename(const char* 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,
- const char* orig_name, const char* ext) {
- int status = 0;
- int remain = max_len;
-
- const char* orig_base = basename(orig_name);
- const char* orig_dot = strrchr(orig_base, '.');
-
- int orig_base_len = (NULL == orig_dot) ?
- strlen(orig_name) :
- (orig_dot - orig_name);
-
- if (orig_base_len <= remain) {
- strncpy(filename, orig_name, orig_base_len);
- remain -= orig_base_len;
- filename += orig_base_len;
- } else {
- status = -1;
- }
-
- if (0 == status && NULL != ext) {
- int ext_len = strlen(ext);
- if ((ext_len + 1) <= remain) {
- *filename++ = '.';
- strncpy(filename, ext, ext_len);
- remain -= (ext_len + 1);
- } else {
- status = -1;
- }
- }
-
- return (status < 0 ? status : (max_len - remain));
- }
-
-
- int write_file(const char* filename, const void* data, int len) {
- int status = -1;
-
- FILE* file = fopen(filename, "wb");
- 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;
- }
-
-
- int read_file(const char* filename, void* data, int len) {
- int status = -1;
-
- FILE* file = fopen(filename, "rb");
- 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;
- }
|