void deleteByOffset(DeletionHandler *dh, long offset) { long head = readLong(dh->bfr, 0L); // read head seekBinaryFile(dh->bfr->bf, offset); // point to offset int size = readInt(dh->bfr, getStreamOffset(dh->bfr->bf)); size *= -1; // delete seekBinaryFile(dh->bfw->bf, offset); writeInt(dh->bfw, size, getStreamOffset(dh->bfw->bf)); // write deleted seekBinaryFile(dh->bfw->bf, (offset + sizeof(int))); writeLong(dh->bfw, head, getStreamOffset(dh->bfw->bf)); // write head writeLong(dh->bfw, offset, 0L); // updated head with new offset }
void selectTables(TableManager *tm) { BinaryFile *bf = newBinaryFile(tm->fileName); if(getBinaryFileSize(bf) > 0) { BinaryFileReader *bfr = newBinaryFileReader(bf, DELIMITER); seekBinaryFile(bf, 0L); long offset = getStreamOffset(bf); while(offset < getBinaryFileSize(bf)) { char *fileName = readString(bfr, offset); setArrayListObject(tm->names, fileName, tm->names->length); offset += (sizeof(char)*(strlen(fileName) + 1)); } deleteBinaryFileReader(bfr); } deleteBinaryFile(bf); }
off_t MDATAtom::getEOF() { return getStreamOffset() + getAtomSize(); }