From fda5d9595d5172fcbba34742e92d6c7ed4cbe5ef Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:19 +0000 Subject: [PATCH 1/6] git-compat-util: move strbuf.c funcs to its header While functions like starts_with() probably should not belong in the boundaries of the strbuf library, this commit focuses on first splitting out headers from git-compat-util.h. Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- builtin/symbolic-ref.c | 1 + builtin/unpack-objects.c | 1 + git-compat-util.h | 32 -------------------------------- strbuf.h | 32 ++++++++++++++++++++++++++++++++ versioncmp.c | 1 + 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c index a61fa3c0f8..c9defe4d2e 100644 --- a/builtin/symbolic-ref.c +++ b/builtin/symbolic-ref.c @@ -3,6 +3,7 @@ #include "gettext.h" #include "refs.h" #include "parse-options.h" +#include "strbuf.h" static const char * const git_symbolic_ref_usage[] = { N_("git symbolic-ref [-m ] "), diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 1979532a9d..84b68304ed 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -12,6 +12,7 @@ #include "blob.h" #include "commit.h" #include "replace-object.h" +#include "strbuf.h" #include "tag.h" #include "tree.h" #include "tree-walk.h" diff --git a/git-compat-util.h b/git-compat-util.h index 1889da7986..fe9e86bad0 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -677,9 +677,6 @@ void set_warn_routine(report_fn routine); report_fn get_warn_routine(void); void set_die_is_recursing_routine(int (*routine)(void)); -int starts_with(const char *str, const char *prefix); -int istarts_with(const char *str, const char *prefix); - /* * If the string "str" begins with the string found in "prefix", return 1. * The "out" parameter is set to "str + strlen(prefix)" (i.e., to the point in @@ -708,29 +705,6 @@ static inline int skip_prefix(const char *str, const char *prefix, return 0; } -/* - * If the string "str" is the same as the string in "prefix", then the "arg" - * parameter is set to the "def" parameter and 1 is returned. - * If the string "str" begins with the string found in "prefix" and then a - * "=" sign, then the "arg" parameter is set to "str + strlen(prefix) + 1" - * (i.e., to the point in the string right after the prefix and the "=" sign), - * and 1 is returned. - * - * Otherwise, return 0 and leave "arg" untouched. - * - * When we accept both a "--key" and a "--key=" option, this function - * can be used instead of !strcmp(arg, "--key") and then - * skip_prefix(arg, "--key=", &arg) to parse such an option. - */ -int skip_to_optional_arg_default(const char *str, const char *prefix, - const char **arg, const char *def); - -static inline int skip_to_optional_arg(const char *str, const char *prefix, - const char **arg) -{ - return skip_to_optional_arg_default(str, prefix, arg, ""); -} - /* * Like skip_prefix, but promises never to read past "len" bytes of the input * buffer, and returns the remaining number of bytes in "out" via "outlen". @@ -775,12 +749,6 @@ static inline int strip_suffix(const char *str, const char *suffix, size_t *len) return strip_suffix_mem(str, len, suffix); } -static inline int ends_with(const char *str, const char *suffix) -{ - size_t len; - return strip_suffix(str, suffix, &len); -} - #define SWAP(a, b) do { \ void *_swap_a_ptr = &(a); \ void *_swap_b_ptr = &(b); \ diff --git a/strbuf.h b/strbuf.h index 507670ce3c..a2544484f8 100644 --- a/strbuf.h +++ b/strbuf.h @@ -735,4 +735,36 @@ char *xstrvfmt(const char *fmt, va_list ap); __attribute__((format (printf, 1, 2))) char *xstrfmt(const char *fmt, ...); +int starts_with(const char *str, const char *prefix); +int istarts_with(const char *str, const char *prefix); + +/* + * If the string "str" is the same as the string in "prefix", then the "arg" + * parameter is set to the "def" parameter and 1 is returned. + * If the string "str" begins with the string found in "prefix" and then a + * "=" sign, then the "arg" parameter is set to "str + strlen(prefix) + 1" + * (i.e., to the point in the string right after the prefix and the "=" sign), + * and 1 is returned. + * + * Otherwise, return 0 and leave "arg" untouched. + * + * When we accept both a "--key" and a "--key=" option, this function + * can be used instead of !strcmp(arg, "--key") and then + * skip_prefix(arg, "--key=", &arg) to parse such an option. + */ +int skip_to_optional_arg_default(const char *str, const char *prefix, + const char **arg, const char *def); + +static inline int skip_to_optional_arg(const char *str, const char *prefix, + const char **arg) +{ + return skip_to_optional_arg_default(str, prefix, arg, ""); +} + +static inline int ends_with(const char *str, const char *suffix) +{ + size_t len; + return strip_suffix(str, suffix, &len); +} + #endif /* STRBUF_H */ diff --git a/versioncmp.c b/versioncmp.c index 74cc7c43f0..45e676cbca 100644 --- a/versioncmp.c +++ b/versioncmp.c @@ -1,5 +1,6 @@ #include "git-compat-util.h" #include "config.h" +#include "strbuf.h" #include "string-list.h" #include "versioncmp.h" From 382f6940afc4f2c5f1e939d0ca8ba835056cf2d0 Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:20 +0000 Subject: [PATCH 2/6] git-compat-util: move wrapper.c funcs to its header Since the functions in wrapper.c are widely used across the codebase, include it by default in git-compat-util.h. A future patch will remove now unnecessary inclusions of wrapper.h from other files. Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- git-compat-util.h | 112 +--------------------------------------------- wrapper.h | 111 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 111 deletions(-) diff --git a/git-compat-util.h b/git-compat-util.h index fe9e86bad0..f8e68baf29 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -625,7 +625,7 @@ static inline int git_has_dir_sep(const char *path) #include "compat/bswap.h" -struct strbuf; +#include "wrapper.h" /* General helper functions */ NORETURN void usage(const char *err); @@ -1045,36 +1045,6 @@ static inline int cast_size_t_to_int(size_t a) # define xalloca(size) (xmalloc(size)) # define xalloca_free(p) (free(p)) #endif -char *xstrdup(const char *str); -void *xmalloc(size_t size); -void *xmallocz(size_t size); -void *xmallocz_gently(size_t size); -void *xmemdupz(const void *data, size_t len); -char *xstrndup(const char *str, size_t len); -void *xrealloc(void *ptr, size_t size); -void *xcalloc(size_t nmemb, size_t size); -void xsetenv(const char *name, const char *value, int overwrite); -void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); -const char *mmap_os_err(void); -void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset); -int xopen(const char *path, int flags, ...); -ssize_t xread(int fd, void *buf, size_t len); -ssize_t xwrite(int fd, const void *buf, size_t len); -ssize_t xpread(int fd, void *buf, size_t len, off_t offset); -int xdup(int fd); -FILE *xfopen(const char *path, const char *mode); -FILE *xfdopen(int fd, const char *mode); -int xmkstemp(char *temp_filename); -int xmkstemp_mode(char *temp_filename, int mode); -char *xgetcwd(void); -FILE *fopen_for_writing(const char *path); -FILE *fopen_or_warn(const char *path, const char *mode); - -/* - * Like strncmp, but only return zero if s is NUL-terminated and exactly len - * characters long. If it is not, consider it greater than t. - */ -int xstrncmpz(const char *s, const char *t, size_t len); /* * FREE_AND_NULL(ptr) is like free(ptr) followed by ptr = NULL. Note @@ -1176,15 +1146,10 @@ static inline size_t xsize_t(off_t len) return (size_t) len; } -__attribute__((format (printf, 3, 4))) -int xsnprintf(char *dst, size_t max, const char *fmt, ...); - #ifndef HOST_NAME_MAX #define HOST_NAME_MAX 256 #endif -int xgethostname(char *buf, size_t len); - /* in ctype.c, for kwset users */ extern const unsigned char tolower_trans_tbl[256]; @@ -1425,72 +1390,6 @@ void bug_fl(const char *file, int line, const char *fmt, ...); #endif #endif -enum fsync_action { - FSYNC_WRITEOUT_ONLY, - FSYNC_HARDWARE_FLUSH -}; - -/* - * Issues an fsync against the specified file according to the specified mode. - * - * FSYNC_WRITEOUT_ONLY attempts to use interfaces available on some operating - * systems to flush the OS cache without issuing a flush command to the storage - * controller. If those interfaces are unavailable, the function fails with - * ENOSYS. - * - * FSYNC_HARDWARE_FLUSH does an OS writeout and hardware flush to ensure that - * changes are durable. It is not expected to fail. - */ -int git_fsync(int fd, enum fsync_action action); - -/* - * Writes out trace statistics for fsync using the trace2 API. - */ -void trace_git_fsync_stats(void); - -/* - * Preserves errno, prints a message, but gives no warning for ENOENT. - * Returns 0 on success, which includes trying to unlink an object that does - * not exist. - */ -int unlink_or_warn(const char *path); - /* - * Tries to unlink file. Returns 0 if unlink succeeded - * or the file already didn't exist. Returns -1 and - * appends a message to err suitable for - * 'error("%s", err->buf)' on error. - */ -int unlink_or_msg(const char *file, struct strbuf *err); -/* - * Preserves errno, prints a message, but gives no warning for ENOENT. - * Returns 0 on success, which includes trying to remove a directory that does - * not exist. - */ -int rmdir_or_warn(const char *path); -/* - * Calls the correct function out of {unlink,rmdir}_or_warn based on - * the supplied file mode. - */ -int remove_or_warn(unsigned int mode, const char *path); - -/* - * Call access(2), but warn for any error except "missing file" - * (ENOENT or ENOTDIR). - */ -#define ACCESS_EACCES_OK (1U << 0) -int access_or_warn(const char *path, int mode, unsigned flag); -int access_or_die(const char *path, int mode, unsigned flag); - -/* Warn on an inaccessible file if errno indicates this is an error */ -int warn_on_fopen_errors(const char *path); - -/* - * Open with O_NOFOLLOW, or equivalent. Note that the fallback equivalent - * may be racy. Do not use this as protection against an attacker who can - * simultaneously create paths. - */ -int open_nofollow(const char *path, int flags); - #ifndef SHELL_PATH # define SHELL_PATH "/bin/sh" #endif @@ -1630,13 +1529,4 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset) ((uintptr_t)&(ptr)->member - (uintptr_t)(ptr)) #endif /* !__GNUC__ */ -void sleep_millisec(int millisec); - -/* - * Generate len bytes from the system cryptographically secure PRNG. - * Returns 0 on success and -1 on error, setting errno. The inability to - * satisfy the full request is an error. - */ -int csprng_bytes(void *buf, size_t len); - #endif diff --git a/wrapper.h b/wrapper.h index f0c7d0616d..c85b1328d1 100644 --- a/wrapper.h +++ b/wrapper.h @@ -1,6 +1,42 @@ #ifndef WRAPPER_H #define WRAPPER_H +char *xstrdup(const char *str); +void *xmalloc(size_t size); +void *xmallocz(size_t size); +void *xmallocz_gently(size_t size); +void *xmemdupz(const void *data, size_t len); +char *xstrndup(const char *str, size_t len); +void *xrealloc(void *ptr, size_t size); +void *xcalloc(size_t nmemb, size_t size); +void xsetenv(const char *name, const char *value, int overwrite); +void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); +const char *mmap_os_err(void); +void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset); +int xopen(const char *path, int flags, ...); +ssize_t xread(int fd, void *buf, size_t len); +ssize_t xwrite(int fd, const void *buf, size_t len); +ssize_t xpread(int fd, void *buf, size_t len, off_t offset); +int xdup(int fd); +FILE *xfopen(const char *path, const char *mode); +FILE *xfdopen(int fd, const char *mode); +int xmkstemp(char *temp_filename); +int xmkstemp_mode(char *temp_filename, int mode); +char *xgetcwd(void); +FILE *fopen_for_writing(const char *path); +FILE *fopen_or_warn(const char *path, const char *mode); + +/* + * Like strncmp, but only return zero if s is NUL-terminated and exactly len + * characters long. If it is not, consider it greater than t. + */ +int xstrncmpz(const char *s, const char *t, size_t len); + +__attribute__((format (printf, 3, 4))) +int xsnprintf(char *dst, size_t max, const char *fmt, ...); + +int xgethostname(char *buf, size_t len); + /* set default permissions by passing mode arguments to open(2) */ int git_mkstemps_mode(char *pattern, int suffix_len, int mode); int git_mkstemp_mode(char *pattern, int mode); @@ -33,4 +69,79 @@ void write_file(const char *path, const char *fmt, ...); /* Return 1 if the file is empty or does not exists, 0 otherwise. */ int is_empty_or_missing_file(const char *filename); +enum fsync_action { + FSYNC_WRITEOUT_ONLY, + FSYNC_HARDWARE_FLUSH +}; + +/* + * Issues an fsync against the specified file according to the specified mode. + * + * FSYNC_WRITEOUT_ONLY attempts to use interfaces available on some operating + * systems to flush the OS cache without issuing a flush command to the storage + * controller. If those interfaces are unavailable, the function fails with + * ENOSYS. + * + * FSYNC_HARDWARE_FLUSH does an OS writeout and hardware flush to ensure that + * changes are durable. It is not expected to fail. + */ +int git_fsync(int fd, enum fsync_action action); + +/* + * Writes out trace statistics for fsync using the trace2 API. + */ +void trace_git_fsync_stats(void); + +/* + * Preserves errno, prints a message, but gives no warning for ENOENT. + * Returns 0 on success, which includes trying to unlink an object that does + * not exist. + */ +int unlink_or_warn(const char *path); + /* + * Tries to unlink file. Returns 0 if unlink succeeded + * or the file already didn't exist. Returns -1 and + * appends a message to err suitable for + * 'error("%s", err->buf)' on error. + */ +int unlink_or_msg(const char *file, struct strbuf *err); +/* + * Preserves errno, prints a message, but gives no warning for ENOENT. + * Returns 0 on success, which includes trying to remove a directory that does + * not exist. + */ +int rmdir_or_warn(const char *path); +/* + * Calls the correct function out of {unlink,rmdir}_or_warn based on + * the supplied file mode. + */ +int remove_or_warn(unsigned int mode, const char *path); + +/* + * Call access(2), but warn for any error except "missing file" + * (ENOENT or ENOTDIR). + */ +#define ACCESS_EACCES_OK (1U << 0) +int access_or_warn(const char *path, int mode, unsigned flag); +int access_or_die(const char *path, int mode, unsigned flag); + +/* Warn on an inaccessible file if errno indicates this is an error */ +int warn_on_fopen_errors(const char *path); + +/* + * Open with O_NOFOLLOW, or equivalent. Note that the fallback equivalent + * may be racy. Do not use this as protection against an attacker who can + * simultaneously create paths. + */ +int open_nofollow(const char *path, int flags); + +void sleep_millisec(int millisec); + +/* + * Generate len bytes from the system cryptographically secure PRNG. + * Returns 0 on success and -1 on error, setting errno. The inability to + * satisfy the full request is an error. + */ +int csprng_bytes(void *buf, size_t len); + #endif /* WRAPPER_H */ From 1890ce84bd7b2b199f422246d557dc2f2668ef17 Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:21 +0000 Subject: [PATCH 3/6] sane-ctype.h: create header for sane-ctype macros Splitting these macros from git-compat-util.h cleans up the file and allows future third-party sources to not use these overrides if they do not wish to. Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- git-compat-util.h | 62 +------------------------------------------- sane-ctype.h | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 61 deletions(-) create mode 100644 sane-ctype.h diff --git a/git-compat-util.h b/git-compat-util.h index f8e68baf29..2151d8b437 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -1153,67 +1153,7 @@ static inline size_t xsize_t(off_t len) /* in ctype.c, for kwset users */ extern const unsigned char tolower_trans_tbl[256]; -/* Sane ctype - no locale, and works with signed chars */ -#undef isascii -#undef isspace -#undef isdigit -#undef isalpha -#undef isalnum -#undef isprint -#undef islower -#undef isupper -#undef tolower -#undef toupper -#undef iscntrl -#undef ispunct -#undef isxdigit - -extern const unsigned char sane_ctype[256]; -extern const signed char hexval_table[256]; -#define GIT_SPACE 0x01 -#define GIT_DIGIT 0x02 -#define GIT_ALPHA 0x04 -#define GIT_GLOB_SPECIAL 0x08 -#define GIT_REGEX_SPECIAL 0x10 -#define GIT_PATHSPEC_MAGIC 0x20 -#define GIT_CNTRL 0x40 -#define GIT_PUNCT 0x80 -#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) -#define isascii(x) (((x) & ~0x7f) == 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 isprint(x) ((x) >= 0x20 && (x) <= 0x7e) -#define islower(x) sane_iscase(x, 1) -#define isupper(x) sane_iscase(x, 0) -#define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL) -#define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL) -#define iscntrl(x) (sane_istest(x,GIT_CNTRL)) -#define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \ - GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC) -#define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1) -#define tolower(x) sane_case((unsigned char)(x), 0x20) -#define toupper(x) sane_case((unsigned char)(x), 0) -#define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC) - -static inline int sane_case(int x, int high) -{ - if (sane_istest(x, GIT_ALPHA)) - x = (x & ~0x20) | high; - return x; -} - -static inline int sane_iscase(int x, int is_lower) -{ - if (!sane_istest(x, GIT_ALPHA)) - return 0; - - if (is_lower) - return (x & 0x20) != 0; - else - return (x & 0x20) == 0; -} +#include "sane-ctype.h" /* * Like skip_prefix, but compare case-insensitively. Note that the comparison diff --git a/sane-ctype.h b/sane-ctype.h new file mode 100644 index 0000000000..cbea1b299b --- /dev/null +++ b/sane-ctype.h @@ -0,0 +1,66 @@ +#ifndef SANE_CTYPE_H +#define SANE_CTYPE_H + +/* Sane ctype - no locale, and works with signed chars */ +#undef isascii +#undef isspace +#undef isdigit +#undef isalpha +#undef isalnum +#undef isprint +#undef islower +#undef isupper +#undef tolower +#undef toupper +#undef iscntrl +#undef ispunct +#undef isxdigit + +extern const unsigned char sane_ctype[256]; +extern const signed char hexval_table[256]; +#define GIT_SPACE 0x01 +#define GIT_DIGIT 0x02 +#define GIT_ALPHA 0x04 +#define GIT_GLOB_SPECIAL 0x08 +#define GIT_REGEX_SPECIAL 0x10 +#define GIT_PATHSPEC_MAGIC 0x20 +#define GIT_CNTRL 0x40 +#define GIT_PUNCT 0x80 +#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0) +#define isascii(x) (((x) & ~0x7f) == 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 isprint(x) ((x) >= 0x20 && (x) <= 0x7e) +#define islower(x) sane_iscase(x, 1) +#define isupper(x) sane_iscase(x, 0) +#define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL) +#define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL) +#define iscntrl(x) (sane_istest(x,GIT_CNTRL)) +#define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \ + GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC) +#define isxdigit(x) (hexval_table[(unsigned char)(x)] != -1) +#define tolower(x) sane_case((unsigned char)(x), 0x20) +#define toupper(x) sane_case((unsigned char)(x), 0) +#define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC) + +static inline int sane_case(int x, int high) +{ + if (sane_istest(x, GIT_ALPHA)) + x = (x & ~0x20) | high; + return x; +} + +static inline int sane_iscase(int x, int is_lower) +{ + if (!sane_istest(x, GIT_ALPHA)) + return 0; + + if (is_lower) + return (x & 0x20) != 0; + else + return (x & 0x20) == 0; +} + +#endif From 28aed75a9fe72f265bff24a02b962616b3f36ad3 Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:22 +0000 Subject: [PATCH 4/6] kwset: move translation table from ctype This table was originally introduced to solely be used with kwset machinery (0f871cf56e), so it would make sense for it to belong in kwset.[ch] rather than ctype.c and git-compat-util.h. It is only used in diffcore-pickaxe.c, which already includes kwset.h so no other headers have to be modified. Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- ctype.c | 36 ------------------------------------ git-compat-util.h | 3 --- kwset.c | 36 ++++++++++++++++++++++++++++++++++++ kwset.h | 2 ++ 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/ctype.c b/ctype.c index fc0225cebd..3451745550 100644 --- a/ctype.c +++ b/ctype.c @@ -28,39 +28,3 @@ const unsigned char sane_ctype[256] = { A, A, A, A, A, A, A, A, A, A, A, R, R, U, P, X, /* 112..127 */ /* Nothing in the 128.. range */ }; - -/* For case-insensitive kwset */ -const unsigned char tolower_trans_tbl[256] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - ' ', '!', '"', '#', '$', '%', '&', 0x27, - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', 0x5c, ']', '^', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, -}; diff --git a/git-compat-util.h b/git-compat-util.h index 2151d8b437..9d3c21acbb 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -1150,9 +1150,6 @@ static inline size_t xsize_t(off_t len) #define HOST_NAME_MAX 256 #endif -/* in ctype.c, for kwset users */ -extern const unsigned char tolower_trans_tbl[256]; - #include "sane-ctype.h" /* diff --git a/kwset.c b/kwset.c index 4b14d4f86b..bbfcf815a5 100644 --- a/kwset.c +++ b/kwset.c @@ -49,6 +49,42 @@ static void *obstack_chunk_alloc(long size) #define U(c) ((unsigned char) (c)) +/* For case-insensitive kwset */ +const unsigned char tolower_trans_tbl[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + ' ', '!', '"', '#', '$', '%', '&', 0x27, + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '[', 0x5c, ']', '^', '_', + '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '{', '|', '}', '~', 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, +}; + /* Balanced tree of edges and labels leaving a given trie node. */ struct tree { diff --git a/kwset.h b/kwset.h index f50ecae573..d42a793a30 100644 --- a/kwset.h +++ b/kwset.h @@ -26,6 +26,8 @@ The author may be reached (Email) at the address mike@ai.mit.edu, or (US mail) as Mike Haertel c/o Free Software Foundation. */ +extern const unsigned char tolower_trans_tbl[256]; + struct kwsmatch { int index; /* Index number of matching keyword. */ From da9502ff4dc495471a1a080dc297cd6e4628c10c Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:23 +0000 Subject: [PATCH 5/6] treewide: remove unnecessary includes for wrapper.h Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- apply.c | 1 - builtin/am.c | 1 - builtin/bisect.c | 1 - builtin/branch.c | 1 - builtin/bugreport.c | 1 - builtin/clone.c | 1 - builtin/config.c | 1 - builtin/credential-cache.c | 1 - builtin/difftool.c | 1 - builtin/fast-import.c | 1 - builtin/fmt-merge-msg.c | 1 - builtin/gc.c | 1 - builtin/get-tar-commit-id.c | 1 - builtin/index-pack.c | 1 - builtin/init-db.c | 1 - builtin/merge.c | 1 - builtin/pack-objects.c | 1 - builtin/rebase.c | 1 - builtin/receive-pack.c | 1 - builtin/rerere.c | 1 - builtin/unpack-file.c | 1 - builtin/worktree.c | 1 - bulk-checkin.c | 1 - combine-diff.c | 1 - commit-graph.c | 1 - compat/terminal.c | 1 - config.c | 1 - convert.c | 1 - copy.c | 1 - csum-file.c | 1 - daemon.c | 1 - diff.c | 1 - dir.c | 1 - editor.c | 1 - entry.c | 1 - environment.c | 1 - fetch-pack.c | 1 - gpg-interface.c | 1 - grep.c | 1 - http-backend.c | 1 - imap-send.c | 1 - merge-ll.c | 1 - merge-recursive.c | 1 - notes-merge.c | 1 - object-file.c | 1 - pack-write.c | 1 - packfile.c | 1 - parallel-checkout.c | 1 - path.c | 1 - pkt-line.c | 1 - read-cache.c | 1 - rebase-interactive.c | 1 - refs.c | 1 - rerere.c | 1 - send-pack.c | 1 - sequencer.c | 1 - server-info.c | 1 - setup.c | 1 - shallow.c | 1 - strbuf.c | 1 - streaming.c | 1 - t/helper/test-delta.c | 1 - t/helper/test-fsmonitor-client.c | 1 - t/helper/test-read-cache.c | 1 - tag.c | 1 - tempfile.c | 1 - trace.c | 1 - transport-helper.c | 1 - transport.c | 1 - upload-pack.c | 1 - usage.c | 1 - worktree.c | 1 - wrapper.c | 1 - write-or-die.c | 1 - 74 files changed, 74 deletions(-) diff --git a/apply.c b/apply.c index 8bd0109fcc..99c2a91de7 100644 --- a/apply.c +++ b/apply.c @@ -37,7 +37,6 @@ #include "symlinks.h" #include "wildmatch.h" #include "ws.h" -#include "wrapper.h" struct gitdiff_data { struct strbuf *root; diff --git a/builtin/am.c b/builtin/am.c index a78daa6971..f364559ade 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -44,7 +44,6 @@ #include "path.h" #include "repository.h" #include "pretty.h" -#include "wrapper.h" /** * Returns the length of the first line of msg. diff --git a/builtin/bisect.c b/builtin/bisect.c index 6478df3489..65478ef40f 100644 --- a/builtin/bisect.c +++ b/builtin/bisect.c @@ -15,7 +15,6 @@ #include "prompt.h" #include "quote.h" #include "revision.h" -#include "wrapper.h" static GIT_PATH_FUNC(git_path_bisect_terms, "BISECT_TERMS") static GIT_PATH_FUNC(git_path_bisect_expected_rev, "BISECT_EXPECTED_REV") diff --git a/builtin/branch.c b/builtin/branch.c index b57e4c6e61..0f1611c4b3 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -28,7 +28,6 @@ #include "worktree.h" #include "help.h" #include "commit-reach.h" -#include "wrapper.h" static const char * const builtin_branch_usage[] = { N_("git branch [] [-r | -a] [--merged] [--no-merged]"), diff --git a/builtin/bugreport.c b/builtin/bugreport.c index daf6c23657..d2ae5c305d 100644 --- a/builtin/bugreport.c +++ b/builtin/bugreport.c @@ -11,7 +11,6 @@ #include "diagnose.h" #include "object-file.h" #include "setup.h" -#include "wrapper.h" static void get_system_info(struct strbuf *sys_info) { diff --git a/builtin/clone.c b/builtin/clone.c index 687a686269..3fc0e5d7c0 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -45,7 +45,6 @@ #include "hook.h" #include "bundle.h" #include "bundle-uri.h" -#include "wrapper.h" /* * Overall FIXMEs: diff --git a/builtin/config.c b/builtin/config.c index 6599f88b24..e944b6bb7a 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -15,7 +15,6 @@ #include "setup.h" #include "strbuf.h" #include "worktree.h" -#include "wrapper.h" static const char *const builtin_config_usage[] = { N_("git config []"), diff --git a/builtin/credential-cache.c b/builtin/credential-cache.c index ff3a47badb..43b9d0e5b1 100644 --- a/builtin/credential-cache.c +++ b/builtin/credential-cache.c @@ -3,7 +3,6 @@ #include "parse-options.h" #include "path.h" #include "strbuf.h" -#include "wrapper.h" #include "write-or-die.h" #ifndef NO_UNIX_SOCKETS diff --git a/builtin/difftool.c b/builtin/difftool.c index e2c9ab7d5d..aeb0f92409 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -32,7 +32,6 @@ #include "dir.h" #include "entry.h" #include "setup.h" -#include "wrapper.h" static int trust_exit_code; diff --git a/builtin/fast-import.c b/builtin/fast-import.c index 2ee19c7373..4dbb10aff3 100644 --- a/builtin/fast-import.c +++ b/builtin/fast-import.c @@ -26,7 +26,6 @@ #include "commit-reach.h" #include "khash.h" #include "date.h" -#include "wrapper.h" #define PACK_ID_BITS 16 #define MAX_PACK_ID ((1<] [--log[=] | --no-log] [--file ]"), diff --git a/builtin/gc.c b/builtin/gc.c index 91eec7703a..19d73067aa 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -41,7 +41,6 @@ #include "hook.h" #include "setup.h" #include "trace2.h" -#include "wrapper.h" #define FAILED_RUN "failed to run %s" diff --git a/builtin/get-tar-commit-id.c b/builtin/get-tar-commit-id.c index 9303e386cc..20d0dfe9cf 100644 --- a/builtin/get-tar-commit-id.c +++ b/builtin/get-tar-commit-id.c @@ -5,7 +5,6 @@ #include "commit.h" #include "tar.h" #include "quote.h" -#include "wrapper.h" static const char builtin_get_tar_commit_id_usage[] = "git get-tar-commit-id"; diff --git a/builtin/index-pack.c b/builtin/index-pack.c index c1250b070f..f8e1308805 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -25,7 +25,6 @@ #include "replace-object.h" #include "promisor-remote.h" #include "setup.h" -#include "wrapper.h" static const char index_pack_usage[] = "git index-pack [-v] [-o ] [--keep | --keep=] [--[no-]rev-index] [--verify] [--strict] ( | --stdin [--fix-thin] [])"; diff --git a/builtin/init-db.c b/builtin/init-db.c index 0d8bd4d721..cb727c826f 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -13,7 +13,6 @@ #include "path.h" #include "setup.h" #include "strbuf.h" -#include "wrapper.h" static int guess_repository_type(const char *git_dir) { diff --git a/builtin/merge.c b/builtin/merge.c index 420e81008e..e381d5e501 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -53,7 +53,6 @@ #include "commit-reach.h" #include "wt-status.h" #include "commit-graph.h" -#include "wrapper.h" #define DEFAULT_TWOHEAD (1<<0) #define DEFAULT_OCTOPUS (1<<1) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 3c4db66478..0d3f70093d 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -43,7 +43,6 @@ #include "promisor-remote.h" #include "pack-mtimes.h" #include "parse-options.h" -#include "wrapper.h" /* * Objects we are going to pack are collected in the `to_pack` structure. diff --git a/builtin/rebase.c b/builtin/rebase.c index 91849f920f..15ce546565 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -37,7 +37,6 @@ #include "reset.h" #include "trace2.h" #include "hook.h" -#include "wrapper.h" static char const * const builtin_rebase_usage[] = { N_("git rebase [-i] [options] [--exec ] " diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 91caaf8706..f3c7c5f6cc 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -40,7 +40,6 @@ #include "worktree.h" #include "shallow.h" #include "parse-options.h" -#include "wrapper.h" static const char * const receive_pack_usage[] = { N_("git receive-pack "), diff --git a/builtin/rerere.c b/builtin/rerere.c index 0458db9cad..07a9d37275 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -6,7 +6,6 @@ #include "repository.h" #include "string-list.h" #include "rerere.h" -#include "wrapper.h" #include "xdiff/xdiff.h" #include "xdiff-interface.h" #include "pathspec.h" diff --git a/builtin/unpack-file.c b/builtin/unpack-file.c index 6842a6c499..c129e2bb6c 100644 --- a/builtin/unpack-file.c +++ b/builtin/unpack-file.c @@ -3,7 +3,6 @@ #include "hex.h" #include "object-name.h" #include "object-store-ll.h" -#include "wrapper.h" static char *create_temp_file(struct object_id *oid) { diff --git a/builtin/worktree.c b/builtin/worktree.c index 05dec7e330..33e76654ba 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -24,7 +24,6 @@ #include "submodule.h" #include "utf8.h" #include "worktree.h" -#include "wrapper.h" #include "quote.h" #define BUILTIN_WORKTREE_ADD_USAGE \ diff --git a/bulk-checkin.c b/bulk-checkin.c index e2f71db0f6..fec6816259 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -17,7 +17,6 @@ #include "packfile.h" #include "object-file.h" #include "object-store-ll.h" -#include "wrapper.h" static int odb_transaction_nesting; diff --git a/combine-diff.c b/combine-diff.c index 11e9d7494a..f90f442482 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -17,7 +17,6 @@ #include "userdiff.h" #include "oid-array.h" #include "revision.h" -#include "wrapper.h" static int compare_paths(const struct combine_diff_path *one, const struct diff_filespec *two) diff --git a/commit-graph.c b/commit-graph.c index f70afccada..38185c8529 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -26,7 +26,6 @@ #include "trace2.h" #include "tree.h" #include "chunk-format.h" -#include "wrapper.h" void git_test_write_commit_graph_or_die(void) { diff --git a/compat/terminal.c b/compat/terminal.c index d87e321189..83d95e8656 100644 --- a/compat/terminal.c +++ b/compat/terminal.c @@ -6,7 +6,6 @@ #include "run-command.h" #include "string-list.h" #include "hashmap.h" -#include "wrapper.h" #if defined(HAVE_DEV_TTY) || defined(GIT_WINDOWS_NATIVE) diff --git a/config.c b/config.c index 1cdad1e160..23aa1fcb00 100644 --- a/config.c +++ b/config.c @@ -39,7 +39,6 @@ #include "wildmatch.h" #include "worktree.h" #include "ws.h" -#include "wrapper.h" #include "write-or-die.h" struct config_source { diff --git a/convert.c b/convert.c index 3d8325d49e..4aef90a7b6 100644 --- a/convert.c +++ b/convert.c @@ -16,7 +16,6 @@ #include "trace.h" #include "utf8.h" #include "merge-ll.h" -#include "wrapper.h" /* * convert.c - convert a file when checking it out and checking it in. diff --git a/copy.c b/copy.c index 882c79cffb..23d84c6c1d 100644 --- a/copy.c +++ b/copy.c @@ -1,7 +1,6 @@ #include "git-compat-util.h" #include "copy.h" #include "path.h" -#include "wrapper.h" int copy_fd(int ifd, int ofd) { diff --git a/csum-file.c b/csum-file.c index daf9b06dff..cd01713244 100644 --- a/csum-file.c +++ b/csum-file.c @@ -11,7 +11,6 @@ #include "progress.h" #include "csum-file.h" #include "hash.h" -#include "wrapper.h" static void verify_buffer_or_die(struct hashfile *f, const void *buf, diff --git a/daemon.c b/daemon.c index 7139cc201d..3722edf46c 100644 --- a/daemon.c +++ b/daemon.c @@ -10,7 +10,6 @@ #include "setup.h" #include "strbuf.h" #include "string-list.h" -#include "wrapper.h" #ifdef NO_INITGROUPS #define initgroups(x, y) (0) /* nothing */ diff --git a/diff.c b/diff.c index 6fb2946a64..d487438d70 100644 --- a/diff.c +++ b/diff.c @@ -43,7 +43,6 @@ #include "setup.h" #include "strmap.h" #include "ws.h" -#include "wrapper.h" #ifdef NO_FAST_WORKING_DIRECTORY #define FAST_WORKING_DIRECTORY 0 diff --git a/dir.c b/dir.c index 3acac7beb1..d270a1be36 100644 --- a/dir.c +++ b/dir.c @@ -32,7 +32,6 @@ #include "symlinks.h" #include "trace2.h" #include "tree.h" -#include "wrapper.h" /* * Tells read_directory_recursive how a file or directory should be treated. diff --git a/editor.c b/editor.c index 38c5dbbb79..b67b802ddf 100644 --- a/editor.c +++ b/editor.c @@ -11,7 +11,6 @@ #include "strvec.h" #include "run-command.h" #include "sigchain.h" -#include "wrapper.h" #ifndef DEFAULT_EDITOR #define DEFAULT_EDITOR "vi" diff --git a/entry.c b/entry.c index f9a7c726a4..43767f9043 100644 --- a/entry.c +++ b/entry.c @@ -14,7 +14,6 @@ #include "fsmonitor.h" #include "entry.h" #include "parallel-checkout.h" -#include "wrapper.h" static void create_directories(const char *path, int path_len, const struct checkout *state) diff --git a/environment.c b/environment.c index 8128104373..a0d1d070d1 100644 --- a/environment.c +++ b/environment.c @@ -28,7 +28,6 @@ #include "setup.h" #include "shallow.h" #include "trace.h" -#include "wrapper.h" #include "write-or-die.h" int trust_executable_bit = 1; diff --git a/fetch-pack.c b/fetch-pack.c index a432eacab9..84a24ff9b1 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -34,7 +34,6 @@ #include "commit-graph.h" #include "sigchain.h" #include "mergesort.h" -#include "wrapper.h" static int transfer_unpack_limit = -1; static int fetch_unpack_limit = -1; diff --git a/gpg-interface.c b/gpg-interface.c index 19a3471a0b..cb171a853b 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -12,7 +12,6 @@ #include "sigchain.h" #include "tempfile.h" #include "alias.h" -#include "wrapper.h" static int git_gpg_config(const char *, const char *, void *); diff --git a/grep.c b/grep.c index ebcd647478..a3cc8224db 100644 --- a/grep.c +++ b/grep.c @@ -12,7 +12,6 @@ #include "commit.h" #include "quote.h" #include "help.h" -#include "wrapper.h" static int grep_source_load(struct grep_source *gs); static int grep_source_is_binary(struct grep_source *gs, diff --git a/http-backend.c b/http-backend.c index e1969c05dc..25a19c21b9 100644 --- a/http-backend.c +++ b/http-backend.c @@ -19,7 +19,6 @@ #include "object-store-ll.h" #include "protocol.h" #include "date.h" -#include "wrapper.h" #include "write-or-die.h" static const char content_type[] = "Content-Type"; diff --git a/imap-send.c b/imap-send.c index 7f5426177a..ee5b98467b 100644 --- a/imap-send.c +++ b/imap-send.c @@ -30,7 +30,6 @@ #include "parse-options.h" #include "setup.h" #include "strbuf.h" -#include "wrapper.h" #if defined(NO_OPENSSL) && !defined(HAVE_OPENSSL_CSPRNG) typedef void *SSL; #endif diff --git a/merge-ll.c b/merge-ll.c index 478983309d..d6dbef52fb 100644 --- a/merge-ll.c +++ b/merge-ll.c @@ -13,7 +13,6 @@ #include "merge-ll.h" #include "quote.h" #include "strbuf.h" -#include "wrapper.h" struct ll_merge_driver; diff --git a/merge-recursive.c b/merge-recursive.c index 43f6b2d036..6a4081bb0f 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -38,7 +38,6 @@ #include "tag.h" #include "tree-walk.h" #include "unpack-trees.h" -#include "wrapper.h" #include "xdiff-interface.h" struct merge_options_internal { diff --git a/notes-merge.c b/notes-merge.c index 071947894e..8799b522a5 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -20,7 +20,6 @@ #include "trace.h" #include "notes-utils.h" #include "commit-reach.h" -#include "wrapper.h" struct notes_merge_pair { struct object_id obj, base, local, remote; diff --git a/object-file.c b/object-file.c index 8d87720dd5..527b740018 100644 --- a/object-file.c +++ b/object-file.c @@ -44,7 +44,6 @@ #include "setup.h" #include "submodule.h" #include "fsck.h" -#include "wrapper.h" /* The maximum size for an object header. */ #define MAX_HEADER_LEN 32 diff --git a/pack-write.c b/pack-write.c index af48813a9b..b19ddf15b2 100644 --- a/pack-write.c +++ b/pack-write.c @@ -12,7 +12,6 @@ #include "pack-revindex.h" #include "path.h" #include "strbuf.h" -#include "wrapper.h" void reset_pack_idx_option(struct pack_idx_option *opts) { diff --git a/packfile.c b/packfile.c index c2e753ef8f..9126274b37 100644 --- a/packfile.c +++ b/packfile.c @@ -24,7 +24,6 @@ #include "commit-graph.h" #include "pack-revindex.h" #include "promisor-remote.h" -#include "wrapper.h" char *odb_pack_name(struct strbuf *buf, const unsigned char *hash, diff --git a/parallel-checkout.c b/parallel-checkout.c index 602fbf19d3..8637723461 100644 --- a/parallel-checkout.c +++ b/parallel-checkout.c @@ -15,7 +15,6 @@ #include "symlinks.h" #include "thread-utils.h" #include "trace2.h" -#include "wrapper.h" struct pc_worker { struct child_process cp; diff --git a/path.c b/path.c index c3b6618c77..e7c8007ddc 100644 --- a/path.c +++ b/path.c @@ -18,7 +18,6 @@ #include "object-store-ll.h" #include "lockfile.h" #include "exec-cmd.h" -#include "wrapper.h" static int get_st_mode_bits(const char *path, int *mode) { diff --git a/pkt-line.c b/pkt-line.c index 62b4208b66..6e4166132d 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -5,7 +5,6 @@ #include "hex.h" #include "run-command.h" #include "trace.h" -#include "wrapper.h" #include "write-or-die.h" char packet_buffer[LARGE_PACKET_MAX]; diff --git a/read-cache.c b/read-cache.c index b9a995e5a1..140b4f96a0 100644 --- a/read-cache.c +++ b/read-cache.c @@ -46,7 +46,6 @@ #include "csum-file.h" #include "promisor-remote.h" #include "hook.h" -#include "wrapper.h" /* Mask for the name length in ce_flags in the on-disk index */ diff --git a/rebase-interactive.c b/rebase-interactive.c index 852a331318..5e8c6cc975 100644 --- a/rebase-interactive.c +++ b/rebase-interactive.c @@ -11,7 +11,6 @@ #include "config.h" #include "dir.h" #include "object-name.h" -#include "wrapper.h" static const char edit_todo_list_advice[] = N_("You can fix this with 'git rebase --edit-todo' " diff --git a/refs.c b/refs.c index c029f64982..d5e0184ca5 100644 --- a/refs.c +++ b/refs.c @@ -30,7 +30,6 @@ #include "date.h" #include "commit.h" #include "wildmatch.h" -#include "wrapper.h" /* * List of all available backends diff --git a/rerere.c b/rerere.c index e2b8597f88..4227c9612a 100644 --- a/rerere.c +++ b/rerere.c @@ -20,7 +20,6 @@ #include "object-store-ll.h" #include "hash-lookup.h" #include "strmap.h" -#include "wrapper.h" #define RESOLVED 0 #define PUNTED 1 diff --git a/send-pack.c b/send-pack.c index 9510bef856..89aca9d829 100644 --- a/send-pack.c +++ b/send-pack.c @@ -15,7 +15,6 @@ #include "quote.h" #include "transport.h" #include "version.h" -#include "wrapper.h" #include "oid-array.h" #include "gpg-interface.h" #include "shallow.h" diff --git a/sequencer.c b/sequencer.c index 8dd5bdeb36..556bcabf90 100644 --- a/sequencer.c +++ b/sequencer.c @@ -49,7 +49,6 @@ #include "rebase-interactive.h" #include "reset.h" #include "branch.h" -#include "wrapper.h" #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION" diff --git a/server-info.c b/server-info.c index 382e481a2b..f350713ecf 100644 --- a/server-info.c +++ b/server-info.c @@ -14,7 +14,6 @@ #include "object-store-ll.h" #include "server-info.h" #include "strbuf.h" -#include "wrapper.h" struct update_info_ctx { FILE *cur_fp; diff --git a/setup.c b/setup.c index 188a07ed87..12a7932aa5 100644 --- a/setup.c +++ b/setup.c @@ -17,7 +17,6 @@ #include "quote.h" #include "trace2.h" #include "worktree.h" -#include "wrapper.h" static int inside_git_dir = -1; static int inside_work_tree = -1; diff --git a/shallow.c b/shallow.c index f3ef94d4c9..2fad3504b7 100644 --- a/shallow.c +++ b/shallow.c @@ -20,7 +20,6 @@ #include "shallow.h" #include "statinfo.h" #include "trace.h" -#include "wrapper.h" void set_alternate_shallow_file(struct repository *r, const char *path, int override) { diff --git a/strbuf.c b/strbuf.c index b7fd474a83..0158848dea 100644 --- a/strbuf.c +++ b/strbuf.c @@ -11,7 +11,6 @@ #include "string-list.h" #include "utf8.h" #include "date.h" -#include "wrapper.h" int starts_with(const char *str, const char *prefix) { diff --git a/streaming.c b/streaming.c index 49791ab958..10adf625b2 100644 --- a/streaming.c +++ b/streaming.c @@ -10,7 +10,6 @@ #include "object-store-ll.h" #include "replace-object.h" #include "packfile.h" -#include "wrapper.h" typedef int (*open_istream_fn)(struct git_istream *, struct repository *, diff --git a/t/helper/test-delta.c b/t/helper/test-delta.c index e7d134ec25..6bc787a474 100644 --- a/t/helper/test-delta.c +++ b/t/helper/test-delta.c @@ -11,7 +11,6 @@ #include "test-tool.h" #include "git-compat-util.h" #include "delta.h" -#include "wrapper.h" static const char usage_str[] = "test-tool delta (-d|-p) "; diff --git a/t/helper/test-fsmonitor-client.c b/t/helper/test-fsmonitor-client.c index 58d1dc5fc8..8280984d08 100644 --- a/t/helper/test-fsmonitor-client.c +++ b/t/helper/test-fsmonitor-client.c @@ -11,7 +11,6 @@ #include "setup.h" #include "thread-utils.h" #include "trace2.h" -#include "wrapper.h" #ifndef HAVE_FSMONITOR_DAEMON_BACKEND int cmd__fsmonitor_client(int argc UNUSED, const char **argv UNUSED) diff --git a/t/helper/test-read-cache.c b/t/helper/test-read-cache.c index 56c2d25f35..1acd362346 100644 --- a/t/helper/test-read-cache.c +++ b/t/helper/test-read-cache.c @@ -4,7 +4,6 @@ #include "read-cache-ll.h" #include "repository.h" #include "setup.h" -#include "wrapper.h" int cmd__read_cache(int argc, const char **argv) { diff --git a/tag.c b/tag.c index c5426484b2..fc3834db46 100644 --- a/tag.c +++ b/tag.c @@ -10,7 +10,6 @@ #include "gpg-interface.h" #include "hex.h" #include "packfile.h" -#include "wrapper.h" const char *tag_type = "tag"; diff --git a/tempfile.c b/tempfile.c index 50c377134c..423266e4c7 100644 --- a/tempfile.c +++ b/tempfile.c @@ -46,7 +46,6 @@ #include "path.h" #include "tempfile.h" #include "sigchain.h" -#include "wrapper.h" static VOLATILE_LIST_HEAD(tempfile_list); diff --git a/trace.c b/trace.c index 592c141d78..971a68abe8 100644 --- a/trace.c +++ b/trace.c @@ -27,7 +27,6 @@ #include "quote.h" #include "setup.h" #include "trace.h" -#include "wrapper.h" struct trace_key trace_default_key = { "GIT_TRACE", 0, 0, 0 }; struct trace_key trace_perf_key = TRACE_KEY_INIT(PERFORMANCE); diff --git a/transport-helper.c b/transport-helper.c index 5c0bc6a896..49811ef176 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -19,7 +19,6 @@ #include "refspec.h" #include "transport-internal.h" #include "protocol.h" -#include "wrapper.h" static int debug; diff --git a/transport.c b/transport.c index 4dc187a388..0a5794a944 100644 --- a/transport.c +++ b/transport.c @@ -30,7 +30,6 @@ #include "object-store-ll.h" #include "color.h" #include "bundle-uri.h" -#include "wrapper.h" static int transport_use_color = -1; static char transport_colors[][COLOR_MAXLEN] = { diff --git a/upload-pack.c b/upload-pack.c index 318b650b1e..05b3ef461f 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -32,7 +32,6 @@ #include "commit-graph.h" #include "commit-reach.h" #include "shallow.h" -#include "wrapper.h" #include "write-or-die.h" /* Remember to update object flag allocation in object.h */ diff --git a/usage.c b/usage.c index 46d99f8bd4..09f0ed509b 100644 --- a/usage.c +++ b/usage.c @@ -6,7 +6,6 @@ #include "git-compat-util.h" #include "gettext.h" #include "trace2.h" -#include "wrapper.h" static void vreportf(const char *prefix, const char *err, va_list params) { diff --git a/worktree.c b/worktree.c index b4b01340a0..3c547bf109 100644 --- a/worktree.c +++ b/worktree.c @@ -12,7 +12,6 @@ #include "dir.h" #include "wt-status.h" #include "config.h" -#include "wrapper.h" void free_worktrees(struct worktree **worktrees) { diff --git a/wrapper.c b/wrapper.c index 67f5f5dbe1..22be9812a7 100644 --- a/wrapper.c +++ b/wrapper.c @@ -9,7 +9,6 @@ #include "repository.h" #include "strbuf.h" #include "trace2.h" -#include "wrapper.h" static intmax_t count_fsync_writeout_only; static intmax_t count_fsync_hardware_flush; diff --git a/write-or-die.c b/write-or-die.c index cc9e0787a1..d8355c0c3e 100644 --- a/write-or-die.c +++ b/write-or-die.c @@ -1,7 +1,6 @@ #include "git-compat-util.h" #include "config.h" #include "run-command.h" -#include "wrapper.h" #include "write-or-die.h" /* From 91c080dff511b7a81f91d1cc79589b49e16a2b7a Mon Sep 17 00:00:00 2001 From: Calvin Wan Date: Wed, 5 Jul 2023 17:09:24 +0000 Subject: [PATCH 6/6] git-compat-util: move alloc macros to git-compat-util.h alloc_nr, ALLOC_GROW, and ALLOC_GROW_BY are commonly used macros for dynamic array allocation. Moving these macros to git-compat-util.h with the other alloc macros focuses alloc.[ch] to allocation for Git objects and additionally allows us to remove inclusions to alloc.h from files that solely used the above macros. Signed-off-by: Calvin Wan Signed-off-by: Junio C Hamano --- add-patch.c | 1 - alias.c | 1 - alloc.h | 75 ------------------------------ apply.c | 1 - archive-tar.c | 1 - archive.c | 1 - attr.c | 1 - builtin/blame.c | 1 - builtin/cat-file.c | 1 - builtin/checkout--worker.c | 1 - builtin/config.c | 1 - builtin/credential-cache--daemon.c | 1 - builtin/fetch-pack.c | 1 - builtin/fsmonitor--daemon.c | 1 - builtin/grep.c | 1 - builtin/index-pack.c | 1 - builtin/log.c | 1 - builtin/merge.c | 1 - builtin/mktree.c | 1 - builtin/mv.c | 1 - builtin/name-rev.c | 1 - builtin/pack-objects.c | 1 - builtin/repack.c | 1 - builtin/rev-parse.c | 1 - builtin/revert.c | 1 - builtin/rm.c | 1 - builtin/submodule--helper.c | 1 - bulk-checkin.c | 1 - cache-tree.c | 1 - chunk-format.c | 1 - commit-reach.c | 1 - config.c | 1 - daemon.c | 1 - delta-islands.c | 1 - diff.c | 1 - diffcore-rename.c | 1 - dir-iterator.c | 1 - dir.c | 1 - ewah/bitmap.c | 1 - ewah/ewah_bitmap.c | 1 - fetch-pack.c | 1 - fmt-merge-msg.c | 1 - fsck.c | 1 - git-compat-util.h | 75 ++++++++++++++++++++++++++++++ help.c | 1 - http-backend.c | 1 - line-log.c | 1 - list-objects-filter-options.c | 1 - list-objects-filter.c | 1 - midx.c | 1 - object-file.c | 1 - oid-array.c | 1 - oidtree.c | 1 - pack-bitmap-write.c | 1 - pack-bitmap.c | 1 - pack-objects.c | 1 - packfile.c | 1 - parallel-checkout.c | 1 - pretty.c | 1 - prio-queue.c | 1 - quote.c | 1 - read-cache.c | 1 - ref-filter.c | 1 - reflog-walk.c | 1 - refs.c | 1 - refspec.c | 1 - remote-curl.c | 1 - remote.c | 1 - rerere.c | 1 - revision.c | 1 - sequencer.c | 1 - server-info.c | 1 - shallow.c | 1 - sigchain.c | 1 - sparse-index.c | 1 - split-index.c | 1 - strbuf.c | 1 - string-list.c | 1 - strvec.c | 1 - submodule-config.c | 1 - submodule.c | 1 - t/helper/test-reach.c | 1 - trace2/tr2_tls.c | 1 - trailer.c | 1 - transport.c | 1 - tree-walk.c | 1 - userdiff.c | 1 - worktree.c | 1 - 88 files changed, 75 insertions(+), 161 deletions(-) diff --git a/add-patch.c b/add-patch.c index 53e3248295..f12cbe4166 100644 --- a/add-patch.c +++ b/add-patch.c @@ -1,7 +1,6 @@ #include "git-compat-util.h" #include "add-interactive.h" #include "advice.h" -#include "alloc.h" #include "editor.h" #include "environment.h" #include "gettext.h" diff --git a/alias.c b/alias.c index 54a1a23d2c..38e1339936 100644 --- a/alias.c +++ b/alias.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "alias.h" -#include "alloc.h" #include "config.h" #include "gettext.h" #include "strbuf.h" diff --git a/alloc.h b/alloc.h index 4312db4bd0..3f4a0ad310 100644 --- a/alloc.h +++ b/alloc.h @@ -17,79 +17,4 @@ void *alloc_object_node(struct repository *r); struct alloc_state *allocate_alloc_state(void); void clear_alloc_state(struct alloc_state *s); -#define alloc_nr(x) (((x)+16)*3/2) - -/** - * Dynamically growing an array using realloc() is error prone and boring. - * - * Define your array with: - * - * - a pointer (`item`) that points at the array, initialized to `NULL` - * (although please name the variable based on its contents, not on its - * type); - * - * - an integer variable (`alloc`) that keeps track of how big the current - * allocation is, initialized to `0`; - * - * - another integer variable (`nr`) to keep track of how many elements the - * array currently has, initialized to `0`. - * - * Then before adding `n`th element to the item, call `ALLOC_GROW(item, n, - * alloc)`. This ensures that the array can hold at least `n` elements by - * calling `realloc(3)` and adjusting `alloc` variable. - * - * ------------ - * sometype *item; - * size_t nr; - * size_t alloc - * - * for (i = 0; i < nr; i++) - * if (we like item[i] already) - * return; - * - * // we did not like any existing one, so add one - * ALLOC_GROW(item, nr + 1, alloc); - * item[nr++] = value you like; - * ------------ - * - * You are responsible for updating the `nr` variable. - * - * If you need to specify the number of elements to allocate explicitly - * then use the macro `REALLOC_ARRAY(item, alloc)` instead of `ALLOC_GROW`. - * - * Consider using ALLOC_GROW_BY instead of ALLOC_GROW as it has some - * added niceties. - * - * DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'. - */ -#define ALLOC_GROW(x, nr, alloc) \ - do { \ - if ((nr) > alloc) { \ - if (alloc_nr(alloc) < (nr)) \ - alloc = (nr); \ - else \ - alloc = alloc_nr(alloc); \ - REALLOC_ARRAY(x, alloc); \ - } \ - } while (0) - -/* - * Similar to ALLOC_GROW but handles updating of the nr value and - * zeroing the bytes of the newly-grown array elements. - * - * DO NOT USE any expression with side-effect for any of the - * arguments. - */ -#define ALLOC_GROW_BY(x, nr, increase, alloc) \ - do { \ - if (increase) { \ - size_t new_nr = nr + (increase); \ - if (new_nr < nr) \ - BUG("negative growth in ALLOC_GROW_BY"); \ - ALLOC_GROW(x, new_nr, alloc); \ - memset((x) + nr, 0, sizeof(*(x)) * (increase)); \ - nr = new_nr; \ - } \ - } while (0) - #endif diff --git a/apply.c b/apply.c index 99c2a91de7..6b9ce54f7d 100644 --- a/apply.c +++ b/apply.c @@ -9,7 +9,6 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "base85.h" #include "config.h" #include "object-store-ll.h" diff --git a/archive-tar.c b/archive-tar.c index fc06ff4c5d..704bf0612e 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -2,7 +2,6 @@ * Copyright (c) 2005, 2006 Rene Scharfe */ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "gettext.h" #include "git-zlib.h" diff --git a/archive.c b/archive.c index 1817cca9f4..ca11db185b 100644 --- a/archive.c +++ b/archive.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "convert.h" #include "environment.h" diff --git a/attr.c b/attr.c index 7d39ac4a29..e9c81b6e07 100644 --- a/attr.c +++ b/attr.c @@ -7,7 +7,6 @@ */ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "exec-cmd.h" diff --git a/builtin/blame.c b/builtin/blame.c index e811e7fbfb..9a3f9facea 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -6,7 +6,6 @@ */ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "color.h" #include "builtin.h" diff --git a/builtin/cat-file.c b/builtin/cat-file.c index ab8ac105e3..84d2e1de1e 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -5,7 +5,6 @@ */ #define USE_THE_INDEX_VARIABLE #include "builtin.h" -#include "alloc.h" #include "config.h" #include "convert.h" #include "diff.h" diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c index c655dc4b13..6b62b5375b 100644 --- a/builtin/checkout--worker.c +++ b/builtin/checkout--worker.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "config.h" #include "entry.h" #include "gettext.h" diff --git a/builtin/config.c b/builtin/config.c index e944b6bb7a..7e92ce66bf 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -1,6 +1,5 @@ #include "builtin.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "color.h" #include "editor.h" diff --git a/builtin/credential-cache--daemon.c b/builtin/credential-cache--daemon.c index dc1cf2d25f..3a6a750a8e 100644 --- a/builtin/credential-cache--daemon.c +++ b/builtin/credential-cache--daemon.c @@ -1,6 +1,5 @@ #include "builtin.h" #include "abspath.h" -#include "alloc.h" #include "gettext.h" #include "object-file.h" #include "parse-options.h" diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 3ba0fe5a39..44c05ee86c 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "gettext.h" #include "hex.h" #include "object-file.h" diff --git a/builtin/fsmonitor--daemon.c b/builtin/fsmonitor--daemon.c index 74d1d6a585..0194f1e263 100644 --- a/builtin/fsmonitor--daemon.c +++ b/builtin/fsmonitor--daemon.c @@ -1,6 +1,5 @@ #include "builtin.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/builtin/grep.c b/builtin/grep.c index 72e70b3a48..c60cf2007f 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -4,7 +4,6 @@ * Copyright (c) 2006 Junio C Hamano */ #include "builtin.h" -#include "alloc.h" #include "gettext.h" #include "hex.h" #include "repository.h" diff --git a/builtin/index-pack.c b/builtin/index-pack.c index f8e1308805..356410a9d4 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "config.h" #include "delta.h" #include "environment.h" diff --git a/builtin/log.c b/builtin/log.c index 89442dceda..38bd8df355 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -6,7 +6,6 @@ */ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/builtin/merge.c b/builtin/merge.c index e381d5e501..b2d5037dac 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -10,7 +10,6 @@ #include "builtin.h" #include "abspath.h" #include "advice.h" -#include "alloc.h" #include "config.h" #include "editor.h" #include "environment.h" diff --git a/builtin/mktree.c b/builtin/mktree.c index 0eea810c7e..9a22d4e277 100644 --- a/builtin/mktree.c +++ b/builtin/mktree.c @@ -4,7 +4,6 @@ * Copyright (c) Junio C Hamano, 2006, 2009 */ #include "builtin.h" -#include "alloc.h" #include "gettext.h" #include "hex.h" #include "quote.h" diff --git a/builtin/mv.c b/builtin/mv.c index ae462bd7d4..fa84fcb20d 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -7,7 +7,6 @@ #include "builtin.h" #include "abspath.h" #include "advice.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/builtin/name-rev.c b/builtin/name-rev.c index c3b722b36f..c706fa3720 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 0d3f70093d..eab9a4f9bb 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/repack.c b/builtin/repack.c index a96e1c2638..4afebfcbcf 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -1,5 +1,4 @@ #include "builtin.h" -#include "alloc.h" #include "config.h" #include "dir.h" #include "environment.h" diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 3e2ee44177..434646b074 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -6,7 +6,6 @@ #define USE_THE_INDEX_VARIABLE #include "builtin.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "commit.h" #include "environment.h" diff --git a/builtin/revert.c b/builtin/revert.c index f6f07d9b53..e6f9a1ad26 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "builtin.h" #include "parse-options.h" diff --git a/builtin/rm.c b/builtin/rm.c index 463eeabcea..dff819ae50 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -5,7 +5,6 @@ */ #define USE_THE_INDEX_VARIABLE #include "builtin.h" -#include "alloc.h" #include "advice.h" #include "config.h" #include "lockfile.h" diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 6321d7e9c9..76d126ff67 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1,7 +1,6 @@ #define USE_THE_INDEX_VARIABLE #include "builtin.h" #include "abspath.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/bulk-checkin.c b/bulk-checkin.c index fec6816259..73bff3a23d 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -2,7 +2,6 @@ * Copyright (c) 2011, Google Inc. */ #include "git-compat-util.h" -#include "alloc.h" #include "bulk-checkin.h" #include "environment.h" #include "gettext.h" diff --git a/cache-tree.c b/cache-tree.c index 84d7491420..641427ed41 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "environment.h" #include "hex.h" #include "lockfile.h" diff --git a/chunk-format.c b/chunk-format.c index e7d613c907..140dfa0dcc 100644 --- a/chunk-format.c +++ b/chunk-format.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "chunk-format.h" #include "csum-file.h" #include "gettext.h" diff --git a/commit-reach.c b/commit-reach.c index f15d84566b..4b7c233fd4 100644 --- a/commit-reach.c +++ b/commit-reach.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "commit.h" #include "commit-graph.h" #include "decorate.h" diff --git a/config.c b/config.c index 23aa1fcb00..b3e5cc8526 100644 --- a/config.c +++ b/config.c @@ -8,7 +8,6 @@ #include "git-compat-util.h" #include "abspath.h" #include "advice.h" -#include "alloc.h" #include "date.h" #include "branch.h" #include "config.h" diff --git a/daemon.c b/daemon.c index 3722edf46c..1edc9a8510 100644 --- a/daemon.c +++ b/daemon.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "path.h" diff --git a/delta-islands.c b/delta-islands.c index c824a5f6a4..332f0f7c45 100644 --- a/delta-islands.c +++ b/delta-islands.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "attr.h" #include "object.h" #include "blob.h" diff --git a/diff.c b/diff.c index d487438d70..150c1b8287 100644 --- a/diff.c +++ b/diff.c @@ -3,7 +3,6 @@ */ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "base85.h" #include "config.h" #include "convert.h" diff --git a/diffcore-rename.c b/diffcore-rename.c index 926b554bd5..5a6e2bcac7 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -3,7 +3,6 @@ * Copyright (C) 2005 Junio C Hamano */ #include "git-compat-util.h" -#include "alloc.h" #include "diff.h" #include "diffcore.h" #include "object-store-ll.h" diff --git a/dir-iterator.c b/dir-iterator.c index fb7c47f0e8..278b04243a 100644 --- a/dir-iterator.c +++ b/dir-iterator.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "dir.h" #include "iterator.h" #include "dir-iterator.h" diff --git a/dir.c b/dir.c index d270a1be36..c9dc69fc24 100644 --- a/dir.c +++ b/dir.c @@ -7,7 +7,6 @@ */ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "convert.h" #include "dir.h" diff --git a/ewah/bitmap.c b/ewah/bitmap.c index 12d6aa398e..7b525b1ecd 100644 --- a/ewah/bitmap.c +++ b/ewah/bitmap.c @@ -17,7 +17,6 @@ * along with this program; if not, see . */ #include "git-compat-util.h" -#include "alloc.h" #include "ewok.h" #define EWAH_MASK(x) ((eword_t)1 << (x % BITS_IN_EWORD)) diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c index c6d4ffc87c..8785cbc54a 100644 --- a/ewah/ewah_bitmap.c +++ b/ewah/ewah_bitmap.c @@ -17,7 +17,6 @@ * along with this program; if not, see . */ #include "git-compat-util.h" -#include "alloc.h" #include "ewok.h" #include "ewok_rlw.h" diff --git a/fetch-pack.c b/fetch-pack.c index 84a24ff9b1..6198f3adaf 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "repository.h" #include "config.h" #include "date.h" diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index 4da6c7a8bd..db2d305757 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "refs.h" diff --git a/fsck.c b/fsck.c index a219d6f2c0..2035c4e00b 100644 --- a/fsck.c +++ b/fsck.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "date.h" #include "dir.h" #include "hex.h" diff --git a/git-compat-util.h b/git-compat-util.h index 9d3c21acbb..0d0b42b253 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -1134,6 +1134,81 @@ static inline void move_array(void *dst, const void *src, size_t n, size_t size) #define FLEXPTR_ALLOC_STR(x, ptrname, str) \ FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str)) +#define alloc_nr(x) (((x)+16)*3/2) + +/** + * Dynamically growing an array using realloc() is error prone and boring. + * + * Define your array with: + * + * - a pointer (`item`) that points at the array, initialized to `NULL` + * (although please name the variable based on its contents, not on its + * type); + * + * - an integer variable (`alloc`) that keeps track of how big the current + * allocation is, initialized to `0`; + * + * - another integer variable (`nr`) to keep track of how many elements the + * array currently has, initialized to `0`. + * + * Then before adding `n`th element to the item, call `ALLOC_GROW(item, n, + * alloc)`. This ensures that the array can hold at least `n` elements by + * calling `realloc(3)` and adjusting `alloc` variable. + * + * ------------ + * sometype *item; + * size_t nr; + * size_t alloc + * + * for (i = 0; i < nr; i++) + * if (we like item[i] already) + * return; + * + * // we did not like any existing one, so add one + * ALLOC_GROW(item, nr + 1, alloc); + * item[nr++] = value you like; + * ------------ + * + * You are responsible for updating the `nr` variable. + * + * If you need to specify the number of elements to allocate explicitly + * then use the macro `REALLOC_ARRAY(item, alloc)` instead of `ALLOC_GROW`. + * + * Consider using ALLOC_GROW_BY instead of ALLOC_GROW as it has some + * added niceties. + * + * DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'. + */ +#define ALLOC_GROW(x, nr, alloc) \ + do { \ + if ((nr) > alloc) { \ + if (alloc_nr(alloc) < (nr)) \ + alloc = (nr); \ + else \ + alloc = alloc_nr(alloc); \ + REALLOC_ARRAY(x, alloc); \ + } \ + } while (0) + +/* + * Similar to ALLOC_GROW but handles updating of the nr value and + * zeroing the bytes of the newly-grown array elements. + * + * DO NOT USE any expression with side-effect for any of the + * arguments. + */ +#define ALLOC_GROW_BY(x, nr, increase, alloc) \ + do { \ + if (increase) { \ + size_t new_nr = nr + (increase); \ + if (new_nr < nr) \ + BUG("negative growth in ALLOC_GROW_BY"); \ + ALLOC_GROW(x, new_nr, alloc); \ + memset((x) + nr, 0, sizeof(*(x)) * (increase)); \ + nr = new_nr; \ + } \ + } while (0) + static inline char *xstrdup_or_null(const char *str) { return str ? xstrdup(str) : NULL; diff --git a/help.c b/help.c index 5d7637dce9..c81d43a5fa 100644 --- a/help.c +++ b/help.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "builtin.h" #include "exec-cmd.h" diff --git a/http-backend.c b/http-backend.c index 25a19c21b9..e24399ed10 100644 --- a/http-backend.c +++ b/http-backend.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "git-zlib.h" diff --git a/line-log.c b/line-log.c index 2eff914bf3..790ab73212 100644 --- a/line-log.c +++ b/line-log.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "line-range.h" #include "hex.h" #include "tag.h" diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c index 2a3b7881af..8a08b7af49 100644 --- a/list-objects-filter-options.c +++ b/list-objects-filter-options.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "commit.h" #include "config.h" #include "gettext.h" diff --git a/list-objects-filter.c b/list-objects-filter.c index e075a66c99..9327ccd505 100644 --- a/list-objects-filter.c +++ b/list-objects-filter.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "dir.h" #include "gettext.h" #include "hex.h" diff --git a/midx.c b/midx.c index db459e448b..3a16acabbc 100644 --- a/midx.c +++ b/midx.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "csum-file.h" #include "dir.h" diff --git a/object-file.c b/object-file.c index 527b740018..5ebe1b00c5 100644 --- a/object-file.c +++ b/object-file.c @@ -8,7 +8,6 @@ */ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "convert.h" #include "environment.h" diff --git a/oid-array.c b/oid-array.c index e8228c777b..8e4717746c 100644 --- a/oid-array.c +++ b/oid-array.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "oid-array.h" #include "hash-lookup.h" diff --git a/oidtree.c b/oidtree.c index 7d57b7b19e..daef175dc7 100644 --- a/oidtree.c +++ b/oidtree.c @@ -4,7 +4,6 @@ */ #include "git-compat-util.h" #include "oidtree.h" -#include "alloc.h" #include "hash.h" struct oidtree_iter_data { diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index d86f4e739a..f6757c3cbf 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/pack-bitmap.c b/pack-bitmap.c index 7367f62bb6..01fbc0a657 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "commit.h" #include "gettext.h" #include "hex.h" diff --git a/pack-objects.c b/pack-objects.c index ccab09fe65..1b8052bece 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "object.h" #include "pack.h" #include "pack-objects.h" diff --git a/packfile.c b/packfile.c index 9126274b37..030b7ec7a8 100644 --- a/packfile.c +++ b/packfile.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/parallel-checkout.c b/parallel-checkout.c index 8637723461..b5a714c711 100644 --- a/parallel-checkout.c +++ b/parallel-checkout.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "entry.h" #include "gettext.h" diff --git a/pretty.c b/pretty.c index 2cf2cbbd03..d8407df047 100644 --- a/pretty.c +++ b/pretty.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "commit.h" #include "environment.h" diff --git a/prio-queue.c b/prio-queue.c index dc2476be53..450775a374 100644 --- a/prio-queue.c +++ b/prio-queue.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "prio-queue.h" static inline int compare(struct prio_queue *queue, int i, int j) diff --git a/quote.c b/quote.c index 43c739671e..3c05194496 100644 --- a/quote.c +++ b/quote.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "path.h" #include "quote.h" #include "strbuf.h" diff --git a/read-cache.c b/read-cache.c index 140b4f96a0..53d71134e2 100644 --- a/read-cache.c +++ b/read-cache.c @@ -4,7 +4,6 @@ * Copyright (C) Linus Torvalds, 2005 */ #include "git-compat-util.h" -#include "alloc.h" #include "bulk-checkin.h" #include "config.h" #include "date.h" diff --git a/ref-filter.c b/ref-filter.c index e0d03a9f8e..2ed0ecf260 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "gpg-interface.h" diff --git a/reflog-walk.c b/reflog-walk.c index d337e64431..d216f6f966 100644 --- a/reflog-walk.c +++ b/reflog-walk.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "commit.h" #include "refs.h" #include "diff.h" diff --git a/refs.c b/refs.c index d5e0184ca5..c1b3d1f13f 100644 --- a/refs.c +++ b/refs.c @@ -4,7 +4,6 @@ #include "git-compat-util.h" #include "advice.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "hashmap.h" diff --git a/refspec.c b/refspec.c index 57f6c2aaf9..d60932f4de 100644 --- a/refspec.c +++ b/refspec.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "gettext.h" #include "hash.h" #include "hex.h" diff --git a/remote-curl.c b/remote-curl.c index acf7b2bb40..8a976a0253 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/remote.c b/remote.c index a81f2e2f17..90f3e08b0d 100644 --- a/remote.c +++ b/remote.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/rerere.c b/rerere.c index 4227c9612a..7070f75014 100644 --- a/rerere.c +++ b/rerere.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "config.h" #include "copy.h" #include "gettext.h" diff --git a/revision.c b/revision.c index 84768565ce..985b8b2f51 100644 --- a/revision.c +++ b/revision.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/sequencer.c b/sequencer.c index 556bcabf90..2cc8fa0fbe 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1,7 +1,6 @@ #include "git-compat-util.h" #include "abspath.h" #include "advice.h" -#include "alloc.h" #include "config.h" #include "copy.h" #include "environment.h" diff --git a/server-info.c b/server-info.c index f350713ecf..e2fe0f9143 100644 --- a/server-info.c +++ b/server-info.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "dir.h" #include "environment.h" #include "hex.h" diff --git a/shallow.c b/shallow.c index 2fad3504b7..5413719fd4 100644 --- a/shallow.c +++ b/shallow.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "hex.h" #include "repository.h" #include "tempfile.h" diff --git a/sigchain.c b/sigchain.c index ee778c0580..66123bdbab 100644 --- a/sigchain.c +++ b/sigchain.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "sigchain.h" #define SIGCHAIN_MAX_SIGNALS 32 diff --git a/sparse-index.c b/sparse-index.c index 90d0462256..1fdb07a9e6 100644 --- a/sparse-index.c +++ b/sparse-index.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "name-hash.h" diff --git a/split-index.c b/split-index.c index 0ee3865a55..8c38687c04 100644 --- a/split-index.c +++ b/split-index.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "gettext.h" #include "hash.h" #include "mem-pool.h" diff --git a/strbuf.c b/strbuf.c index 0158848dea..5d06ff026e 100644 --- a/strbuf.c +++ b/strbuf.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "hex.h" diff --git a/string-list.c b/string-list.c index 0f8ac117fd..954569f381 100644 --- a/string-list.c +++ b/string-list.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "string-list.h" -#include "alloc.h" void string_list_init_nodup(struct string_list *list) { diff --git a/strvec.c b/strvec.c index 17d54b6c3b..89dc9e7e75 100644 --- a/strvec.c +++ b/strvec.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "strvec.h" -#include "alloc.h" #include "hex.h" #include "strbuf.h" diff --git a/submodule-config.c b/submodule-config.c index 515ff5bba4..3b49ec13ea 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "dir.h" #include "environment.h" #include "gettext.h" diff --git a/submodule.c b/submodule.c index f0f8788d2e..e603a19a87 100644 --- a/submodule.c +++ b/submodule.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "repository.h" #include "config.h" #include "submodule-config.h" diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c index 5b6f217441..119f4908cf 100644 --- a/t/helper/test-reach.c +++ b/t/helper/test-reach.c @@ -1,5 +1,4 @@ #include "test-tool.h" -#include "alloc.h" #include "commit.h" #include "commit-reach.h" #include "config.h" diff --git a/trace2/tr2_tls.c b/trace2/tr2_tls.c index 9f46ae12f5..601c9e5036 100644 --- a/trace2/tr2_tls.c +++ b/trace2/tr2_tls.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "thread-utils.h" #include "trace.h" #include "trace2/tr2_tls.h" diff --git a/trailer.c b/trailer.c index a2c3ed6f28..2170e01f6a 100644 --- a/trailer.c +++ b/trailer.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "gettext.h" diff --git a/transport.c b/transport.c index 0a5794a944..219af8fd50 100644 --- a/transport.c +++ b/transport.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "advice.h" -#include "alloc.h" #include "config.h" #include "environment.h" #include "hex.h" diff --git a/tree-walk.c b/tree-walk.c index 42ed86ef58..6c07913f3f 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "tree-walk.h" -#include "alloc.h" #include "dir.h" #include "gettext.h" #include "hex.h" diff --git a/userdiff.c b/userdiff.c index 664c7c1402..e399543823 100644 --- a/userdiff.c +++ b/userdiff.c @@ -1,5 +1,4 @@ #include "git-compat-util.h" -#include "alloc.h" #include "config.h" #include "userdiff.h" #include "attr.h" diff --git a/worktree.c b/worktree.c index 3c547bf109..2e7cd64509 100644 --- a/worktree.c +++ b/worktree.c @@ -1,6 +1,5 @@ #include "git-compat-util.h" #include "abspath.h" -#include "alloc.h" #include "environment.h" #include "gettext.h" #include "path.h"