cleaned up
This commit is contained in:
		
							
								
								
									
										30
									
								
								dmenu_path.c
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								dmenu_path.c
									
									
									
									
									
								
							@@ -8,22 +8,21 @@
 | 
			
		||||
 | 
			
		||||
#define CACHE ".dmenu_cache"
 | 
			
		||||
 | 
			
		||||
static int qstrcmp(const void *a, const void *b);
 | 
			
		||||
static void die(const char *s);
 | 
			
		||||
static int qstrcmp(const void *a, const void *b);
 | 
			
		||||
static void scan(void);
 | 
			
		||||
static int uptodate(void);
 | 
			
		||||
 | 
			
		||||
static char **items = NULL;
 | 
			
		||||
static const char *Home, *Path;
 | 
			
		||||
static size_t count = 0;
 | 
			
		||||
static const char *home, *path;
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(void) {
 | 
			
		||||
	if(!(Home = getenv("HOME")))
 | 
			
		||||
	if(!(home = getenv("HOME")))
 | 
			
		||||
		die("no $HOME");
 | 
			
		||||
	if(!(Path = getenv("PATH")))
 | 
			
		||||
	if(!(path = getenv("PATH")))
 | 
			
		||||
		die("no $PATH");
 | 
			
		||||
	if(chdir(Home) < 0)
 | 
			
		||||
	if(chdir(home) < 0)
 | 
			
		||||
		die("chdir failed");
 | 
			
		||||
	if(uptodate()) {
 | 
			
		||||
		execlp("cat", "cat", CACHE, NULL);
 | 
			
		||||
@@ -47,15 +46,16 @@ qstrcmp(const void *a, const void *b) {
 | 
			
		||||
void
 | 
			
		||||
scan(void) {
 | 
			
		||||
	char buf[PATH_MAX];
 | 
			
		||||
	char *dir, *path;
 | 
			
		||||
	size_t i;
 | 
			
		||||
	char *dir, *p;
 | 
			
		||||
	size_t i, count;
 | 
			
		||||
	struct dirent *ent;
 | 
			
		||||
	DIR *dp;
 | 
			
		||||
	FILE *cache;
 | 
			
		||||
 | 
			
		||||
	if(!(path = strdup(Path)))
 | 
			
		||||
	count = 0;
 | 
			
		||||
	if(!(p = strdup(path)))
 | 
			
		||||
		die("strdup failed");
 | 
			
		||||
	for(dir = strtok(path, ":"); dir; dir = strtok(NULL, ":")) {
 | 
			
		||||
	for(dir = strtok(p, ":"); dir; dir = strtok(NULL, ":")) {
 | 
			
		||||
		if(!(dp = opendir(dir)))
 | 
			
		||||
			continue;
 | 
			
		||||
		while((ent = readdir(dp))) {
 | 
			
		||||
@@ -79,23 +79,23 @@ scan(void) {
 | 
			
		||||
		fprintf(stdout, "%s\n", items[i]);
 | 
			
		||||
	}
 | 
			
		||||
	fclose(cache);
 | 
			
		||||
	free(path);
 | 
			
		||||
	free(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
uptodate(void) {
 | 
			
		||||
	char *dir, *path;
 | 
			
		||||
	char *dir, *p;
 | 
			
		||||
	time_t mtime;
 | 
			
		||||
	struct stat st;
 | 
			
		||||
 | 
			
		||||
	if(stat(CACHE, &st) < 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
	mtime = st.st_mtime;
 | 
			
		||||
	if(!(path = strdup(Path)))
 | 
			
		||||
	if(!(p = strdup(path)))
 | 
			
		||||
		die("strdup failed");
 | 
			
		||||
	for(dir = strtok(path, ":"); dir; dir = strtok(NULL, ":"))
 | 
			
		||||
	for(dir = strtok(p, ":"); dir; dir = strtok(NULL, ":"))
 | 
			
		||||
		if(!stat(dir, &st) && st.st_mtime > mtime)
 | 
			
		||||
			return 0;
 | 
			
		||||
	free(path);
 | 
			
		||||
	free(p);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user