mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 16:06:02 +00:00
Fix various cross-platform build issues
This fixes a number of warnings and problems with cross-platform builds. Among other things, it's not safe to name a member of a structure "strcmp" because that may be #defined.
This commit is contained in:
parent
8064ecba23
commit
0f3def715d
@ -2,7 +2,8 @@ default: all
|
|||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS += -g
|
CFLAGS += -g
|
||||||
CFLAGS += -I../../include -L../../build -L../.. -lgit2 -lpthread
|
CFLAGS += -I../../include
|
||||||
|
LDFLAGS += -L../../build -L../.. -lgit2 -lpthread
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
git2.o \
|
git2.o \
|
||||||
@ -12,4 +13,4 @@ OBJECTS = \
|
|||||||
index-pack.o
|
index-pack.o
|
||||||
|
|
||||||
all: $(OBJECTS)
|
all: $(OBJECTS)
|
||||||
$(CC) $(CFLAGS) -o git2 $(OBJECTS)
|
$(CC) $(CFLAGS) $(LDFLAGS) -o git2 $(OBJECTS)
|
||||||
|
@ -22,12 +22,14 @@ static void print_progress(const progress_data *pd)
|
|||||||
? (100 * pd->completed_steps) / pd->total_steps
|
? (100 * pd->completed_steps) / pd->total_steps
|
||||||
: 0.f;
|
: 0.f;
|
||||||
int kbytes = pd->fetch_progress.received_bytes / 1024;
|
int kbytes = pd->fetch_progress.received_bytes / 1024;
|
||||||
printf("net %3d%% (%4d kb, %5d/%5d) / idx %3d%% (%5d/%5d) / chk %3d%% (%4lu/%4lu) %s\n",
|
|
||||||
network_percent, kbytes,
|
printf("net %3d%% (%4d kb, %5d/%5d) / idx %3d%% (%5d/%5d) / chk %3d%% (%4" PRIuZ "/%4" PRIuZ ") %s\n",
|
||||||
pd->fetch_progress.received_objects, pd->fetch_progress.total_objects,
|
network_percent, kbytes,
|
||||||
index_percent, pd->fetch_progress.indexed_objects, pd->fetch_progress.total_objects,
|
pd->fetch_progress.received_objects, pd->fetch_progress.total_objects,
|
||||||
checkout_percent, pd->completed_steps, pd->total_steps,
|
index_percent, pd->fetch_progress.indexed_objects, pd->fetch_progress.total_objects,
|
||||||
pd->path);
|
checkout_percent,
|
||||||
|
pd->completed_steps, pd->total_steps,
|
||||||
|
pd->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fetch_progress(const git_transfer_progress *stats, void *payload)
|
static void fetch_progress(const git_transfer_progress *stats, void *payload)
|
||||||
@ -47,13 +49,15 @@ static void checkout_progress(const char *path, size_t cur, size_t tot, void *pa
|
|||||||
|
|
||||||
int do_clone(git_repository *repo, int argc, char **argv)
|
int do_clone(git_repository *repo, int argc, char **argv)
|
||||||
{
|
{
|
||||||
progress_data pd = {0};
|
progress_data pd;
|
||||||
git_repository *cloned_repo = NULL;
|
git_repository *cloned_repo = NULL;
|
||||||
git_checkout_opts checkout_opts = {0};
|
git_checkout_opts checkout_opts;
|
||||||
const char *url = argv[1];
|
const char *url = argv[1];
|
||||||
const char *path = argv[2];
|
const char *path = argv[2];
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
(void)repo; // unused
|
||||||
|
|
||||||
// Validate args
|
// Validate args
|
||||||
if (argc < 3) {
|
if (argc < 3) {
|
||||||
printf ("USAGE: %s <url> <path>\n", argv[0]);
|
printf ("USAGE: %s <url> <path>\n", argv[0]);
|
||||||
@ -61,8 +65,10 @@ int do_clone(git_repository *repo, int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set up options
|
// Set up options
|
||||||
checkout_opts.checkout_strategy = GIT_CHECKOUT_CREATE_MISSING;
|
memset(&checkout_opts, 0, sizeof(checkout_opts));
|
||||||
|
checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
||||||
checkout_opts.progress_cb = checkout_progress;
|
checkout_opts.progress_cb = checkout_progress;
|
||||||
|
memset(&pd, 0, sizeof(pd));
|
||||||
checkout_opts.progress_payload = &pd;
|
checkout_opts.progress_payload = &pd;
|
||||||
|
|
||||||
// Do the clone
|
// Do the clone
|
||||||
|
@ -12,4 +12,13 @@ int fetch(git_repository *repo, int argc, char **argv);
|
|||||||
int index_pack(git_repository *repo, int argc, char **argv);
|
int index_pack(git_repository *repo, int argc, char **argv);
|
||||||
int do_clone(git_repository *repo, int argc, char **argv);
|
int do_clone(git_repository *repo, int argc, char **argv);
|
||||||
|
|
||||||
|
#ifndef PRIuZ
|
||||||
|
/* Define the printf format specifer to use for size_t output */
|
||||||
|
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||||
|
# define PRIuZ "Iu"
|
||||||
|
#else
|
||||||
|
# define PRIuZ "zu"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __COMMON_H__ */
|
#endif /* __COMMON_H__ */
|
||||||
|
@ -103,9 +103,9 @@ int fetch(git_repository *repo, int argc, char **argv)
|
|||||||
usleep(10000);
|
usleep(10000);
|
||||||
|
|
||||||
if (stats->total_objects > 0)
|
if (stats->total_objects > 0)
|
||||||
printf("Received %d/%d objects (%d) in %d bytes\r",
|
printf("Received %d/%d objects (%d) in %" PRIuZ " bytes\r",
|
||||||
stats->received_objects, stats->total_objects,
|
stats->received_objects, stats->total_objects,
|
||||||
stats->indexed_objects, stats->received_bytes);
|
stats->indexed_objects, stats->received_bytes);
|
||||||
} while (!data.finished);
|
} while (!data.finished);
|
||||||
|
|
||||||
if (data.ret < 0)
|
if (data.ret < 0)
|
||||||
|
@ -124,16 +124,20 @@ typedef enum {
|
|||||||
/** Only update existing files, don't create new ones */
|
/** Only update existing files, don't create new ones */
|
||||||
GIT_CHECKOUT_UPDATE_ONLY = (1u << 6),
|
GIT_CHECKOUT_UPDATE_ONLY = (1u << 6),
|
||||||
|
|
||||||
/** Allow checkout to skip unmerged files */
|
/**
|
||||||
|
* THE FOLLOWING OPTIONS ARE NOT YET IMPLEMENTED
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Allow checkout to skip unmerged files (NOT IMPLEMENTED) */
|
||||||
GIT_CHECKOUT_SKIP_UNMERGED = (1u << 10),
|
GIT_CHECKOUT_SKIP_UNMERGED = (1u << 10),
|
||||||
/** For unmerged files, checkout stage 2 from index */
|
/** For unmerged files, checkout stage 2 from index (NOT IMPLEMENTED) */
|
||||||
GIT_CHECKOUT_USE_OURS = (1u << 11),
|
GIT_CHECKOUT_USE_OURS = (1u << 11),
|
||||||
/** For unmerged files, checkout stage 3 from index */
|
/** For unmerged files, checkout stage 3 from index (NOT IMPLEMENTED) */
|
||||||
GIT_CHECKOUT_USE_THEIRS = (1u << 12),
|
GIT_CHECKOUT_USE_THEIRS = (1u << 12),
|
||||||
|
|
||||||
/** Recursively checkout submodule with same options */
|
/** Recursively checkout submodules with same options (NOT IMPLEMENTED) */
|
||||||
GIT_CHECKOUT_UPDATE_SUBMODULES = (1u << 16),
|
GIT_CHECKOUT_UPDATE_SUBMODULES = (1u << 16),
|
||||||
/** Recursively checkout submodules only if HEAD moved in super repo */
|
/** Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED) */
|
||||||
GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17),
|
GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED = (1u << 17),
|
||||||
|
|
||||||
} git_checkout_strategy_t;
|
} git_checkout_strategy_t;
|
||||||
|
@ -449,7 +449,7 @@ static int checkout_get_actions(
|
|||||||
if ((diff->opts.flags & GIT_DIFF_DELTAS_ARE_ICASE) != 0 &&
|
if ((diff->opts.flags & GIT_DIFF_DELTAS_ARE_ICASE) != 0 &&
|
||||||
!hiter->ignore_case &&
|
!hiter->ignore_case &&
|
||||||
(error = git_iterator_spoolandsort(
|
(error = git_iterator_spoolandsort(
|
||||||
&hiter, hiter, diff->entrycmp, true)) < 0)
|
&hiter, hiter, diff->entrycomp, true)) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if ((error = git_iterator_current(hiter, &he)) < 0)
|
if ((error = git_iterator_current(hiter, &he)) < 0)
|
||||||
@ -470,8 +470,8 @@ static int checkout_get_actions(
|
|||||||
/* try to track HEAD entries parallel to deltas */
|
/* try to track HEAD entries parallel to deltas */
|
||||||
while (he) {
|
while (he) {
|
||||||
cmp = S_ISDIR(delta->new_file.mode) ?
|
cmp = S_ISDIR(delta->new_file.mode) ?
|
||||||
diff->prefixcmp(he->path, delta->new_file.path) :
|
diff->pfxcomp(he->path, delta->new_file.path) :
|
||||||
diff->strcmp(he->path, delta->old_file.path);
|
diff->strcomp(he->path, delta->old_file.path);
|
||||||
if (cmp >= 0)
|
if (cmp >= 0)
|
||||||
break;
|
break;
|
||||||
if (git_iterator_advance(hiter, &he) < 0)
|
if (git_iterator_advance(hiter, &he) < 0)
|
||||||
|
30
src/diff.c
30
src/diff.c
@ -528,7 +528,7 @@ static bool entry_is_prefixed(
|
|||||||
{
|
{
|
||||||
size_t pathlen;
|
size_t pathlen;
|
||||||
|
|
||||||
if (!prefix_item || diff->prefixcmp(prefix_item->path, item->path))
|
if (!prefix_item || diff->pfxcomp(prefix_item->path, item->path))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pathlen = strlen(item->path);
|
pathlen = strlen(item->path);
|
||||||
@ -551,17 +551,17 @@ static int diff_list_init_from_iterators(
|
|||||||
if (!old_iter->ignore_case && !new_iter->ignore_case) {
|
if (!old_iter->ignore_case && !new_iter->ignore_case) {
|
||||||
diff->opts.flags &= ~GIT_DIFF_DELTAS_ARE_ICASE;
|
diff->opts.flags &= ~GIT_DIFF_DELTAS_ARE_ICASE;
|
||||||
|
|
||||||
diff->strcmp = strcmp;
|
diff->strcomp = strcmp;
|
||||||
diff->strncmp = strncmp;
|
diff->strncomp = strncmp;
|
||||||
diff->prefixcmp = git__prefixcmp;
|
diff->pfxcomp = git__prefixcmp;
|
||||||
diff->entrycmp = git_index_entry__cmp;
|
diff->entrycomp = git_index_entry__cmp;
|
||||||
} else {
|
} else {
|
||||||
diff->opts.flags |= GIT_DIFF_DELTAS_ARE_ICASE;
|
diff->opts.flags |= GIT_DIFF_DELTAS_ARE_ICASE;
|
||||||
|
|
||||||
diff->strcmp = strcasecmp;
|
diff->strcomp = strcasecmp;
|
||||||
diff->strncmp = strncasecmp;
|
diff->strncomp = strncasecmp;
|
||||||
diff->prefixcmp = git__prefixcmp_icase;
|
diff->pfxcomp = git__prefixcmp_icase;
|
||||||
diff->entrycmp = git_index_entry__cmp_icase;
|
diff->entrycomp = git_index_entry__cmp_icase;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -592,12 +592,12 @@ static int diff_from_iterators(
|
|||||||
* merge join to the other iterator that is icase sorted */
|
* merge join to the other iterator that is icase sorted */
|
||||||
if (!old_iter->ignore_case &&
|
if (!old_iter->ignore_case &&
|
||||||
git_iterator_spoolandsort(
|
git_iterator_spoolandsort(
|
||||||
&old_iter, old_iter, diff->entrycmp, true) < 0)
|
&old_iter, old_iter, diff->entrycomp, true) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!new_iter->ignore_case &&
|
if (!new_iter->ignore_case &&
|
||||||
git_iterator_spoolandsort(
|
git_iterator_spoolandsort(
|
||||||
&new_iter, new_iter, diff->entrycmp, true) < 0)
|
&new_iter, new_iter, diff->entrycomp, true) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,7 +609,7 @@ static int diff_from_iterators(
|
|||||||
while (oitem || nitem) {
|
while (oitem || nitem) {
|
||||||
|
|
||||||
/* create DELETED records for old items not matched in new */
|
/* create DELETED records for old items not matched in new */
|
||||||
if (oitem && (!nitem || diff->entrycmp(oitem, nitem) < 0)) {
|
if (oitem && (!nitem || diff->entrycomp(oitem, nitem) < 0)) {
|
||||||
if (diff_delta__from_one(diff, GIT_DELTA_DELETED, oitem) < 0)
|
if (diff_delta__from_one(diff, GIT_DELTA_DELETED, oitem) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
@ -634,12 +634,12 @@ static int diff_from_iterators(
|
|||||||
/* create ADDED, TRACKED, or IGNORED records for new items not
|
/* create ADDED, TRACKED, or IGNORED records for new items not
|
||||||
* matched in old (and/or descend into directories as needed)
|
* matched in old (and/or descend into directories as needed)
|
||||||
*/
|
*/
|
||||||
else if (nitem && (!oitem || diff->entrycmp(oitem, nitem) > 0)) {
|
else if (nitem && (!oitem || diff->entrycomp(oitem, nitem) > 0)) {
|
||||||
git_delta_t delta_type = GIT_DELTA_UNTRACKED;
|
git_delta_t delta_type = GIT_DELTA_UNTRACKED;
|
||||||
|
|
||||||
/* check if contained in ignored parent directory */
|
/* check if contained in ignored parent directory */
|
||||||
if (git_buf_len(&ignore_prefix) &&
|
if (git_buf_len(&ignore_prefix) &&
|
||||||
diff->prefixcmp(nitem->path, git_buf_cstr(&ignore_prefix)) == 0)
|
diff->pfxcomp(nitem->path, git_buf_cstr(&ignore_prefix)) == 0)
|
||||||
delta_type = GIT_DELTA_IGNORED;
|
delta_type = GIT_DELTA_IGNORED;
|
||||||
|
|
||||||
if (S_ISDIR(nitem->mode)) {
|
if (S_ISDIR(nitem->mode)) {
|
||||||
@ -730,7 +730,7 @@ static int diff_from_iterators(
|
|||||||
* (or ADDED and DELETED pair if type changed)
|
* (or ADDED and DELETED pair if type changed)
|
||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
assert(oitem && nitem && diff->entrycmp(oitem, nitem) == 0);
|
assert(oitem && nitem && diff->entrycomp(oitem, nitem) == 0);
|
||||||
|
|
||||||
if (maybe_modified(old_iter, oitem, new_iter, nitem, diff) < 0 ||
|
if (maybe_modified(old_iter, oitem, new_iter, nitem, diff) < 0 ||
|
||||||
git_iterator_advance(old_iter, &oitem) < 0 ||
|
git_iterator_advance(old_iter, &oitem) < 0 ||
|
||||||
|
@ -42,10 +42,10 @@ struct git_diff_list {
|
|||||||
git_iterator_type_t new_src;
|
git_iterator_type_t new_src;
|
||||||
uint32_t diffcaps;
|
uint32_t diffcaps;
|
||||||
|
|
||||||
int (*strcmp)(const char *, const char *);
|
int (*strcomp)(const char *, const char *);
|
||||||
int (*strncmp)(const char *, const char *, size_t);
|
int (*strncomp)(const char *, const char *, size_t);
|
||||||
int (*prefixcmp)(const char *str, const char *pfx);
|
int (*pfxcomp)(const char *str, const char *pfx);
|
||||||
int (*entrycmp)(const void *a, const void *b);
|
int (*entrycomp)(const void *a, const void *b);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void git_diff__cleanup_modes(
|
extern void git_diff__cleanup_modes(
|
||||||
|
@ -120,7 +120,7 @@ static int diff_delta_is_binary_by_attr(
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
mirror_new = (delta->new_file.path == delta->old_file.path ||
|
mirror_new = (delta->new_file.path == delta->old_file.path ||
|
||||||
strcmp(delta->new_file.path, delta->old_file.path) == 0);
|
ctxt->diff->strcomp(delta->new_file.path, delta->old_file.path) == 0);
|
||||||
if (mirror_new)
|
if (mirror_new)
|
||||||
delta->new_file.flags |= (delta->old_file.flags & KNOWN_BINARY_FLAGS);
|
delta->new_file.flags |= (delta->old_file.flags & KNOWN_BINARY_FLAGS);
|
||||||
else
|
else
|
||||||
@ -1002,7 +1002,7 @@ static int print_compact(
|
|||||||
git_buf_clear(pi->buf);
|
git_buf_clear(pi->buf);
|
||||||
|
|
||||||
if (delta->old_file.path != delta->new_file.path &&
|
if (delta->old_file.path != delta->new_file.path &&
|
||||||
strcmp(delta->old_file.path,delta->new_file.path) != 0)
|
pi->diff->strcomp(delta->old_file.path,delta->new_file.path) != 0)
|
||||||
git_buf_printf(pi->buf, "%c\t%s%c -> %s%c\n", code,
|
git_buf_printf(pi->buf, "%c\t%s%c -> %s%c\n", code,
|
||||||
delta->old_file.path, old_suffix, delta->new_file.path, new_suffix);
|
delta->old_file.path, old_suffix, delta->new_file.path, new_suffix);
|
||||||
else if (delta->old_file.mode != delta->new_file.mode &&
|
else if (delta->old_file.mode != delta->new_file.mode &&
|
||||||
|
Loading…
Reference in New Issue
Block a user