Bladeren bron

Use open(2)/fstat(2) and don't bother with links at all

master
lostd 10 jaren geleden
bovenliggende
commit
6b51ec4585
1 gewijzigde bestanden met toevoegingen van 29 en 70 verwijderingen
  1. +29
    -70
      noice.c

+ 29
- 70
noice.c Bestand weergeven

@@ -192,20 +192,6 @@ nextsel(int *cur, int max)
return 0;
}

int
testopen(char *path)
{
int fd;

fd = open(path, O_RDONLY);
if (fd == -1) {
return 0;
} else {
close(fd);
return 1;
}
}

int
testopendir(char *path)
{
@@ -340,11 +326,11 @@ nochange:
}
}
if (ret == 3) {
char *pathnew, *pathtmp;
char *pathnew;
char *name;
u_int8_t type;
char *bin;
pid_t pid;
int fd;
struct stat sb;

/* Cannot descend in empty directories */
@@ -352,62 +338,35 @@ nochange:
goto nochange;

name = dents[cur].d_name;
type = dents[cur].d_type;

asprintf(&pathnew, "%s/%s", path, name);

DPRINTF_S(name);
DPRINTF_U(type);
DPRINTF_S(pathnew);

again:
switch (type) {
case DT_LNK:
/* Resolve link */
pathtmp = realpath(pathnew, NULL);
if (pathtmp == NULL) {
printwarn();
free(pathnew);
goto nochange;
} else {
r = stat(pathtmp, &sb);
free(pathtmp);
if (r == -1) {
printwarn();
free(pathnew);
goto nochange;
}
/* Directory or file */
if (S_ISDIR(sb.st_mode)) {
type = DT_DIR;
goto again;
}
if (S_ISREG(sb.st_mode)) {
type = DT_REG;
goto again;
}
/* All the rest */
printmsg("Unsupported file");
free(pathnew);
goto nochange;
}
case DT_DIR:
/* Change to new path */
if (testopen(pathnew)) {
free(path);
path = pathnew;
goto out;
} else {
printwarn();
free(pathnew);
goto nochange;
}
case DT_REG:
if (!testopen(pathnew)) {
printwarn();
free(pathnew);
goto nochange;
}
/* Get path info */
fd = open(pathnew, O_RDONLY | O_NONBLOCK);
if (fd == -1) {
printwarn();
free(pathnew);
goto nochange;
}
r = fstat(fd, &sb);
close(fd);
DPRINTF_U(sb.st_mode);
if (r == -1) {
printwarn();
free(pathnew);
goto nochange;
}
/* Directory */
if (S_ISDIR(sb.st_mode)) {
free(path);
path = pathnew;
goto out;
}
/* Regular file */
if (S_ISREG(sb.st_mode)) {
/* Open with */
bin = openwith(name);
if (bin == NULL) {
@@ -429,11 +388,11 @@ again:

free(pathnew);
goto redraw;
default:
printmsg("Unsupported file");
free(pathnew);
goto nochange;
}
/* All the rest */
printmsg("Unsupported file");
free(pathnew);
goto nochange;
}
}



Laden…
Annuleren
Opslaan