summaryrefslogtreecommitdiffstats
path: root/squarkdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'squarkdb.c')
-rw-r--r--squarkdb.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/squarkdb.c b/squarkdb.c
index e05f514..f289b28 100644
--- a/squarkdb.c
+++ b/squarkdb.c
@@ -138,3 +138,19 @@ void *sqdb_section_get(struct sqdb *db, int id, uint32_t *size)
return db->mmap_base + hdr->section[id].offset;
}
+blob_t sqdb_get_string_literal(struct sqdb *db, uint32_t encoded_ptr)
+{
+ unsigned char *ptr;
+ unsigned int len, off;
+
+ ptr = sqdb_section_get(db, SQDB_SECTION_STRINGS, NULL);
+ if (ptr == NULL)
+ return BLOB_NULL;
+
+ off = encoded_ptr >> SQDB_LENGTH_BITS;
+ len = encoded_ptr & ((1 << SQDB_LENGTH_BITS) - 1);
+ if (len == 0)
+ len = ptr[off++];
+
+ return BLOB_PTR_LEN(ptr + off, len);
+}