| #ifndef ENTRY_H | 
 | #define ENTRY_H | 
 |  | 
 | #include "cache.h" | 
 | #include "convert.h" | 
 |  | 
 | struct checkout { | 
 | 	struct index_state *istate; | 
 | 	const char *base_dir; | 
 | 	int base_dir_len; | 
 | 	struct delayed_checkout *delayed_checkout; | 
 | 	struct checkout_metadata meta; | 
 | 	unsigned force:1, | 
 | 		 quiet:1, | 
 | 		 not_new:1, | 
 | 		 clone:1, | 
 | 		 refresh_cache:1; | 
 | }; | 
 | #define CHECKOUT_INIT { NULL, "" } | 
 |  | 
 | #define TEMPORARY_FILENAME_LENGTH 25 | 
 | /* | 
 |  * Write the contents from ce out to the working tree. | 
 |  * | 
 |  * When topath[] is not NULL, instead of writing to the working tree | 
 |  * file named by ce, a temporary file is created by this function and | 
 |  * its name is returned in topath[], which must be able to hold at | 
 |  * least TEMPORARY_FILENAME_LENGTH bytes long. | 
 |  * | 
 |  * With checkout_entry_ca(), callers can optionally pass a preloaded | 
 |  * conv_attrs struct (to avoid reloading it), when ce refers to a | 
 |  * regular file. If ca is NULL, the attributes will be loaded | 
 |  * internally when (and if) needed. | 
 |  */ | 
 | int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca, | 
 | 		      const struct checkout *state, char *topath, | 
 | 		      int *nr_checkouts); | 
 | static inline int checkout_entry(struct cache_entry *ce, | 
 | 				 const struct checkout *state, char *topath, | 
 | 				 int *nr_checkouts) | 
 | { | 
 | 	return checkout_entry_ca(ce, NULL, state, topath, nr_checkouts); | 
 | } | 
 |  | 
 | void enable_delayed_checkout(struct checkout *state); | 
 | int finish_delayed_checkout(struct checkout *state, int *nr_checkouts); | 
 |  | 
 | /* | 
 |  * Unlink the last component and schedule the leading directories for | 
 |  * removal, such that empty directories get removed. | 
 |  */ | 
 | void unlink_entry(const struct cache_entry *ce); | 
 |  | 
 | void *read_blob_entry(const struct cache_entry *ce, unsigned long *size); | 
 | int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st); | 
 | void update_ce_after_write(const struct checkout *state, struct cache_entry *ce, | 
 | 			   struct stat *st); | 
 |  | 
 | #endif /* ENTRY_H */ |