libclod
C library for interacting with NBTs, region files, LOD data and other things.
Loading...
Searching...
No Matches
region_file.c
1#include "region_impl.h"
2#include "region_file.h"
3#include "filename.h"
4#include "error.h"
5#include <stdlib.h>
6
7enum clod_region_result region_file_open(const struct clod_region *r, struct region_file **rf_ptr, const int64_t *pos, const bool create) {
8 char filename[REGION_FILENAME_MAX + 1];
9 filename_make(filename, r->opts.prefix, r->opts.region_ext, pos, r->opts.dims);
10
11 file f;
12 auto const res = file_open(&f, r->d, filename, create, &r->opts);
13 if (res != CLOD_REGION_OK) {
14 return res;
15 }
16
17 struct region_file *rf = malloc(sizeof(*rf));
18 if (!rf) {
19 region_error(CLOD_REGION_INVALID_USAGE, "Failed to allocate memory for region file.");
20 file_close(f);
22 }
23
24 rwmutex_init(&rf->mtx);
25 rf->f = f;
26 *rf_ptr = rf;
27
28 return CLOD_REGION_OK;
29}
30
31enum clod_region_result region_file_close(struct region_file *f) {
32 rwmutex_destroy(&f->mtx);
33 auto const res = file_close(f->f);
34 free(f);
35 return res;
36}
clod_region_result
Definition region.h:33
@ CLOD_REGION_INVALID_USAGE
Definition region.h:39
@ CLOD_REGION_OK
Definition region.h:35
uint8_t dims
Definition region.h:160
char region_ext[10+1]
Definition region.h:190
char prefix[30+1]
Definition region.h:186
Definition file.c:13