myreaddir()
von RobertDebiannutzer- SNIPPET_TEXT:
-
- void
- myreaddir(void)
- {
- static char errbuf[BUFSIZ];
- DIR *dir;
- size_t errc, i;
- struct dirent *sd;
- dir = opendir(".");
- if (dir == NULL) {
- errmsg("opendir", strerror(errno));
- return;
- }
- free_data();
- dotc = errc = fstl = pos = 0;
- for (i=0; ; i++) {
- errno = 0; /* cf. manpage readdir(3) */
- sd = readdir(dir);
- if (sd == NULL) {
- if (errno == 0) {
- break;
- }
- errc++;
- continue;
- }
- cdir = srealloc(cdir, sizeof(char *)*(i+1));
- cdir[i] = scalloc(strlen(sd->d_name)+1, 1);
- strcpy(cdir[i], sd->d_name);
- ca = srealloc(ca, sizeof(List)*(i+1));
- }
- closedir(dir);
- num = i-1;
- qsort(&cdir[0], num+1, sizeof(char *), mycompare);
- for (i=0; i<=num; i++) {
- if ((cdir[i][0] == '.') && (cdir[i][1] != '\0') &&
- (strcmp(cdir[i], "..") != 0)) {
- /* this entry is a dotfile */
- ca[i].d = 1;
- ca[i].s = dot ? 1 : 0;
- dotc++;
- } else {
- ca[i].d = 0;
- ca[i].s = 1;
- }
- st = srealloc(st, sizeof(struct stat)*(i+1));
- /* get strlen respecting UTF-8 */
- ca[i].l = mbstowcs(NULL, cdir[i], 0);
- if (lstat(cdir[i], &st[i]) == -1) {
- errc++;
- ca[i].a = A_REVERSE;
- continue;
- } else {
- ca[i].a = file_preinfo(i);
- }
- }
- max = dot ? num : num-dotc;
- if (errc != 0) {
- memset(errbuf, 0, sizeof(errbuf));
- snprintf(errbuf, SOA(errbuf),
- "%zd errors while reading directory", errc);
- errmsg("myreaddir", errbuf);
- }
- read_devices();
- title();
- /* flush filter */
- if (strlen(search) > 0) {
- /* search is stack allocated */
- memset(search, 0, sizeof(search));
- }
- filterfiles(search);
- update = 1;
- }
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN