CFLAGS = -g
LIBS =
-targets = blergtool
-blergtool_objects = blergtool.o database.o
+targets = blerg.a blergtool tag_test
+blerg_a_objects = database.o tags.o
+blergtool_objects = blergtool.o blerg.a
+
+tag_test_objects = tag_test.o tags.o
all: $(targets)
clean:
- rm -f $(targets) $(blergtool_objects)
+ rm -f $(targets) $(blerg_a_objects) $(blergtool_objects)
+
+blerg.a: $(blerg_a_objects)
+ ar rcu $@ $(blerg_a_objects)
blergtool: $(blergtool_objects)
gcc $^ -o $@
+tag_test: $(tag_test_objects)
+ gcc $^ -o $@
+
%.o: %.c
gcc $(CFLAGS) $(LIBS) -c $< -o $@
perror("Cannot allocate memory for blerg");
goto open_failed_blerg_malloc;
}
+ blerg->name = malloc(namelen + 1);
+ memcpy(blerg->name, name, namelen + 1);
blerg->meta_fd = blerg->index_fd = blerg->data_fd = -1;
blerg->meta = NULL;
blerg->index = NULL;
open_failed_meta_mmap:
close(blerg->meta_fd);
open_failed_meta_open:
+ free(blerg->name);
free(blerg);
open_failed_blerg_malloc:
return NULL;
munmap((void *)blerg->meta, sizeof(struct meta));
close(blerg->meta_fd);
free(blerg->base_path);
+ free(blerg->name);
free(blerg);
return 1;
}
flock(blerg->index_fd, LOCK_EX);
flock(blerg->data_fd, LOCK_EX);
- uint64_t rec = blerg_increment_record_count(blerg);
- if (rec == -1) {
+ uint64_t record = blerg_increment_record_count(blerg);
+ if (record == -1) {
printf("Could not find free record\n");
return -1;
}
- int segment = rec / RECORDS_PER_SEGMENT;
+ int segment = record / RECORDS_PER_SEGMENT;
if (segment != blerg->current_segment)
blerg_segment_switch(blerg, segment);
- rec = rec % RECORDS_PER_SEGMENT;
+ int seg_rec = record % RECORDS_PER_SEGMENT;
// Get the position for the new data
FILE *datafile = fdopen(dup(blerg->data_fd), "a");
}
bytes += n;
} while (bytes < len);
- blerg->index[rec].flags = 0x0001;
- blerg->index[rec].offset = curpos;
- blerg->index[rec].length = len;
+ blerg->index[seg_rec].flags = 0x0001;
+ blerg->index[seg_rec].offset = curpos;
+ blerg->index[seg_rec].length = len;
+
+ tag_scan(blerg->name, data, len, record);
flock(blerg->data_fd, LOCK_UN);
flock(blerg->index_fd, LOCK_UN);
- return segment * RECORDS_PER_SEGMENT + rec;
+ return record;
}
-int blerg_fetch(struct blerg *blerg, int rec, char **data, int *length) {
- if (rec < 0) {
+int blerg_fetch(struct blerg *blerg, int record, char **data, int *length) {
+ if (record < 0) {
printf("Invalid record\n");
return 0;
}
- int segment = rec / RECORDS_PER_SEGMENT;
+ int segment = record / RECORDS_PER_SEGMENT;
if (segment != blerg->current_segment)
blerg_segment_switch(blerg, segment);
- rec = rec % RECORDS_PER_SEGMENT;
+ int seg_rec = record % RECORDS_PER_SEGMENT;
- if ((blerg->index[rec].flags & 0x1) == 0) {
+ if ((blerg->index[seg_rec].flags & 0x1) == 0) {
printf("Invalid record\n");
return 0;
}
- int rec_offset = blerg->index[rec].offset;
- int rec_length = blerg->index[rec].length;
+ int rec_offset = blerg->index[seg_rec].offset;
+ int rec_length = blerg->index[seg_rec].length;
if (rec_offset >= blerg->data_size) {
// We're accessing an out-of-bounds record in our mmap.
// Recheck size and remap.