sequential_file.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include "sequential_file.h"
  2. char* sequential_file_resolve_path(Storage* storage, const char* dir, const char* prefix, const char* extension) {
  3. if (storage == NULL || dir == NULL || prefix == NULL || extension == NULL) {
  4. return NULL;
  5. }
  6. char file_path[256];
  7. int file_index = 0;
  8. do {
  9. if (snprintf(file_path, sizeof(file_path), "%s/%s_%d.%s", dir, prefix, file_index, extension) < 0) {
  10. return NULL;
  11. }
  12. file_index++;
  13. } while(storage_file_exists(storage, file_path));
  14. return strdup(file_path);
  15. }
  16. bool sequential_file_open(Storage* storage, File* file, const char* dir, const char* prefix, const char* extension) {
  17. if (storage == NULL || file == NULL || dir == NULL || prefix == NULL || extension == NULL) {
  18. return false;
  19. }
  20. char* file_path = sequential_file_resolve_path(storage, dir, prefix, extension);
  21. if (file_path == NULL) {
  22. return false;
  23. }
  24. bool success = storage_file_open(file, file_path, FSAM_WRITE, FSOM_CREATE_ALWAYS);
  25. free(file_path);
  26. return success;
  27. }