diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/hoofd.c | 9 | ||||
| -rw-r--r-- | src/kat.c | 9 | ||||
| -rw-r--r-- | src/toilet.c | 13 | ||||
| -rw-r--r-- | src/util/map.c | 5 | ||||
| -rw-r--r-- | src/util/map.h | 3 | 
5 files changed, 29 insertions, 10 deletions
| diff --git a/src/hoofd.c b/src/hoofd.c index 64c2bfd..62d1151 100644 --- a/src/hoofd.c +++ b/src/hoofd.c @@ -58,8 +58,12 @@ int entry_hoofd(int argc, char **argv) {    char **args = parse_options(argc, argv, &n, &c);    while (*args != NULL) { -    struct map *map = open_map(*args); -    if (map == NULL) { +    bool isdir; +    struct map *map = open_map(*args, &isdir); +    if (isdir) { +      fprintf(stderr, "hoofd: %s: is een mapje\n", *args); +      goto next; +    } else if (map == NULL) {        fprintf(stderr, "hoofd: fout bij lezen bestand");        return 1;      } @@ -73,6 +77,7 @@ int entry_hoofd(int argc, char **argv) {      }      fwrite(map->addr, 1, i, stdout); +next:      args++;    } @@ -39,8 +39,13 @@ static char** parse_options(int argc, char **argv) {  }  static void process(const char *fname) { -  struct map *map = open_map(fname); -  if (map == NULL) { +  bool isdir; + +  struct map *map = open_map(fname, &isdir); +  if (isdir) { +    fprintf(stderr, "kat: %s: is een mapje\n", fname); +    return; +  } else if (map == NULL) {      exit(1);    } diff --git a/src/toilet.c b/src/toilet.c index 0f4d66f..ce42aca 100644 --- a/src/toilet.c +++ b/src/toilet.c @@ -116,10 +116,14 @@ int entry_toilet(int argc, char **argv) {    }    while (*args != NULL) { -    struct map *map = open_map(*args); -    if (map == NULL) { -      fprintf(stderr, "toilet: fout bij lezen bestand"); +    bool isdir; +    struct map *map = open_map(*args, &isdir); +    if (map == NULL && !isdir) { +      fprintf(stderr, "toilet: fout bij lezen bestand '%s'\n", *args);        return 1; +    } else if (isdir) { +      fprintf(stderr, "toilet: %s: is een mapje\n", *args); +      goto next;      }      for (enum MODE mode = 1; mode <= M_BYTES; mode <<= 1) { @@ -128,10 +132,11 @@ int entry_toilet(int argc, char **argv) {          printf("%li ", count);        }      } -      printf("%s\n", *args);      close_map(map); + +next:      args++;    } diff --git a/src/util/map.c b/src/util/map.c index 27e1c04..6a1faf1 100644 --- a/src/util/map.c +++ b/src/util/map.c @@ -9,7 +9,9 @@  #include "map.h" -struct map *open_map(const char *fname) { +struct map *open_map(const char *fname, bool *isdir) { +  if (isdir != NULL) *isdir = false; +    int fd = open(fname, O_RDONLY);    struct stat sb; @@ -21,6 +23,7 @@ struct map *open_map(const char *fname) {    char *addr = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);    if (addr == MAP_FAILED) {      //fprintf(stderr, "Kon bestand niet projecteren in geheugen\n"); +    if (isdir != NULL) *isdir = S_ISDIR(sb.st_mode);      return NULL;    } diff --git a/src/util/map.h b/src/util/map.h index 67beb9c..14a48e1 100644 --- a/src/util/map.h +++ b/src/util/map.h @@ -1,3 +1,4 @@ +#include <stdbool.h>  #include <sys/stat.h>  struct map { @@ -7,5 +8,5 @@ struct map {    int fd;  }; -struct map *open_map(const char *fname); +struct map *open_map(const char *fname, bool *isdir);  void close_map(struct map *m); | 
