5 const unsigned char *sha1
;
12 struct name_entry entry
;
16 static inline const unsigned char *tree_entry_extract(struct tree_desc
*desc
, const char **pathp
, unsigned int *modep
)
18 *pathp
= desc
->entry
.path
;
19 *modep
= canon_mode(desc
->entry
.mode
);
20 return desc
->entry
.sha1
;
23 static inline int tree_entry_len(const char *name
, const unsigned char *sha1
)
25 return (const char *)sha1
- name
- 1;
28 void update_tree_entry(struct tree_desc
*);
29 void init_tree_desc(struct tree_desc
*desc
, const void *buf
, unsigned long size
);
31 /* Helper function that does both of the above and returns true for success */
32 int tree_entry(struct tree_desc
*, struct name_entry
*);
34 void *fill_tree_descriptor(struct tree_desc
*desc
, const unsigned char *sha1
);
37 typedef int (*traverse_callback_t
)(int n
, unsigned long mask
, unsigned long dirmask
, struct name_entry
*entry
, struct traverse_info
*);
38 int traverse_trees(int n
, struct tree_desc
*t
, struct traverse_info
*info
);
40 struct traverse_info
{
41 struct traverse_info
*prev
;
42 struct name_entry name
;
45 unsigned long conflicts
;
46 traverse_callback_t fn
;
50 int get_tree_entry(const unsigned char *, const char *, unsigned char *, unsigned *);
51 extern char *make_traverse_path(char *path
, const struct traverse_info
*info
, const struct name_entry
*n
);
52 extern void setup_traverse_info(struct traverse_info
*info
, const char *base
);
54 static inline int traverse_path_len(const struct traverse_info
*info
, const struct name_entry
*n
)
56 return info
->pathlen
+ tree_entry_len(n
->path
, n
->sha1
);