LONGBOW_TEST_CASE(Object, parcRandomAccessFile_Seek) { char *fname = "tmpfile"; PARCFile *file = parcFile_Create(fname); parcFile_CreateNewFile(file); FILE *fp = fopen(fname, "w"); fseek(fp, 0, SEEK_SET); uint8_t data[128]; for (int i = 0; i < 128; i++) { data[i] = i; } fwrite(data, 1, 128, fp); fclose(fp); PARCRandomAccessFile *instance = parcRandomAccessFile_Open(file); PARCBuffer *buffer = parcBuffer_Allocate(128); parcRandomAccessFile_Seek(instance, 64, PARCRandomAccessFilePosition_Start); size_t numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 64, "Expected 64 bytes to be read, but got %zu", numBytes); parcRandomAccessFile_Seek(instance, 0, PARCRandomAccessFilePosition_End); parcBuffer_Flip(buffer); numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 0, "Expected 0 bytes to be read, but got %zu", numBytes); parcRandomAccessFile_Seek(instance, 0, PARCRandomAccessFilePosition_Start); parcBuffer_Flip(buffer); numBytes = parcRandomAccessFile_Read(instance, buffer); assertTrue(numBytes == 128, "Expected 128 bytes to be read, but got %zu", numBytes); parcBuffer_Release(&buffer); parcRandomAccessFile_Close(instance); parcRandomAccessFile_Release(&instance); parcFile_Release(&file); }
/** * Write the input buffer to the specified file. * * @param [in] outFile Name of the file to which the buffer will be written. * @param [in] data A `PARCBuffer` instance which stores the data to be written. */ static void _ccnxFileRepoClient_AppendBufferToFile(char *outFile, PARCBuffer *data, size_t offset) { PARCFile *out = parcFile_Create(outFile); parcFile_CreateNewFile(out); PARCRandomAccessFile *fout = parcRandomAccessFile_Open(out); parcRandomAccessFile_Seek(fout, offset, PARCRandomAccessFilePosition_Start); parcRandomAccessFile_Write(fout, data); parcRandomAccessFile_Close(fout); parcRandomAccessFile_Release(&fout); parcFile_Release(&out); }
static void * _parcChunker_NextFromBuffer(PARCFileChunker *chunker, _ChunkerState *state) { size_t chunkSize = state->nextChunkSize; parcRandomAccessFile_Seek(chunker->fhandle, state->position, PARCRandomAccessFilePosition_Start); PARCBuffer *slice = parcBuffer_Allocate(chunkSize); parcRandomAccessFile_Read(chunker->fhandle, slice); slice = parcBuffer_Flip(slice); _advanceState(chunker, state); return slice; }