+
+ if (sb->list != NULL) {
+ munmap(sb->list, sb->size);
+ }
+
+ flock(sb->fd, LOCK_SH);
+ fstat(sb->fd, &st);
+ flock(sb->fd, LOCK_UN);
+ sb->size = st.st_size;
+ if (sb->size > 0) {
+ sb->list = mmap(NULL, sb->size, PROT_READ | PROT_WRITE, MAP_SHARED, sb->fd, 0);
+ if (sb->list == MAP_FAILED) {
+ perror("stringbucket mmap");
+ return 0;
+ }
+ } else {
+ /* Don't map anything for now. */
+ sb->list = NULL;
+ }
+
+ return 1;
+}
+
+struct stringbucket * stringbucket_open(const char *filename) {