refactoring (simplification) of util.h public API

This commit is contained in:
Yann Collet 2019-11-05 14:59:45 -08:00
parent 81c51483e9
commit 76b9e42b0b
2 changed files with 58 additions and 38 deletions

View File

@ -24,6 +24,11 @@ extern "C" {
#include <direct.h> /* needed for _mkdir in windows */ #include <direct.h> /* needed for _mkdir in windows */
#endif #endif
#if defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */
# include <dirent.h> /* opendir, readdir */
# include <string.h> /* strerror, memcpy */
#endif /* #ifdef _WIN32 */
/*-**************************************** /*-****************************************
* Internal Macros * Internal Macros
@ -40,6 +45,19 @@ extern "C" {
} } } }
/*
* A modified version of realloc().
* If UTIL_realloc() fails the original block is freed.
*/
UTIL_STATIC void* UTIL_realloc(void *ptr, size_t size)
{
void *newptr = realloc(ptr, size);
if (newptr) return newptr;
free(ptr);
return NULL;
}
/*-**************************************** /*-****************************************
* Console log * Console log
******************************************/ ******************************************/
@ -385,9 +403,9 @@ UTIL_concatenateTwoTables(FileNamesTable* table1, FileNamesTable* table2)
} }
#ifdef _WIN32 #ifdef _WIN32
int UTIL_prepareFileList(const char* dirName, static int UTIL_prepareFileList(const char* dirName,
char** bufStart, size_t* pos, char** bufStart, size_t* pos,
char** bufEnd, int followLinks) char** bufEnd, int followLinks)
{ {
char* path; char* path;
size_t dirLength, pathLength; size_t dirLength, pathLength;
@ -450,9 +468,9 @@ int UTIL_prepareFileList(const char* dirName,
#elif defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */ #elif defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */
int UTIL_prepareFileList(const char *dirName, static int UTIL_prepareFileList(const char *dirName,
char** bufStart, size_t* pos, char** bufStart, size_t* pos,
char** bufEnd, int followLinks) char** bufEnd, int followLinks)
{ {
DIR* dir; DIR* dir;
struct dirent * entry; struct dirent * entry;
@ -518,7 +536,9 @@ int UTIL_prepareFileList(const char *dirName,
#else #else
int UTIL_prepareFileList(const char *dirName, char** bufStart, size_t* pos, char** bufEnd, int followLinks) static int UTIL_prepareFileList(const char *dirName,
char** bufStart, size_t* pos,
char** bufEnd, int followLinks)
{ {
(void)bufStart; (void)bufEnd; (void)pos; (void)followLinks; (void)bufStart; (void)bufEnd; (void)pos; (void)followLinks;
UTIL_DISPLAYLEVEL(1, "Directory %s ignored (compiled without _WIN32 or _POSIX_C_SOURCE)\n", dirName); UTIL_DISPLAYLEVEL(1, "Directory %s ignored (compiled without _WIN32 or _POSIX_C_SOURCE)\n", dirName);
@ -605,6 +625,12 @@ UTIL_createFileList(const char **inputNames, unsigned inputNamesNb,
} }
void UTIL_freeFileList(const char** filenameTable, char* allocatedBuffer)
{
if (allocatedBuffer) free(allocatedBuffer);
if (filenameTable) free((void*)filenameTable);
}
/*-**************************************** /*-****************************************

View File

@ -146,7 +146,20 @@ U64 UTIL_getFileSize(const char* infilename);
U64 UTIL_getTotalFileSize(const char* const * fileNamesTable, unsigned nbFiles); U64 UTIL_getTotalFileSize(const char* const * fileNamesTable, unsigned nbFiles);
/*Note: tableSize is denotes the total capacity of table*/
/*-****************************************
* Lists of Filenames
******************************************/
#ifdef _WIN32
# define UTIL_HAS_CREATEFILELIST
#elif defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */
# define UTIL_HAS_CREATEFILELIST
#else
/* do not define UTIL_HAS_CREATEFILELIST */
#endif /* #ifdef _WIN32 */
/*Note: tableSize denotes the total capacity of table*/
typedef struct typedef struct
{ {
const char** fileNames; const char** fileNames;
@ -183,48 +196,29 @@ void UTIL_freeFileNamesTable(FileNamesTable* table);
FileNamesTable* FileNamesTable*
UTIL_concatenateTwoTables(FileNamesTable* table1, FileNamesTable* table2); UTIL_concatenateTwoTables(FileNamesTable* table1, FileNamesTable* table2);
/*
* A modified version of realloc().
* If UTIL_realloc() fails the original block is freed.
*/
UTIL_STATIC void* UTIL_realloc(void *ptr, size_t size)
{
void *newptr = realloc(ptr, size);
if (newptr) return newptr;
free(ptr);
return NULL;
}
int UTIL_prepareFileList(const char* dirName, char** bufStart, size_t* pos, char** bufEnd, int followLinks);
#ifdef _WIN32
# define UTIL_HAS_CREATEFILELIST
#elif defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */
# define UTIL_HAS_CREATEFILELIST
# include <dirent.h> /* opendir, readdir */
# include <string.h> /* strerror, memcpy */
#else
#endif /* #ifdef _WIN32 */
/* /*
* UTIL_createFileList() : * UTIL_createFileList() :
* takes a list of files and directories (params: inputNames, inputNamesNb), scans directories, * takes a list of files and directories (@inputNames, @inputNamesNb),
* and returns a new list of files (params: return value, allocatedBuffer, allocatedNamesNb). * scans directories, and returns a new list of files (@return, @allocatedBuffer, @allocatedNamesNb).
* After finishing usage of the list the structures should be freed with UTIL_freeFileList(params: return value, allocatedBuffer) * In case of error, UTIL_createFileList() returns NULL.
* In case of error UTIL_createFileList returns NULL and UTIL_freeFileList should not be called. * After list's end of life, the structures should be freed with UTIL_freeFileList (@return, @allocatedBuffer).
*/ */
const char** const char**
UTIL_createFileList(const char **inputNames, unsigned inputNamesNb, UTIL_createFileList(const char **inputNames, unsigned inputNamesNb,
char** allocatedBuffer, unsigned* allocatedNamesNb, char** allocatedBuffer, unsigned* allocatedNamesNb,
int followLinks); int followLinks);
UTIL_STATIC void UTIL_freeFileList(const char** filenameTable, char* allocatedBuffer) void UTIL_freeFileList(const char** filenameTable, char* allocatedBuffer);
{
if (allocatedBuffer) free(allocatedBuffer);
if (filenameTable) free((void*)filenameTable); /*-****************************************
} * System
******************************************/
int UTIL_countPhysicalCores(void); int UTIL_countPhysicalCores(void);
#if defined (__cplusplus) #if defined (__cplusplus)
} }
#endif #endif