tree/diff header cleanup.
Introduce tree-walk.[ch] and move "struct tree_desc" and associated functions from various places. Rename DIFF_FILE_CANON_MODE(mode) macro to canon_mode(mode) and move it to cache.h. This macro returns the canonicalized st_mode value in the host byte order for files, symlinks and directories -- to be compared with a tree_desc entry. create_ce_mode(mode) in cache.h is similar but is intended to be used for index entries (so it does not work for directories) and returns the value in the network byte order. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
28
tree-diff.c
28
tree-diff.c
@ -9,34 +9,6 @@ static int nr_paths = 0;
|
||||
static const char **paths = NULL;
|
||||
static int *pathlens = NULL;
|
||||
|
||||
void update_tree_entry(struct tree_desc *desc)
|
||||
{
|
||||
void *buf = desc->buf;
|
||||
unsigned long size = desc->size;
|
||||
int len = strlen(buf) + 1 + 20;
|
||||
|
||||
if (size < len)
|
||||
die("corrupt tree file");
|
||||
desc->buf = buf + len;
|
||||
desc->size = size - len;
|
||||
}
|
||||
|
||||
const unsigned char *tree_entry_extract(struct tree_desc *desc, const char **pathp, unsigned int *modep)
|
||||
{
|
||||
void *tree = desc->buf;
|
||||
unsigned long size = desc->size;
|
||||
int len = strlen(tree)+1;
|
||||
const unsigned char *sha1 = tree + len;
|
||||
const char *path = strchr(tree, ' ');
|
||||
unsigned int mode;
|
||||
|
||||
if (!path || size < len + 20 || sscanf(tree, "%o", &mode) != 1)
|
||||
die("corrupt tree file");
|
||||
*pathp = path+1;
|
||||
*modep = DIFF_FILE_CANON_MODE(mode);
|
||||
return sha1;
|
||||
}
|
||||
|
||||
static char *malloc_base(const char *base, const char *path, int pathlen)
|
||||
{
|
||||
int baselen = strlen(base);
|
||||
|
Reference in New Issue
Block a user