forked from xiaolai/git
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This attempts to clean up the way various compatibility functions are defined and used. - A new header file, git-compat-util.h, is introduced. This looks at various NO_XXX and does necessary function name replacements, equivalent of -Dstrcasestr=gitstrcasestr in the Makefile. - Those function name replacements are removed from the Makefile. - Common features such as usage(), die(), xmalloc() are moved from cache.h to git-compat-util.h; cache.h includes git-compat-util.h itself. Signed-off-by: Junio C Hamano <[email protected]>
- Loading branch information
Junio C Hamano
committed
Dec 5, 2005
1 parent
cd8c458
commit 4050c0d
Showing
8 changed files
with
129 additions
and
118 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
#ifndef GIT_COMPAT_UTIL_H | ||
#define GIT_COMPAT_UTIL_H | ||
|
||
#include <unistd.h> | ||
#include <stdio.h> | ||
#include <sys/stat.h> | ||
#include <fcntl.h> | ||
#include <stddef.h> | ||
#include <stdlib.h> | ||
#include <stdarg.h> | ||
#include <string.h> | ||
#include <errno.h> | ||
#include <limits.h> | ||
#include <sys/param.h> | ||
#include <netinet/in.h> | ||
#include <sys/types.h> | ||
#include <dirent.h> | ||
|
||
#ifdef __GNUC__ | ||
#define NORETURN __attribute__((__noreturn__)) | ||
#else | ||
#define NORETURN | ||
#ifndef __attribute__ | ||
#define __attribute__(x) | ||
#endif | ||
#endif | ||
|
||
/* General helper functions */ | ||
extern void usage(const char *err) NORETURN; | ||
extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); | ||
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); | ||
|
||
#ifdef NO_MMAP | ||
|
||
#ifndef PROT_READ | ||
#define PROT_READ 1 | ||
#define PROT_WRITE 2 | ||
#define MAP_PRIVATE 1 | ||
#define MAP_FAILED ((void*)-1) | ||
#endif | ||
|
||
#define mmap gitfakemmap | ||
#define munmap gitfakemunmap | ||
extern void *gitfakemmap(void *start, size_t length, int prot , int flags, int fd, off_t offset); | ||
extern int gitfakemunmap(void *start, size_t length); | ||
|
||
#else /* NO_MMAP */ | ||
|
||
#include <sys/mman.h> | ||
|
||
#endif /* NO_MMAP */ | ||
|
||
#ifdef NO_SETENV | ||
#define setenv gitsetenv | ||
extern int gitsetenv(const char *, const char *, int); | ||
#endif | ||
|
||
#ifdef NO_STRCASESTR | ||
#define strcasestr gitstrcasestr | ||
extern char *gitstrcasestr(const char *haystack, const char *needle); | ||
#endif | ||
|
||
static inline void *xmalloc(size_t size) | ||
{ | ||
void *ret = malloc(size); | ||
if (!ret) | ||
die("Out of memory, malloc failed"); | ||
return ret; | ||
} | ||
|
||
static inline void *xrealloc(void *ptr, size_t size) | ||
{ | ||
void *ret = realloc(ptr, size); | ||
if (!ret) | ||
die("Out of memory, realloc failed"); | ||
return ret; | ||
} | ||
|
||
static inline void *xcalloc(size_t nmemb, size_t size) | ||
{ | ||
void *ret = calloc(nmemb, size); | ||
if (!ret) | ||
die("Out of memory, calloc failed"); | ||
return ret; | ||
} | ||
|
||
/* Sane ctype - no locale, and works with signed chars */ | ||
#undef isspace | ||
#undef isdigit | ||
#undef isalpha | ||
#undef isalnum | ||
#undef tolower | ||
#undef toupper | ||
extern unsigned char sane_ctype[256]; | ||
#define GIT_SPACE 0x01 | ||
#define GIT_DIGIT 0x02 | ||
#define GIT_ALPHA 0x04 | ||
#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) | ||
#define isspace(x) sane_istest(x,GIT_SPACE) | ||
#define isdigit(x) sane_istest(x,GIT_DIGIT) | ||
#define isalpha(x) sane_istest(x,GIT_ALPHA) | ||
#define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT) | ||
#define tolower(x) sane_case((unsigned char)(x), 0x20) | ||
#define toupper(x) sane_case((unsigned char)(x), 0) | ||
|
||
static inline int sane_case(int x, int high) | ||
{ | ||
if (sane_istest(x, GIT_ALPHA)) | ||
x = (x & ~0x20) | high; | ||
return x; | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters