master
Connor Lane Smith 14 years ago
parent bf7b8e37ee
commit e0add428d2
  1. 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;
}

Loading…
Cancel
Save