mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 17:12:51 +00:00
index.c: Move to new error handling mechanism
This commit is contained in:
parent
ec9edd5657
commit
d320c52d3b
41
src/index.c
41
src/index.c
@ -411,7 +411,7 @@ static int index_init_entry(git_index_entry *entry, git_index *index, const char
|
||||
|
||||
/* write the blob to disk and get the oid */
|
||||
if ((error = git_blob_create_fromfile(&entry->oid, index->repository, rel_path)) < GIT_SUCCESS)
|
||||
return error;
|
||||
return git__rethrow(error, "Failed to initialize index entry");
|
||||
|
||||
entry->flags |= (stage << GIT_IDXENTRY_STAGESHIFT);
|
||||
entry->path = (char *)rel_path; /* do not duplicate; index_insert already does this */
|
||||
@ -424,7 +424,7 @@ int git_index_add(git_index *index, const char *path, int stage)
|
||||
git_index_entry entry;
|
||||
|
||||
if ((error = index_init_entry(&entry, index, path, stage)) < GIT_SUCCESS)
|
||||
return error;
|
||||
return git__rethrow(error, "Failed to add to index");
|
||||
|
||||
return index_insert(index, &entry, 1);
|
||||
}
|
||||
@ -435,7 +435,7 @@ int git_index_append(git_index *index, const char *path, int stage)
|
||||
git_index_entry entry;
|
||||
|
||||
if ((error = index_init_entry(&entry, index, path, stage)) < GIT_SUCCESS)
|
||||
return error;
|
||||
return git__rethrow(error, "Failed to append to index");
|
||||
|
||||
return index_insert(index, &entry, 0);
|
||||
}
|
||||
@ -574,13 +574,13 @@ static int read_unmerged(git_index *index, const char *buffer, size_t size)
|
||||
|
||||
len = strlen(buffer) + 1;
|
||||
if (size <= len)
|
||||
return GIT_ERROR;
|
||||
return git__throw(GIT_ERROR, "Failed to read unmerged entries");
|
||||
|
||||
if ((lost = git__malloc(sizeof(git_index_entry_unmerged))) == NULL)
|
||||
return GIT_ENOMEM;
|
||||
|
||||
if (git_vector_insert(&index->unmerged, lost) < GIT_SUCCESS)
|
||||
return GIT_ERROR;
|
||||
return git__throw(GIT_ERROR, "Failed to read unmerged entries");
|
||||
|
||||
lost->path = git__strdup(buffer);
|
||||
if (!lost->path)
|
||||
@ -596,7 +596,7 @@ static int read_unmerged(git_index *index, const char *buffer, size_t size)
|
||||
|
||||
len = (endptr + 1) - (char *) buffer;
|
||||
if (size <= len)
|
||||
return GIT_ERROR;
|
||||
return git__throw(GIT_ERROR, "Failed to read unmerged entries");
|
||||
|
||||
size -= len;
|
||||
buffer += len;
|
||||
@ -606,8 +606,7 @@ static int read_unmerged(git_index *index, const char *buffer, size_t size)
|
||||
if (!lost->mode[i])
|
||||
continue;
|
||||
if (size < 20)
|
||||
return GIT_ERROR;
|
||||
|
||||
return git__throw(GIT_ERROR, "Failed to read unmerged entries");
|
||||
git_oid_mkraw(&lost->oid[i], (unsigned char *) buffer);
|
||||
size -= 20;
|
||||
buffer += 20;
|
||||
@ -662,7 +661,7 @@ static size_t read_entry(git_index_entry *dest, const void *buffer, size_t buffe
|
||||
|
||||
path_end = memchr(path_ptr, '\0', buffer_size);
|
||||
if (path_end == NULL)
|
||||
return 0;
|
||||
return 0;
|
||||
|
||||
path_length = path_end - path_ptr;
|
||||
}
|
||||
@ -688,12 +687,12 @@ static int read_header(struct index_header *dest, const void *buffer)
|
||||
|
||||
dest->signature = ntohl(source->signature);
|
||||
if (dest->signature != INDEX_HEADER_SIG)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to read header. Invalid signature");
|
||||
|
||||
dest->version = ntohl(source->version);
|
||||
if (dest->version != INDEX_VERSION_NUMBER_EXT &&
|
||||
dest->version != INDEX_VERSION_NUMBER)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to read header. Invalid index version number");
|
||||
|
||||
dest->entry_count = ntohl(source->entry_count);
|
||||
return GIT_SUCCESS;
|
||||
@ -744,13 +743,13 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
||||
|
||||
#define seek_forward(_increase) { \
|
||||
if (_increase >= buffer_size) \
|
||||
return GIT_EOBJCORRUPTED; \
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to seek forward. Buffer size exceeded"); \
|
||||
buffer += _increase; \
|
||||
buffer_size -= _increase;\
|
||||
}
|
||||
|
||||
if (buffer_size < INDEX_HEADER_SIZE + INDEX_FOOTER_SIZE)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Buffer too small");
|
||||
|
||||
/* Precalculate the SHA1 of the files's contents -- we'll match it to
|
||||
* the provided SHA1 in the footer */
|
||||
@ -758,7 +757,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
||||
|
||||
/* Parse header */
|
||||
if (read_header(&header, buffer) < GIT_SUCCESS)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Header is corrupted");
|
||||
|
||||
seek_forward(INDEX_HEADER_SIZE);
|
||||
|
||||
@ -777,7 +776,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
||||
|
||||
/* 0 bytes read means an object corruption */
|
||||
if (entry_size == 0)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Entry size is zero");
|
||||
|
||||
if (git_vector_insert(&index->entries, entry) < GIT_SUCCESS)
|
||||
return GIT_ENOMEM;
|
||||
@ -786,7 +785,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
||||
}
|
||||
|
||||
if (i != header.entry_count)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Header entries changed while parsing");
|
||||
|
||||
/* There's still space for some extensions! */
|
||||
while (buffer_size > INDEX_FOOTER_SIZE) {
|
||||
@ -796,19 +795,19 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
||||
|
||||
/* see if we have read any bytes from the extension */
|
||||
if (extension_size == 0)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Extension size is zero");
|
||||
|
||||
seek_forward(extension_size);
|
||||
}
|
||||
|
||||
if (buffer_size != INDEX_FOOTER_SIZE)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Buffer size does not match index footer size");
|
||||
|
||||
/* 160-bit SHA-1 over the content of the index file before this checksum. */
|
||||
git_oid_mkraw(&checksum_expected, (const unsigned char *)buffer);
|
||||
|
||||
if (git_oid_cmp(&checksum_calculated, &checksum_expected) != 0)
|
||||
return GIT_EOBJCORRUPTED;
|
||||
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse index. Calculated checksum does not match expected checksum");
|
||||
|
||||
#undef seek_forward
|
||||
|
||||
@ -918,7 +917,7 @@ static int write_index(git_index *index, git_filebuf *file)
|
||||
|
||||
error = write_entries(index, file);
|
||||
if (error < GIT_SUCCESS)
|
||||
return error;
|
||||
return git__rethrow(error, "Failed to write index");
|
||||
|
||||
/* TODO: write extensions (tree cache) */
|
||||
|
||||
@ -928,5 +927,5 @@ static int write_index(git_index *index, git_filebuf *file)
|
||||
/* write it at the end of the file */
|
||||
git_filebuf_write(file, hash_final.id, GIT_OID_RAWSZ);
|
||||
|
||||
return error;
|
||||
return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow(error, "Failed to write index");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user