add extra file functions and change sl_read_file

This commit is contained in:
sam 2024-07-22 21:53:03 +12:00
parent deb02231af
commit 28b948912e

31
slibs.h
View file

@ -198,45 +198,46 @@ void sl_append_c_str(sl_string *sl_str, const char *c_str)
sl_ptr_release(smart_ptr); \ sl_ptr_release(smart_ptr); \
}); });
void sl_read_file(const char *filename, sl_string *buffer); FILE *sl_open_file(const char *filename, const char *mode);
sl_string *sl_read_file(const char *filename);
void sl_write_file(const char *filename, const sl_string buffer); void sl_write_file(const char *filename, const sl_string buffer);
#ifdef SL_IMPLEMENTATION #ifdef SL_IMPLEMENTATION
void sl_read_file(const char *filename, sl_string *buffer) FILE *sl_open_file(const char *filename, const char *mode)
{ {
FILE *file = fopen(filename, "r"); FILE *file = fopen(filename, mode);
if (!file) if (!file)
{ {
fprintf(stderr, "Error: could not open file %s\n", filename); fprintf(stderr, "Error: could not open file %s\n", filename);
exit(1); exit(1);
} }
return file;
}
sl_string *sl_read_file(const char *filename)
{
FILE *file = sl_open_file(filename, "r");
fseek(file, 0, SEEK_END); fseek(file, 0, SEEK_END);
size_t file_size = ftell(file); size_t file_size = ftell(file);
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
sl_string *buffer = sl_new(sl_string, 0);
for (size_t i = 0; i < file_size; i++) for (size_t i = 0; i < file_size; i++)
{ {
sl_vec_push(*buffer, fgetc(file)); sl_vec_push(*buffer, fgetc(file));
} }
fclose(file); fclose(file);
return buffer;
} }
void sl_write_file(const char *filename, const sl_string buffer) void sl_write_file(const char *filename, sl_string buffer)
{ {
FILE *file = fopen(filename, "w"); FILE *file = sl_open_file(filename, "w");
if (!file)
{
fprintf(stderr, "Error: could not open file %s\n", filename);
exit(1);
}
for (sl_vec_it(c, buffer))
{
fputc(*c, file);
}
fputs(sl_c_str(buffer), file);
fclose(file); fclose(file);
} }
#endif #endif