summaryrefslogtreecommitdiff
path: root/src/modules/common/entriesblk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/common/entriesblk.cpp')
-rw-r--r--src/modules/common/entriesblk.cpp169
1 files changed, 0 insertions, 169 deletions
diff --git a/src/modules/common/entriesblk.cpp b/src/modules/common/entriesblk.cpp
deleted file mode 100644
index f4fbdeb..0000000
--- a/src/modules/common/entriesblk.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-#include <entriesblk.h>
-#include <stdlib.h>
-#include <string.h>
-
-SWORD_NAMESPACE_START
-
-const int EntriesBlock::METAHEADERSIZE = 4;
- // count(4);
-const int EntriesBlock::METAENTRYSIZE = 8;
- // offset(4); size(4);
-
-EntriesBlock::EntriesBlock(const char *iBlock, unsigned long size) {
- block = (char *)calloc(1, size);
- memcpy(block, iBlock, size);
-}
-
-
-EntriesBlock::EntriesBlock() {
- block = (char *)calloc(1, sizeof(__u32));
-}
-
-
-EntriesBlock::~EntriesBlock() {
- free(block);
-}
-
-
-void EntriesBlock::setCount(int count) {
- __u32 rawCount = archtosword32(count);
- memcpy(block, &rawCount, sizeof(__u32));
-}
-
-
-int EntriesBlock::getCount() {
- __u32 count = 0;
- memcpy(&count, block, sizeof(__u32));
- count = swordtoarch32(count);
- return count;
-}
-
-
-void EntriesBlock::getMetaEntry(int index, unsigned long *offset, unsigned long *size) {
- __u32 rawOffset = 0;
- __u32 rawSize = 0;
- *offset = 0;
- *size = 0;
- if (index >= getCount()) // assert index < count
- return;
-
- // first 4 bytes is count, each 6 bytes after is each meta entry
- memcpy(&rawOffset, block + METAHEADERSIZE + (index * METAENTRYSIZE), sizeof(rawOffset));
- memcpy(&rawSize, block + METAHEADERSIZE + (index * METAENTRYSIZE) + sizeof(rawOffset), sizeof(rawSize));
-
- *offset = (unsigned long)swordtoarch32(rawOffset);
- *size = (unsigned long)swordtoarch32(rawSize);
-}
-
-
-void EntriesBlock::setMetaEntry(int index, unsigned long offset, unsigned long size) {
- __u32 rawOffset = archtosword32(offset);
- __u32 rawSize = archtosword32(size);
-
- if (index >= getCount()) // assert index < count
- return;
-
- // first 4 bytes is count, each 6 bytes after is each meta entry
- memcpy(block + METAHEADERSIZE + (index * METAENTRYSIZE), &rawOffset, sizeof(rawOffset));
- memcpy(block + METAHEADERSIZE + (index * METAENTRYSIZE) + sizeof(rawOffset), &rawSize, sizeof(rawSize));
-}
-
-
-const char *EntriesBlock::getRawData(unsigned long *retSize) {
- unsigned long max = 4;
- int loop;
- unsigned long offset;
- unsigned long size;
- for (loop = 0; loop < getCount(); loop++) {
- getMetaEntry(loop, &offset, &size);
- max = ((offset + size) > max) ? (offset + size) : max;
- }
- *retSize = max;
- return block;
-}
-
-
-int EntriesBlock::addEntry(const char *entry) {
- unsigned long dataSize;
- getRawData(&dataSize);
- unsigned long len = strlen(entry);
- unsigned long offset;
- unsigned long size;
- int count = getCount();
- unsigned long dataStart = METAHEADERSIZE + (count * METAENTRYSIZE);
- // new meta entry + new data size + 1 because null
- block = (char *)realloc(block, dataSize + METAENTRYSIZE + len + 1);
- // shift right to make room for new meta entry
- memmove(block + dataStart + METAENTRYSIZE, block + dataStart, dataSize - dataStart);
-
- for (int loop = 0; loop < count; loop++) {
- getMetaEntry(loop, &offset, &size);
- if (offset) { // if not a deleted entry
- offset += METAENTRYSIZE;
- setMetaEntry(loop, offset, size);
- }
- }
-
- offset = dataSize; // original dataSize before realloc
- size = len + 1;
- // add our text to the end
- memcpy(block + offset + METAENTRYSIZE, entry, size);
- // increment count
- setCount(count + 1);
- // add our meta entry
- setMetaEntry(count, offset + METAENTRYSIZE, size);
- // return index of our new entry
- return count;
-}
-
-
-const char *EntriesBlock::getEntry(int entryIndex) {
- unsigned long offset;
- unsigned long size;
- static char *empty = "";
-
- getMetaEntry(entryIndex, &offset, &size);
- return (offset) ? block+offset : empty;
-}
-
-
-unsigned long EntriesBlock::getEntrySize(int entryIndex) {
- unsigned long offset;
- unsigned long size;
-
- getMetaEntry(entryIndex, &offset, &size);
- return (offset) ? size : 0;
-}
-
-
-void EntriesBlock::removeEntry(int entryIndex) {
- unsigned long offset;
- unsigned long size, size2;
- unsigned long dataSize;
- getRawData(&dataSize);
- getMetaEntry(entryIndex, &offset, &size);
- unsigned long len = size - 1;
- int count = getCount();
- unsigned long dataStart = METAHEADERSIZE + (count * METAENTRYSIZE);
-
- if (!offset) // already deleted
- return;
-
- // shift left to retrieve space used for old entry
- memmove(block + offset, block + offset + size, dataSize - (offset + size));
-
- // fix offset for all entries after our entry that were shifted left
- for (int loop = entryIndex + 1; loop < count; loop++) {
- getMetaEntry(loop, &offset, &size2);
- if (offset) { // if not a deleted entry
- offset -= size;
- setMetaEntry(loop, offset, size2);
- }
- }
-
- // zero out our meta entry
- setMetaEntry(entryIndex, 0L, 0);
-}
-
-
-SWORD_NAMESPACE_END