Export thread-safe version of 'has_symlink_leading_path()'
The threaded index preloading will want it, so that it can avoid locking by simply using a per-thread symlink/directory cache. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Linus Torvalds
					Linus Torvalds
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							867f72bf43
						
					
				
				
					commit
					b9fd284657
				
			
							
								
								
									
										10
									
								
								cache.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								cache.h
									
									
									
									
									
								
							| @ -744,7 +744,17 @@ struct checkout { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath); | extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath); | ||||||
|  |  | ||||||
|  | struct cache_def { | ||||||
|  | 	char path[PATH_MAX + 1]; | ||||||
|  | 	int len; | ||||||
|  | 	int flags; | ||||||
|  | 	int track_flags; | ||||||
|  | 	int prefix_len_stat_func; | ||||||
|  | }; | ||||||
|  |  | ||||||
| extern int has_symlink_leading_path(const char *name, int len); | extern int has_symlink_leading_path(const char *name, int len); | ||||||
|  | extern int threaded_has_symlink_leading_path(struct cache_def *, const char *, int); | ||||||
| extern int has_symlink_or_noent_leading_path(const char *name, int len); | extern int has_symlink_or_noent_leading_path(const char *name, int len); | ||||||
| extern int has_dirs_only_path(const char *name, int len, int prefix_len); | extern int has_dirs_only_path(const char *name, int len, int prefix_len); | ||||||
| extern void invalidate_lstat_cache(const char *name, int len); | extern void invalidate_lstat_cache(const char *name, int len); | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								symlinks.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								symlinks.c
									
									
									
									
									
								
							| @ -32,13 +32,7 @@ static int longest_path_match(const char *name_a, int len_a, | |||||||
| 	return match_len; | 	return match_len; | ||||||
| } | } | ||||||
|  |  | ||||||
| static struct cache_def { | static struct cache_def default_cache; | ||||||
| 	char path[PATH_MAX + 1]; |  | ||||||
| 	int len; |  | ||||||
| 	int flags; |  | ||||||
| 	int track_flags; |  | ||||||
| 	int prefix_len_stat_func; |  | ||||||
| } default_cache; |  | ||||||
|  |  | ||||||
| static inline void reset_lstat_cache(struct cache_def *cache) | static inline void reset_lstat_cache(struct cache_def *cache) | ||||||
| { | { | ||||||
| @ -214,15 +208,20 @@ void clear_lstat_cache(void) | |||||||
|  |  | ||||||
| #define USE_ONLY_LSTAT  0 | #define USE_ONLY_LSTAT  0 | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Return non-zero if path 'name' has a leading symlink component | ||||||
|  |  */ | ||||||
|  | int threaded_has_symlink_leading_path(struct cache_def *cache, const char *name, int len) | ||||||
|  | { | ||||||
|  | 	return lstat_cache(cache, name, len, FL_SYMLINK|FL_DIR, USE_ONLY_LSTAT) & FL_SYMLINK; | ||||||
|  | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Return non-zero if path 'name' has a leading symlink component |  * Return non-zero if path 'name' has a leading symlink component | ||||||
|  */ |  */ | ||||||
| int has_symlink_leading_path(const char *name, int len) | int has_symlink_leading_path(const char *name, int len) | ||||||
| { | { | ||||||
| 	struct cache_def *cache = &default_cache;	/* FIXME */ | 	return threaded_has_symlink_leading_path(&default_cache, name, len); | ||||||
| 	return lstat_cache(cache, name, len, |  | ||||||
| 			   FL_SYMLINK|FL_DIR, USE_ONLY_LSTAT) & |  | ||||||
| 		FL_SYMLINK; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user