Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
util.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 * All rights reserved.
4 *
5 * This source code is licensed under both the BSD-style license (found in the
6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7 * in the COPYING file in the root directory of this source tree).
8 * You may select, at your option, one of the above-listed licenses.
9 */
10
11#ifndef UTIL_H_MODULE
12#define UTIL_H_MODULE
13
14#if defined (__cplusplus)
15extern "C" {
16#endif
17
18
19/*-****************************************
20* Dependencies
21******************************************/
22#include "platform.h" /* PLATFORM_POSIX_VERSION, ZSTD_NANOSLEEP_SUPPORT, ZSTD_SETPRIORITY_SUPPORT */
23#include <stddef.h> /* size_t, ptrdiff_t */
24#include <sys/types.h> /* stat, utime */
25#include <sys/stat.h> /* stat, chmod */
26#include "../lib/common/mem.h" /* U64 */
27
28
29/*-************************************************************
30* Avoid fseek()'s 2GiB barrier with MSVC, macOS, *BSD, MinGW
31***************************************************************/
32#if defined(_MSC_VER) && (_MSC_VER >= 1400)
33# define UTIL_fseek _fseeki64
34#elif !defined(__64BIT__) && (PLATFORM_POSIX_VERSION >= 200112L) /* No point defining Large file for 64 bit */
35# define UTIL_fseek fseeko
36#elif defined(__MINGW32__) && defined(__MSVCRT__) && !defined(__STRICT_ANSI__) && !defined(__NO_MINGW_LFS)
37# define UTIL_fseek fseeko64
38#else
39# define UTIL_fseek fseek
40#endif
41
42
43/*-*************************************************
44* Sleep & priority functions: Windows - Posix - others
45***************************************************/
46#if defined(_WIN32)
47# include <windows.h>
48# define SET_REALTIME_PRIORITY SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
49# define UTIL_sleep(s) Sleep(1000*s)
50# define UTIL_sleepMilli(milli) Sleep(milli)
51
52#elif PLATFORM_POSIX_VERSION > 0 /* Unix-like operating system */
53# include <unistd.h> /* sleep */
54# define UTIL_sleep(s) sleep(s)
55# if ZSTD_NANOSLEEP_SUPPORT /* necessarily defined in platform.h */
56# define UTIL_sleepMilli(milli) { struct timespec t; t.tv_sec=0; t.tv_nsec=milli*1000000ULL; nanosleep(&t, NULL); }
57# else
58# define UTIL_sleepMilli(milli) /* disabled */
59# endif
60# if ZSTD_SETPRIORITY_SUPPORT
61# include <sys/resource.h> /* setpriority */
62# define SET_REALTIME_PRIORITY setpriority(PRIO_PROCESS, 0, -20)
63# else
64# define SET_REALTIME_PRIORITY /* disabled */
65# endif
66
67#else /* unknown non-unix operating system */
68# define UTIL_sleep(s) /* disabled */
69# define UTIL_sleepMilli(milli) /* disabled */
70# define SET_REALTIME_PRIORITY /* disabled */
71#endif
72
73
74/*-****************************************
75* Compiler specifics
76******************************************/
77#if defined(__INTEL_COMPILER)
78# pragma warning(disable : 177) /* disable: message #177: function was declared but never referenced, useful with UTIL_STATIC */
79#endif
80#if defined(__GNUC__)
81# define UTIL_STATIC static __attribute__((unused))
82#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
83# define UTIL_STATIC static inline
84#elif defined(_MSC_VER)
85# define UTIL_STATIC static __inline
86#else
87# define UTIL_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
88#endif
89
90
91/*-****************************************
92* Console log
93******************************************/
94extern int g_utilDisplayLevel;
95
101int UTIL_requireUserConfirmation(const char* prompt, const char* abortMsg, const char* acceptableLetters, int hasStdinInput);
102
103
104/*-****************************************
105* File functions
106******************************************/
107#if defined(_MSC_VER)
108 typedef struct __stat64 stat_t;
109 typedef int mode_t;
110#elif defined(__MINGW32__) && defined (__MSVCRT__)
111 typedef struct _stati64 stat_t;
112#else
113 typedef struct stat stat_t;
114#endif
115
116#if defined(_MSC_VER) || defined(__MINGW32__) || defined (__MSVCRT__) /* windows support */
117#define PATH_SEP '\\'
118#define STRDUP(s) _strdup(s)
119#else
120#define PATH_SEP '/'
121#include <libgen.h>
122#define STRDUP(s) strdup(s)
123#endif
124
125
134int UTIL_stat(const char* filename, stat_t* statbuf);
135int UTIL_fstat(const int fd, const char* filename, stat_t* statbuf);
136
146int UTIL_setFileStat(const char* filename, const stat_t* statbuf);
147int UTIL_setFDStat(const int fd, const char* filename, const stat_t* statbuf);
148
155int UTIL_utime(const char* filename, const stat_t *statbuf);
156
157/*
158 * These helpers operate on a pre-populated stat_t, i.e., the result of
159 * calling one of the above functions.
160 */
161
162int UTIL_isRegularFileStat(const stat_t* statbuf);
163int UTIL_isDirectoryStat(const stat_t* statbuf);
164int UTIL_isFIFOStat(const stat_t* statbuf);
165int UTIL_isBlockDevStat(const stat_t* statbuf);
166U64 UTIL_getFileSizeStat(const stat_t* statbuf);
167
175int UTIL_chmod(char const* filename, const stat_t* statbuf, mode_t permissions);
176int UTIL_fchmod(const int fd, char const* filename, const stat_t* statbuf, mode_t permissions);
177
178/*
179 * In the absence of a pre-existing stat result on the file in question, these
180 * functions will do a stat() call internally and then use that result to
181 * compute the needed information.
182 */
183
184int UTIL_isRegularFile(const char* infilename);
185int UTIL_isDirectory(const char* infilename);
186int UTIL_isSameFile(const char* file1, const char* file2);
187int UTIL_isSameFileStat(const char* file1, const char* file2, const stat_t* file1Stat, const stat_t* file2Stat);
188int UTIL_isCompressedFile(const char* infilename, const char *extensionList[]);
189int UTIL_isLink(const char* infilename);
190int UTIL_isFIFO(const char* infilename);
191
197int UTIL_isConsole(FILE* file);
198
202void UTIL_fakeStdinIsConsole(void);
203void UTIL_fakeStdoutIsConsole(void);
204void UTIL_fakeStderrIsConsole(void);
205
209void UTIL_traceFileStat(void);
210
211#define UTIL_FILESIZE_UNKNOWN ((U64)(-1))
212U64 UTIL_getFileSize(const char* infilename);
213U64 UTIL_getTotalFileSize(const char* const * fileNamesTable, unsigned nbFiles);
214
224typedef struct {
225 double value;
226 int precision;
227 const char* suffix;
229
231
232int UTIL_compareStr(const void *p1, const void *p2);
233const char* UTIL_getFileExtension(const char* infilename);
234void UTIL_mirrorSourceFilesDirectories(const char** fileNamesTable, unsigned int nbFiles, const char *outDirName);
235char* UTIL_createMirroredDestDirName(const char* srcFileName, const char* outDirRootName);
236
237
238
239/*-****************************************
240 * Lists of Filenames
241 ******************************************/
242
243typedef struct
244{ const char** fileNames;
245 char* buf; /* fileNames are stored in this buffer (or are read-only) */
246 size_t tableSize; /* nb of fileNames */
247 size_t tableCapacity;
249
256UTIL_createFileNamesTable_fromFileName(const char* inputFileName);
257
266UTIL_assembleFileNamesTable(const char** filenames, size_t tableSize, char* buf);
267
272
279
280
286void UTIL_expandFNT(FileNamesTable** fnt, int followLinks);
287
295UTIL_createFNT_fromROTable(const char** filenames, size_t nbFilenames);
296
303
309
316void UTIL_refFilename(FileNamesTable* fnt, const char* filename);
317
318
319/* UTIL_createExpandedFNT() is only active if UTIL_HAS_CREATEFILELIST is defined.
320 * Otherwise, UTIL_createExpandedFNT() is a shell function which does nothing
321 * apart from displaying a warning message.
322 */
323#ifdef _WIN32
324# define UTIL_HAS_CREATEFILELIST
325#elif defined(__linux__) || (PLATFORM_POSIX_VERSION >= 200112L) /* opendir, readdir require POSIX.1-2001 */
326# define UTIL_HAS_CREATEFILELIST
327# define UTIL_HAS_MIRRORFILELIST
328#else
329 /* do not define UTIL_HAS_CREATEFILELIST */
330#endif
331
339UTIL_createExpandedFNT(const char* const* filenames, size_t nbFilenames, int followLinks);
340
341#if defined(_WIN32) || defined(WIN32)
342DWORD CountSetBits(ULONG_PTR bitMask);
343#endif
344
345/*-****************************************
346 * System
347 ******************************************/
348
349int UTIL_countCores(int logical);
350
352
353int UTIL_countLogicalCores(void);
354
355#if defined (__cplusplus)
356}
357#endif
358
359#endif /* UTIL_H_MODULE */
UINT32 DWORD
Definition 7zTypes.h:194
static const void size_t const UInt64 * table
Definition XzCrc64.c:50
unsigned long long U64
Definition lz4.c:318
char buf[N_BUF]
Definition spewG.c:36
Definition util.h:211
Definition util.h:191
void UTIL_mirrorSourceFilesDirectories(const char **fileNamesTable, unsigned int nbFiles, const char *outDirName)
Definition util.c:1021
FileNamesTable * UTIL_createFNT_fromROTable(const char **filenames, size_t nbFilenames)
Definition util.c:1101
FileNamesTable * UTIL_createExpandedFNT(const char *const *filenames, size_t nbFilenames, int followLinks)
Definition util.c:1047
char * UTIL_createMirroredDestDirName(const char *srcFileName, const char *outDirRootName)
Definition util.c:900
int UTIL_isRegularFileStat(const stat_t *statbuf)
Definition util.c:141
int UTIL_compareStr(const void *p1, const void *p2)
Definition util.c:221
int UTIL_isBlockDevStat(const stat_t *statbuf)
Definition util.c:269
void UTIL_refFilename(FileNamesTable *fnt, const char *filename)
Definition util.c:512
int UTIL_isCompressedFile(const char *infilename, const char *extensionList[])
Definition util.c:720
UTIL_HumanReadableSize_t UTIL_makeHumanReadableSize(U64 size)
Definition util.c:311
int UTIL_isDirectoryStat(const stat_t *statbuf)
Definition util.c:212
int UTIL_isLink(const char *infilename)
Definition util.c:279
void UTIL_freeFileNamesTable(FileNamesTable *table)
Definition util.c:494
int UTIL_countLogicalCores(void)
Definition util.c:1392
FileNamesTable * UTIL_createFileNamesTable_fromFileName(const char *inputFileName)
Definition util.c:433
int UTIL_isFIFOStat(const stat_t *statbuf)
Definition util.c:258
int UTIL_isRegularFile(const char *infilename)
Definition util.c:135
FileNamesTable * UTIL_mergeFileNamesTable(FileNamesTable *table1, FileNamesTable *table2)
Definition util.c:529
FileNamesTable * UTIL_assembleFileNamesTable(const char **filenames, size_t tableSize, char *buf)
Definition util.c:489
int UTIL_chmod(char const *filename, const stat_t *statbuf, mode_t permissions)
Definition util.c:151
int UTIL_isFIFO(const char *infilename)
Definition util.c:246
int UTIL_isSameFile(const char *file1, const char *file2)
Definition util.c:225
FileNamesTable * UTIL_allocateFileNamesTable(size_t tableSize)
Definition util.c:502
int UTIL_utime(const char *filename, const stat_t *statbuf)
Definition util.c:163
int g_utilDisplayLevel
Definition util.c:88
int UTIL_requireUserConfirmation(const char *prompt, const char *abortMsg, const char *acceptableLetters, int hasStdinInput)
Definition util.c:90
int UTIL_countPhysicalCores(void)
Definition util.c:1387
void UTIL_expandFNT(FileNamesTable **fnt, int followLinks)
Definition util.c:1093
const char * UTIL_getFileExtension(const char *infilename)
Definition util.c:734
U64 UTIL_getFileSizeStat(const stat_t *statbuf)
Definition util.c:298
int UTIL_searchFileNamesTable(FileNamesTable *table, char const *name)
Definition util.c:737
void UTIL_fakeStdoutIsConsole(void)
Definition util.c:494
void UTIL_fakeStdinIsConsole(void)
Definition util.c:490
void UTIL_fakeStderrIsConsole(void)
Definition util.c:498
int UTIL_isSameFileStat(const char *file1, const char *file2, const stat_t *file1Stat, const stat_t *file2Stat)
Definition util.c:385
int UTIL_setFDStat(const int fd, const char *filename, const stat_t *statbuf)
Definition util.c:287
int UTIL_fchmod(const int fd, char const *filename, const stat_t *statbuf, mode_t permissions)
Definition util.c:218
int UTIL_isConsole(FILE *file)
Definition util.c:474
void UTIL_traceFileStat(void)
Definition util.c:156
size_t size
Definition platform.h:559
#define UTIL_fstat
Definition util.h:145
UTIL_STATIC int UTIL_isDirectory(const char *infilename)
Definition util.h:303
UTIL_STATIC U64 UTIL_getTotalFileSize(const char **fileNamesTable, unsigned nbFiles)
Definition util.h:347
UTIL_STATIC int UTIL_setFileStat(const char *filename, stat_t *statbuf)
Definition util.h:228
int UTIL_countCores(void)
Definition util.c:155
#define UTIL_stat
Definition util.h:144
UTIL_STATIC U64 UTIL_getFileSize(const char *infilename)
Definition util.h:336
struct stat stat_t
Definition util.h:220
char name[NAME_LEN_MAX+1]
Name of the filter.
Definition string_conversion.c:450