static int bitflip_filter_apply( git_filter *self, void **payload, git_buf *to, const git_buf *from, const git_filter_source *source) { const unsigned char *src = (const unsigned char *)from->ptr; unsigned char *dst; size_t i; GIT_UNUSED(self); GIT_UNUSED(payload); /* verify that attribute path match worked as expected */ cl_assert_equal_i( 0, git__strncmp("hero", git_filter_source_path(source), 4)); if (!from->size) return 0; cl_git_pass(git_buf_grow(to, from->size)); dst = (unsigned char *)to->ptr; for (i = 0; i < from->size; i++) dst[i] = VERY_SECURE_ENCRYPTION(src[i]); to->size = from->size; return 0; }
int git_reference__read_head( git_reference **out, git_repository *repo, const char *path) { git_buf reference = GIT_BUF_INIT; char *name = NULL; int error; if ((error = git_futils_readbuffer(&reference, path)) < 0) goto out; git_buf_rtrim(&reference); if (git__strncmp(reference.ptr, GIT_SYMREF, strlen(GIT_SYMREF)) == 0) { git_buf_consume(&reference, reference.ptr + strlen(GIT_SYMREF)); name = git_path_basename(path); if ((*out = git_reference__alloc_symbolic(name, reference.ptr)) == NULL) { error = -1; goto out; } } else { if ((error = git_reference_lookup(out, repo, reference.ptr)) < 0) goto out; } out: git__free(name); git_buf_free(&reference); return error; }
static int reverse_filter_apply( git_filter *self, void **payload, git_buf *to, const git_buf *from, const git_filter_source *source) { const unsigned char *src = (const unsigned char *)from->ptr; const unsigned char *end = src + from->size; unsigned char *dst; GIT_UNUSED(self); GIT_UNUSED(payload); GIT_UNUSED(source); /* verify that attribute path match worked as expected */ cl_assert_equal_i( 0, git__strncmp("hero", git_filter_source_path(source), 4)); if (!from->size) return 0; cl_git_pass(git_buf_grow(to, from->size)); dst = (unsigned char *)to->ptr + from->size - 1; while (src < end) *dst-- = *src++; to->size = from->size; return 0; }
static const char *rebase_onto_name(const git_annotated_commit *onto) { if (onto->ref_name && git__strncmp(onto->ref_name, "refs/heads/", 11) == 0) return onto->ref_name + 11; else if (onto->ref_name) return onto->ref_name; else return onto->id_str; }