diff options
author | dzwdz | 2023-08-14 18:51:07 +0200 |
---|---|---|
committer | dzwdz | 2023-08-14 18:51:07 +0200 |
commit | 642b5fb0007b64c77d186fcb018d571152ee1d47 (patch) | |
tree | 1c466461f3602d306be309a053edae558ef2568e /src/user/lib/dirent.c | |
parent | 8050069c57b729c18c19b1a03ab6e4bf63b4735e (diff) |
reorganization: first steps
Diffstat (limited to 'src/user/lib/dirent.c')
-rw-r--r-- | src/user/lib/dirent.c | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/src/user/lib/dirent.c b/src/user/lib/dirent.c deleted file mode 100644 index c2d1b9c..0000000 --- a/src/user/lib/dirent.c +++ /dev/null @@ -1,55 +0,0 @@ -#include <dirent.h> -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> - -DIR *opendir(const char *name) { - FILE *fp = NULL; - DIR *dir = NULL; - fp = fopen(name, "r"); - if (!fp) { - goto err; - } - dir = calloc(1, sizeof *dir); - if (!dir) { - goto err; - } - dir->fp = fp; - return dir; -err: - if (fp) fclose(fp); - free(dir); - return NULL; -} - -int closedir(DIR *dir) { - fclose(dir->fp); - free(dir); - return 0; -} - -struct dirent *readdir(DIR *dir) { - int i = 0; - char *buf = dir->dent.d_name; - for (;;) { - int c = fgetc(dir->fp); - if (c == EOF) { - if (i == 0) return NULL; - else break; - } - if (c == '\0') { - break; - } - if (i == sizeof(dir->dent.d_name)-1) { - /* overflow */ - for (;;) { - c = fgetc(dir->fp); - if (c == EOF || c == '\0') break; - } - return errno = ENAMETOOLONG, NULL; - } - buf[i++] = c; - } - buf[i] = '\0'; - return &dir->dent; -} |