diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-04-26 09:36:16 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-04-26 09:36:16 +0200 |
commit | 17dd9cdc6d5beb636695e5becbc93275524665af (patch) | |
tree | ac1adf24a1d9f5af0f60a441e6593ff365c21166 | |
parent | 14f65e6875ba4c7c6f101b6f847419f194ed697c (diff) |
os2w2 klaar
-rw-r--r-- | os2w2/.gitignore | 2 | ||||
-rw-r--r-- | os2w2/main.c | 60 | ||||
-rw-r--r-- | os2w2/makefile | 16 | ||||
-rw-r--r-- | os2w2/werkt.png | bin | 0 -> 29215 bytes |
4 files changed, 78 insertions, 0 deletions
diff --git a/os2w2/.gitignore b/os2w2/.gitignore new file mode 100644 index 0000000..f0c9b81 --- /dev/null +++ b/os2w2/.gitignore @@ -0,0 +1,2 @@ +*.o +main diff --git a/os2w2/main.c b/os2w2/main.c new file mode 100644 index 0000000..18108fd --- /dev/null +++ b/os2w2/main.c @@ -0,0 +1,60 @@ +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <dirent.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> + +/** @brief stat file to get modified date and print name */ +void print_file(const char* path) { + struct stat *info = malloc(sizeof(struct stat)); + stat(path, info); + + struct tm mtime; + localtime_r(&(info->st_mtime), &mtime); + + free(info); + + printf("%04d-%02d-%02d %02d:%02d:%02d %s\n", + mtime.tm_year+1900, mtime.tm_mon+1, mtime.tm_mday, + mtime.tm_hour, mtime.tm_min, mtime.tm_sec, + path); +} + +/** @brief list directory tree recursively */ +void ls_rec(const char *path) { + DIR *dir = opendir(path); // get directory handle (used until all content is listed) + if (dir == NULL) return; // return early if path is not a directory + + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { // read next file in dir + char full_path[1024]; // current entry name with full path prefix + snprintf(full_path, sizeof(full_path), "%s/%s", path, entry->d_name); // prepend current directory to current entry + + if (entry->d_type != DT_DIR) { + print_file(full_path); + continue; // don't try to print files recursively + } + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; // ignore current and parent directory + + print_file(full_path); + ls_rec(full_path); + } + + closedir(dir); // free directory handle +} + +int main(int argc, const char** argv) { + if (argc < 2) { + printf("no input directory!\n"); + return 1; + } + + ls_rec(argv[1]); + + return 0; +} + diff --git a/os2w2/makefile b/os2w2/makefile new file mode 100644 index 0000000..1b726be --- /dev/null +++ b/os2w2/makefile @@ -0,0 +1,16 @@ +CC = gcc +LD = gcc + +CFLAGS += -g + +all: main + +main: main.o + $(LD) $^ $(LFLAGS) -o $@ + +%.o: %.c + $(CC) -c $(CFLAGS) $< -o $@ + +clean: + $(RM) main.o main + diff --git a/os2w2/werkt.png b/os2w2/werkt.png Binary files differnew file mode 100644 index 0000000..fa30636 --- /dev/null +++ b/os2w2/werkt.png |