Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 474 lines (402 sloc) 11.807 kb
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
1 #ifndef GIT_COMPAT_UTIL_H
2 #define GIT_COMPAT_UTIL_H
3
b97e911 @tali Support for large files on 32bit systems.
tali authored
4 #define _FILE_OFFSET_BITS 64
5
8f1d2e6 [PATCH] Compilation: zero-length array declaration.
Junio C Hamano authored
6 #ifndef FLEX_ARRAY
8e97399 @gitster git-compat-util.h: auto-adjust to compiler support of FLEX_ARRAY a bit b...
gitster authored
7 /*
8 * See if our compiler is known to support flexible array members.
9 */
203ee91 @drafnel git-compat-util.h: avoid using c99 flex array feature with Sun compiler ...
drafnel authored
10 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && (!defined(__SUNPRO_C) || (__SUNPRO_C > 0x580))
8e97399 @gitster git-compat-util.h: auto-adjust to compiler support of FLEX_ARRAY a bit b...
gitster authored
11 # define FLEX_ARRAY /* empty */
12 #elif defined(__GNUC__)
13 # if (__GNUC__ >= 3)
14 # define FLEX_ARRAY /* empty */
15 # else
16 # define FLEX_ARRAY 0 /* older GNU extension */
17 # endif
18 #endif
19
20 /*
21 * Otherwise, default to safer but a bit wasteful traditional style
22 */
23 #ifndef FLEX_ARRAY
24 # define FLEX_ARRAY 1
8f1d2e6 [PATCH] Compilation: zero-length array declaration.
Junio C Hamano authored
25 #endif
26 #endif
27
b4f2a6a Use #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
Junio C Hamano authored
28 #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
f630cfd @MadCoder refactor: use bitsizeof() instead of 8 * sizeof()
MadCoder authored
29 #define bitsizeof(x) (CHAR_BIT * sizeof(x))
b4f2a6a Use #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
Junio C Hamano authored
30
8723f21 make overflow test on delta base offset work regardless of variable size
Nicolas Pitre authored
31 #ifdef __GNUC__
32 #define TYPEOF(x) (__typeof__(x))
33 #else
34 #define TYPEOF(x)
35 #endif
36
f630cfd @MadCoder refactor: use bitsizeof() instead of 8 * sizeof()
MadCoder authored
37 #define MSB(x, bits) ((x) & TYPEOF(x)(~0ULL << (bitsizeof(x) - (bits))))
db7244b @MadCoder parse-options new features.
MadCoder authored
38 #define HAS_MULTI_BITS(i) ((i) & ((i) - 1)) /* checks if an integer has more than 1 bit set */
8723f21 make overflow test on delta base offset work regardless of variable size
Nicolas Pitre authored
39
98cb6f3 @MadCoder janitor: add DIV_ROUND_UP and use it.
MadCoder authored
40 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
41
cf606e3 @awhitcroft git name-rev writes beyond the end of malloc() with large generations
awhitcroft authored
42 /* Approximation of the length of the decimal representation of this type. */
43 #define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
44
4cb18a4 @drafnel git-compat-util.h: tweak the way _XOPEN_SOURCE is set on Solaris
drafnel authored
45 #if defined(__sun__)
46 /*
47 * On Solaris, when _XOPEN_EXTENDED is set, its header file
48 * forces the programs to be XPG4v2, defeating any _XOPEN_SOURCE
49 * setting to say we are XPG5 or XPG6. Also on Solaris,
50 * XPG6 programs must be compiled with a c99 compiler, while
51 * non XPG6 programs must be compiled with a pre-c99 compiler.
52 */
53 # if __STDC_VERSION__ - 0 >= 199901L
54 # define _XOPEN_SOURCE 600
55 # else
56 # define _XOPEN_SOURCE 500
57 # endif
9398b85 git-compat-util.h: adjust for SGI IRIX 6.5
Brandon Casey authored
58 #elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && !defined(_M_UNIX) && !defined(sgi)
8502357 simplify inclusion of system header files.
Junio C Hamano authored
59 #define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */
60 #define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */
c902c9a Fix system header problems on Mac OS X
Terje Sten Bjerkseth authored
61 #endif
fb95220 Set _ALL_SOURCE for AIX, but avoid its struct list.
Jason Riedy authored
62 #define _ALL_SOURCE 1
63 #define _GNU_SOURCE 1
64 #define _BSD_SOURCE 1
9a695fb @prlw1 NetBSD compilation fix
prlw1 authored
65 #define _NETBSD_SOURCE 1
9398b85 git-compat-util.h: adjust for SGI IRIX 6.5
Brandon Casey authored
66 #define _SGI_SOURCE 1
8502357 simplify inclusion of system header files.
Junio C Hamano authored
67
435bdf8 @mstormo Make usage of windows.h lean and mean
mstormo authored
68 #ifdef WIN32 /* Both MinGW and MSVC */
69 #define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h */
70 #include <winsock2.h>
71 #include <windows.h>
72 #endif
73
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
74 #include <unistd.h>
75 #include <stdio.h>
76 #include <sys/stat.h>
77 #include <fcntl.h>
78 #include <stddef.h>
79 #include <stdlib.h>
80 #include <stdarg.h>
81 #include <string.h>
82 #include <errno.h>
83 #include <limits.h>
84 #include <sys/param.h>
85 #include <sys/types.h>
86 #include <dirent.h>
8502357 simplify inclusion of system header files.
Junio C Hamano authored
87 #include <sys/time.h>
88 #include <time.h>
89 #include <signal.h>
90 #include <fnmatch.h>
f4626df Add target architecture MinGW.
Johannes Sixt authored
91 #include <assert.h>
92 #include <regex.h>
93 #include <utime.h>
94 #ifndef __MINGW32__
95 #include <sys/wait.h>
8502357 simplify inclusion of system header files.
Junio C Hamano authored
96 #include <sys/poll.h>
97 #include <sys/socket.h>
80bbe72 Move #include <sys/select.h> and <sys/ioctl.h> to git-compat-util.h.
Johannes Sixt authored
98 #include <sys/ioctl.h>
eb80042 @pclouds Add missing #include to support TIOCGWINSZ on Solaris
pclouds authored
99 #include <termios.h>
2600973 @schiele pre-POSIX.1-2001 systems do not have <sys/select.h>
schiele authored
100 #ifndef NO_SYS_SELECT_H
80bbe72 Move #include <sys/select.h> and <sys/ioctl.h> to git-compat-util.h.
Johannes Sixt authored
101 #include <sys/select.h>
2600973 @schiele pre-POSIX.1-2001 systems do not have <sys/select.h>
schiele authored
102 #endif
8502357 simplify inclusion of system header files.
Junio C Hamano authored
103 #include <netinet/in.h>
104 #include <netinet/tcp.h>
105 #include <arpa/inet.h>
106 #include <netdb.h>
107 #include <pwd.h>
007e2ba Use inttypes.h rather than stdint.h.
Jason Riedy authored
108 #include <inttypes.h>
41b2001 Fix an "implicit function definition" warning.
Ramsay Jones authored
109 #if defined(__CYGWIN__)
110 #undef _XOPEN_SOURCE
111 #include <grp.h>
112 #define _XOPEN_SOURCE 600
adbc0b6 @dmpot cygwin: Use native Win32 API for stat
dmpot authored
113 #include "compat/cygwin.h"
41b2001 Fix an "implicit function definition" warning.
Ramsay Jones authored
114 #else
fb95220 Set _ALL_SOURCE for AIX, but avoid its struct list.
Jason Riedy authored
115 #undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */
8502357 simplify inclusion of system header files.
Junio C Hamano authored
116 #include <grp.h>
fb95220 Set _ALL_SOURCE for AIX, but avoid its struct list.
Jason Riedy authored
117 #define _ALL_SOURCE 1
41b2001 Fix an "implicit function definition" warning.
Ramsay Jones authored
118 #endif
f4626df Add target architecture MinGW.
Johannes Sixt authored
119 #else /* __MINGW32__ */
120 /* pull in Windows compatibility stuff */
121 #include "compat/mingw.h"
122 #endif /* __MINGW32__ */
d75f8e6 @lznuaa Add platform files for porting to MSVC
lznuaa authored
123 #ifdef _MSC_VER
124 #include "compat/msvc.h"
125 #endif
8502357 simplify inclusion of system header files.
Junio C Hamano authored
126
e1c0688 @davvid compat: add a basename() compatibility function
davvid authored
127 #ifndef NO_LIBGEN_H
128 #include <libgen.h>
129 #else
130 #define basename gitbasename
131 extern char *gitbasename(char *);
132 #endif
133
8502357 simplify inclusion of system header files.
Junio C Hamano authored
134 #ifndef NO_ICONV
135 #include <iconv.h>
136 #endif
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
137
684ec6c git-imap-send: Support SSL
Robert Shearman authored
138 #ifndef NO_OPENSSL
139 #include <openssl/ssl.h>
140 #include <openssl/err.h>
141 #endif
142
d0c2449 Define fallback PATH_MAX on systems that do not define one in <limits.h>
Junio C Hamano authored
143 /* On most systems <limits.h> would have given us this, but
144 * not on some systems (e.g. GNU/Hurd).
145 */
146 #ifndef PATH_MAX
147 #define PATH_MAX 4096
148 #endif
149
c4001d9 @spearce Use off_t when we really mean a file offset.
spearce authored
150 #ifndef PRIuMAX
151 #define PRIuMAX "llu"
152 #endif
153
607bb3f Provide fallback definitions of PRIu32 and PRIx32
Johannes Sixt authored
154 #ifndef PRIu32
155 #define PRIu32 "u"
156 #endif
157
158 #ifndef PRIx32
159 #define PRIx32 "x"
160 #endif
161
80ba074 Windows: Use the Windows style PATH separator ';'.
Johannes Sixt authored
162 #ifndef PATH_SEP
163 #define PATH_SEP ':'
164 #endif
165
23326d1 Windows: Strip ".exe" from the program name.
Johannes Sixt authored
166 #ifndef STRIP_EXTENSION
167 #define STRIP_EXTENSION ""
168 #endif
169
25fe217 Windows: Treat Windows style path names.
Johannes Sixt authored
170 #ifndef has_dos_drive_prefix
171 #define has_dos_drive_prefix(path) 0
172 #endif
173
174 #ifndef is_dir_sep
175 #define is_dir_sep(c) ((c) == '/')
176 #endif
177
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
178 #ifdef __GNUC__
179 #define NORETURN __attribute__((__noreturn__))
18660bc @kusma add NORETURN_PTR for function pointers
kusma authored
180 #define NORETURN_PTR __attribute__((__noreturn__))
aba7dea msvc: Add a definition of NORETURN compatible with msvc compiler
Ramsay Jones authored
181 #elif defined(_MSC_VER)
182 #define NORETURN __declspec(noreturn)
183 #define NORETURN_PTR
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
184 #else
185 #define NORETURN
18660bc @kusma add NORETURN_PTR for function pointers
kusma authored
186 #define NORETURN_PTR
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
187 #ifndef __attribute__
188 #define __attribute__(x)
189 #endif
190 #endif
191
51ea551 make sure byte swapping is optimal for git
Nicolas Pitre authored
192 #include "compat/bswap.h"
193
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
194 /* General helper functions */
a4f3131 @kusma increase portability of NORETURN declarations
kusma authored
195 extern NORETURN void usage(const char *err);
64b1cb7 @jrn Introduce usagef() that takes a printf-style format
jrn authored
196 extern NORETURN void usagef(const char *err, ...) __attribute__((format (printf, 1, 2)));
a4f3131 @kusma increase portability of NORETURN declarations
kusma authored
197 extern NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));
198 extern NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
199 extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
46efd2d @tytso Rename warn() to warning() to fix symbol conflicts on BSD and Mac OS
tytso authored
200 extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
201
18660bc @kusma add NORETURN_PTR for function pointers
kusma authored
202 extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
39a3f5e Customizable error handlers
Petr Baudis authored
203
698a68b @gitster Uninline prefixcmp()
gitster authored
204 extern int prefixcmp(const char *str, const char *prefix);
8cc5b29 @apenwarr git merge -X<option>
apenwarr authored
205 extern int suffixcmp(const char *str, const char *suffix);
698a68b @gitster Uninline prefixcmp()
gitster authored
206
fbca583 Move parse-options's skip_prefix() to git-compat-util.h
Miklos Vajna authored
207 static inline const char *skip_prefix(const char *str, const char *prefix)
208 {
209 size_t len = strlen(prefix);
210 return strncmp(str, prefix, len) ? NULL : str + len;
211 }
212
b130a72 @sothis MinGW: implement mmap
sothis authored
213 #if defined(NO_MMAP) || defined(USE_WIN32_MMAP)
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
214
215 #ifndef PROT_READ
216 #define PROT_READ 1
217 #define PROT_WRITE 2
218 #define MAP_PRIVATE 1
219 #define MAP_FAILED ((void*)-1)
220 #endif
221
d677912 @spearce Rename gitfakemmap to git_mmap.
spearce authored
222 #define mmap git_mmap
223 #define munmap git_munmap
224 extern void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
225 extern int git_munmap(void *start, size_t length);
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
226
b130a72 @sothis MinGW: implement mmap
sothis authored
227 #else /* NO_MMAP || USE_WIN32_MMAP */
228
229 #include <sys/mman.h>
230
231 #endif /* NO_MMAP || USE_WIN32_MMAP */
232
233 #ifdef NO_MMAP
234
5faaf24 Make sure packedgitwindowsize is multiple of (pagesize * 2)
Junio C Hamano authored
235 /* This value must be multiple of (pagesize * 2) */
8c82534 @spearce Default core.packdGitWindowSize to 1 MiB if NO_MMAP.
spearce authored
236 #define DEFAULT_PACKED_GIT_WINDOW_SIZE (1 * 1024 * 1024)
237
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
238 #else /* NO_MMAP */
239
5faaf24 Make sure packedgitwindowsize is multiple of (pagesize * 2)
Junio C Hamano authored
240 /* This value must be multiple of (pagesize * 2) */
22bac0e @spearce Increase packedGit{Limit,WindowSize} on 64 bit systems.
spearce authored
241 #define DEFAULT_PACKED_GIT_WINDOW_SIZE \
242 (sizeof(void*) >= 8 \
243 ? 1 * 1024 * 1024 * 1024 \
244 : 32 * 1024 * 1024)
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
245
246 #endif /* NO_MMAP */
247
fdb2a2a @gitster compat: introduce on_disk_bytes()
gitster authored
248 #ifdef NO_ST_BLOCKS_IN_STRUCT_STAT
249 #define on_disk_bytes(st) ((st).st_size)
250 #else
251 #define on_disk_bytes(st) ((st).st_blocks * 512)
252 #endif
253
22bac0e @spearce Increase packedGit{Limit,WindowSize} on 64 bit systems.
spearce authored
254 #define DEFAULT_PACKED_GIT_LIMIT \
ecaebf4 Spell default packedgitlimit slightly differently
Junio C Hamano authored
255 ((1024L * 1024L) * (sizeof(void*) >= 8 ? 8192 : 256))
8c82534 @spearce Default core.packdGitWindowSize to 1 MiB if NO_MMAP.
spearce authored
256
6900679 Replacing the system call pread() with lseek()/xread()/lseek() sequence.
Stefan-W. Hahn authored
257 #ifdef NO_PREAD
258 #define pread git_pread
259 extern ssize_t git_pread(int fd, void *buf, size_t count, off_t offset);
260 #endif
14086b0 @sprohaska compat/pread.c: Add a forward declaration to fix a warning
sprohaska authored
261 /*
262 * Forward decl that will remind us if its twin in cache.h changes.
263 * This function is used in compat/pread.c. But we can't include
264 * cache.h there.
265 */
266 extern ssize_t read_in_full(int fd, void *buf, size_t count);
6900679 Replacing the system call pread() with lseek()/xread()/lseek() sequence.
Stefan-W. Hahn authored
267
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
268 #ifdef NO_SETENV
269 #define setenv gitsetenv
270 extern int gitsetenv(const char *, const char *, int);
271 #endif
272
ca5bb5d @spearce Define compat version of mkdtemp for systems lacking it
spearce authored
273 #ifdef NO_MKDTEMP
274 #define mkdtemp gitmkdtemp
275 extern char *gitmkdtemp(char *);
276 #endif
277
0620b39 @davvid compat: add a mkstemps() compatibility function
davvid authored
278 #ifdef NO_MKSTEMPS
279 #define mkstemps gitmkstemps
280 extern int gitmkstemps(char *, int);
281 #endif
282
731043f Add compat/unsetenv.c .
Jason Riedy authored
283 #ifdef NO_UNSETENV
284 #define unsetenv gitunsetenv
285 extern void gitunsetenv(const char *);
286 #endif
287
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
288 #ifdef NO_STRCASESTR
289 #define strcasestr gitstrcasestr
290 extern char *gitstrcasestr(const char *haystack, const char *needle);
291 #endif
292
817151e Rename safe_strncpy() to strlcpy().
Peter Eriksen authored
293 #ifdef NO_STRLCPY
294 #define strlcpy gitstrlcpy
295 extern size_t gitstrlcpy(char *, const char *, size_t);
296 #endif
297
bc6b4f5 Add a compat/strtoumax.c for Solaris 8.
Jason Riedy authored
298 #ifdef NO_STRTOUMAX
299 #define strtoumax gitstrtoumax
300 extern uintmax_t gitstrtoumax(const char *, char **, int);
301 #endif
302
fa0c87c @raalkml Add a local implementation of hstrerror for the system which do not have...
raalkml authored
303 #ifdef NO_HSTRERROR
304 #define hstrerror githstrerror
305 extern const char *githstrerror(int herror);
306 #endif
307
b21b9f1 add memmem()
René Scharfe authored
308 #ifdef NO_MEMMEM
309 #define memmem gitmemmem
310 void *gitmemmem(const void *haystack, size_t haystacklen,
311 const void *needle, size_t needlelen);
312 #endif
313
cba2252 Add compat/fopen.c which returns NULL on attempt to open directory
Brandon Casey authored
314 #ifdef FREAD_READS_DIRECTORIES
c5445fe compat-util: avoid macro redefinition warning
Johannes Sixt authored
315 #ifdef fopen
316 #undef fopen
317 #endif
cba2252 Add compat/fopen.c which returns NULL on attempt to open directory
Brandon Casey authored
318 #define fopen(a,b) git_fopen(a,b)
319 extern FILE *git_fopen(const char*, const char*);
320 #endif
321
c4582f9 Add compat/snprintf.c for systems that return bogus
Michal Rokos authored
322 #ifdef SNPRINTF_RETURNS_BOGUS
323 #define snprintf git_snprintf
324 extern int git_snprintf(char *str, size_t maxsize,
325 const char *format, ...);
326 #define vsnprintf git_vsnprintf
327 extern int git_vsnprintf(char *str, size_t maxsize,
328 const char *format, va_list ap);
329 #endif
330
726c8ef Fix preprocessor logic that determines the availablity of strchrnul().
Johannes Sixt authored
331 #ifdef __GLIBC_PREREQ
332 #if __GLIBC_PREREQ(2, 1)
333 #define HAVE_STRCHRNUL
334 #endif
335 #endif
336
337 #ifndef HAVE_STRCHRNUL
659c69c Add strchrnul()
René Scharfe authored
338 #define strchrnul gitstrchrnul
9e79f00 @ageric Simplify strchrnul() compat code
ageric authored
339 static inline char *gitstrchrnul(const char *s, int c)
340 {
341 while (*s && *s != c)
342 s++;
343 return (char *)s;
344 }
659c69c Add strchrnul()
René Scharfe authored
345 #endif
346
d1efefa @spearce Actually handle some-low memory conditions
spearce authored
347 extern void release_pack_memory(size_t, int);
97bfeb3 @spearce Release pack windows before reporting out of memory.
spearce authored
348
112db55 @torvalds Shrink the git binary a bit by avoiding unnecessary inline functions
torvalds authored
349 extern char *xstrdup(const char *str);
350 extern void *xmalloc(size_t size);
5bf9219 Add xmallocz()
Ilari Liusvaara authored
351 extern void *xmallocz(size_t size);
112db55 @torvalds Shrink the git binary a bit by avoiding unnecessary inline functions
torvalds authored
352 extern void *xmemdupz(const void *data, size_t len);
353 extern char *xstrndup(const char *str, size_t len);
354 extern void *xrealloc(void *ptr, size_t size);
355 extern void *xcalloc(size_t nmemb, size_t size);
356 extern void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
357 extern ssize_t xread(int fd, void *buf, size_t len);
358 extern ssize_t xwrite(int fd, const void *buf, size_t len);
359 extern int xdup(int fd);
360 extern FILE *xfdopen(int fd, const char *mode);
361 extern int xmkstemp(char *template);
6e180cd @gitster Make sure objects/pack exists before creating a new pack
gitster authored
362 extern int odb_mkstemp(char *template, size_t limit, const char *pattern);
363 extern int odb_pack_keep(char *name, size_t namesz, unsigned char *sha1);
f21a47b Introduces xmkstemp()
Luiz Fernando N. Capitulino authored
364
dc49cd7 @spearce Cast 64 bit off_t to 32 bit size_t
spearce authored
365 static inline size_t xsize_t(off_t len)
366 {
367 return (size_t)len;
368 }
369
5bb1cda drop length argument of has_extension
Rene Scharfe authored
370 static inline int has_extension(const char *filename, const char *ext)
83a2b84 Add has_extension()
Rene Scharfe authored
371 {
5bb1cda drop length argument of has_extension
Rene Scharfe authored
372 size_t len = strlen(filename);
373 size_t extlen = strlen(ext);
83a2b84 Add has_extension()
Rene Scharfe authored
374 return len > extlen && !memcmp(filename + len - extlen, ext, extlen);
375 }
376
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
377 /* Sane ctype - no locale, and works with signed chars */
c2e9364 cleanup: add isascii()
René Scharfe authored
378 #undef isascii
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
379 #undef isspace
380 #undef isdigit
381 #undef isalpha
382 #undef isalnum
383 #undef tolower
384 #undef toupper
385 extern unsigned char sane_ctype[256];
386 #define GIT_SPACE 0x01
387 #define GIT_DIGIT 0x02
388 #define GIT_ALPHA 0x04
8cc3299 Change NUL char handling of isspecial()
René Scharfe authored
389 #define GIT_GLOB_SPECIAL 0x08
f9b7cce Add is_regex_special()
René Scharfe authored
390 #define GIT_REGEX_SPECIAL 0x10
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
391 #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
c2e9364 cleanup: add isascii()
René Scharfe authored
392 #define isascii(x) (((x) & ~0x7f) == 0)
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
393 #define isspace(x) sane_istest(x,GIT_SPACE)
394 #define isdigit(x) sane_istest(x,GIT_DIGIT)
395 #define isalpha(x) sane_istest(x,GIT_ALPHA)
396 #define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
8cc3299 Change NUL char handling of isspecial()
René Scharfe authored
397 #define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL)
f9b7cce Add is_regex_special()
René Scharfe authored
398 #define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL)
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
399 #define tolower(x) sane_case((unsigned char)(x), 0x20)
400 #define toupper(x) sane_case((unsigned char)(x), 0)
401
402 static inline int sane_case(int x, int high)
403 {
404 if (sane_istest(x, GIT_ALPHA))
405 x = (x & ~0x20) | high;
406 return x;
407 }
408
6aead43 @meyering sscanf/strtoul: parse integers robustly
meyering authored
409 static inline int strtoul_ui(char const *s, int base, unsigned int *result)
410 {
411 unsigned long ul;
412 char *p;
413
414 errno = 0;
415 ul = strtoul(s, &p, base);
416 if (errno || *p || p == s || (unsigned int) ul != ul)
417 return -1;
418 *result = ul;
419 return 0;
420 }
421
7791ecb @gitster revert/cherry-pick: work on merge commits as well
gitster authored
422 static inline int strtol_i(char const *s, int base, int *result)
423 {
424 long ul;
425 char *p;
426
427 errno = 0;
428 ul = strtol(s, &p, base);
429 if (errno || *p || p == s || (int) ul != ul)
430 return -1;
431 *result = ul;
432 return 0;
433 }
434
43fe901 @bdowning compat: Add simplified merge sort implementation from glibc
bdowning authored
435 #ifdef INTERNAL_QSORT
436 void git_qsort(void *base, size_t nmemb, size_t size,
437 int(*compar)(const void *, const void *));
438 #define qsort git_qsort
439 #endif
440
81a24b5 @raalkml Do not use GUID on dir in git init --shared=all on FreeBSD
raalkml authored
441 #ifndef DIR_HAS_BSD_GROUP_SEMANTICS
442 # define FORCE_DIR_SET_GID S_ISGID
443 #else
444 # define FORCE_DIR_SET_GID 0
445 #endif
446
c06ff49 Record ns-timestamps if possible, but do not use it without USE_NSEC
Kjetil Barvik authored
447 #ifdef NO_NSEC
448 #undef USE_NSEC
449 #define ST_CTIME_NSEC(st) 0
450 #define ST_MTIME_NSEC(st) 0
451 #else
c567383 @Benabik Create USE_ST_TIMESPEC and turn it on for Darwin
Benabik authored
452 #ifdef USE_ST_TIMESPEC
453 #define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctimespec.tv_nsec))
454 #define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtimespec.tv_nsec))
455 #else
c06ff49 Record ns-timestamps if possible, but do not use it without USE_NSEC
Kjetil Barvik authored
456 #define ST_CTIME_NSEC(st) ((unsigned int)((st).st_ctim.tv_nsec))
457 #define ST_MTIME_NSEC(st) ((unsigned int)((st).st_mtim.tv_nsec))
458 #endif
c567383 @Benabik Create USE_ST_TIMESPEC and turn it on for Darwin
Benabik authored
459 #endif
c06ff49 Record ns-timestamps if possible, but do not use it without USE_NSEC
Kjetil Barvik authored
460
34779c5 Windows: Skip fstat/lstat optimization in write_entry()
Johannes Sixt authored
461 #ifdef UNRELIABLE_FSTAT
462 #define fstat_is_reliable() 0
463 #else
464 #define fstat_is_reliable() 1
465 #endif
466
fc71db3 @raalkml Introduce an unlink(2) wrapper which gives warning if unlink failed
raalkml authored
467 /*
468 * Preserves errno, prints a message, but gives no warning for ENOENT.
469 * Always returns the return value of unlink(2).
470 */
471 int unlink_or_warn(const char *path);
472
4050c0d Clean up compatibility definitions.
Junio C Hamano authored
473 #endif
Something went wrong with that request. Please try again.