MCPcopy Create free account
hub / github.com/F-Stack/f-stack / UTIL_mergeFileNamesTable

Function UTIL_mergeFileNamesTable

freebsd/contrib/zstd/programs/util.c:458–503  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

456}
457
458FileNamesTable*
459UTIL_mergeFileNamesTable(FileNamesTable* table1, FileNamesTable* table2)
460{
461 unsigned newTableIdx = 0;
462 size_t pos = 0;
463 size_t newTotalTableSize;
464 char* buf;
465
466 FileNamesTable* const newTable = UTIL_assembleFileNamesTable(NULL, 0, NULL);
467 CONTROL( newTable != NULL );
468
469 newTotalTableSize = getTotalTableSize(table1) + getTotalTableSize(table2);
470
471 buf = (char*) calloc(newTotalTableSize, sizeof(*buf));
472 CONTROL ( buf != NULL );
473
474 newTable->buf = buf;
475 newTable->tableSize = table1->tableSize + table2->tableSize;
476 newTable->fileNames = (const char **) calloc(newTable->tableSize, sizeof(*(newTable->fileNames)));
477 CONTROL ( newTable->fileNames != NULL );
478
479 { unsigned idx1;
480 for( idx1=0 ; (idx1 < table1->tableSize) && table1->fileNames[idx1] && (pos < newTotalTableSize); ++idx1, ++newTableIdx) {
481 size_t const curLen = strlen(table1->fileNames[idx1]);
482 memcpy(buf+pos, table1->fileNames[idx1], curLen);
483 assert(newTableIdx <= newTable->tableSize);
484 newTable->fileNames[newTableIdx] = buf+pos;
485 pos += curLen+1;
486 } }
487
488 { unsigned idx2;
489 for( idx2=0 ; (idx2 < table2->tableSize) && table2->fileNames[idx2] && (pos < newTotalTableSize) ; ++idx2, ++newTableIdx) {
490 size_t const curLen = strlen(table2->fileNames[idx2]);
491 memcpy(buf+pos, table2->fileNames[idx2], curLen);
492 assert(newTableIdx <= newTable->tableSize);
493 newTable->fileNames[newTableIdx] = buf+pos;
494 pos += curLen+1;
495 } }
496 assert(pos <= newTotalTableSize);
497 newTable->tableSize = newTableIdx;
498
499 UTIL_freeFileNamesTable(table1);
500 UTIL_freeFileNamesTable(table2);
501
502 return newTable;
503}
504
505#ifdef _WIN32
506static int UTIL_prepareFileList(const char* dirName,

Callers 1

mainFunction · 0.85

Calls 5

getTotalTableSizeFunction · 0.85
callocFunction · 0.85
UTIL_freeFileNamesTableFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected