From 1552e3f5538bef613f7fb8b6b585734caffa69f2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 26 Mar 2024 08:36:15 +0300 Subject: [PATCH] fixed --- src/coreutils/ls/ls.c | 40 ++++++++++++------------------------- src/findutils/grep/build.sh | 3 +++ src/findutils/grep/grep.c | 30 ++++++++++++++++++++++++++++ src/procps/ps/ps.c | 1 + 4 files changed, 47 insertions(+), 27 deletions(-) create mode 100755 src/findutils/grep/build.sh create mode 100644 src/findutils/grep/grep.c diff --git a/src/coreutils/ls/ls.c b/src/coreutils/ls/ls.c index 8945cb2..033f68b 100644 --- a/src/coreutils/ls/ls.c +++ b/src/coreutils/ls/ls.c @@ -68,15 +68,22 @@ struct d_node *stat_file(char *filename, int lfile) { } struct d_node **list(const char *path, size_t *nfiles, int *ret) { + struct stat sb; + if (mu_get_stat("ls", path, &sb)) + return NULL; + + struct d_node **dir = malloc((sb.st_nlink + 2) * sizeof(struct d_node)); + if (dir == NULL) { + fprintf(stderr, "ls: malloc failed\n"); + exit(1); + } + DIR *dp = opendir(path); if (dp == NULL) { fprintf(stderr, "ls: %s: %s\n", path, strerror(errno)); return NULL; } - struct d_node **dir, *cur, *dr = NULL; - size_t files = 0; - struct dirent *ep; while ((ep = readdir(dp)) != NULL) { if (ep->d_name[0] == '.' && !a_flag) @@ -86,38 +93,17 @@ struct d_node **list(const char *path, size_t *nfiles, int *ret) { if (full_path == NULL) continue; - cur = stat_file(full_path, 0); - if (cur == NULL) { + dir[*nfiles] = stat_file(full_path, 0); + if (dir[*nfiles] == NULL) { *ret = 1; free(full_path); continue; } - cur->next = dr; - dr = cur; - - files++; + (*nfiles)++; } closedir(dp); - - if (dr == NULL) - return NULL; - - *nfiles = files; - dir = malloc((files + 1) * sizeof(struct d_node *)); - if (dir == NULL) { - fprintf(stderr, "ls: malloc failed\n"); - exit(1); - } - - for (size_t i = 0; ; i++) { - dir[i] = dr; - dr = dr->next; - if (dr == NULL) - break; - } - return dir; } diff --git a/src/findutils/grep/build.sh b/src/findutils/grep/build.sh new file mode 100755 index 0000000..6d8974b --- /dev/null +++ b/src/findutils/grep/build.sh @@ -0,0 +1,3 @@ +#!/bin/sh +project_dir=$(pwd) +echo ./*.c $CFLAGS -o $OUTPUT$(basename $project_dir) | xargs $CC diff --git a/src/findutils/grep/grep.c b/src/findutils/grep/grep.c new file mode 100644 index 0000000..203ba95 --- /dev/null +++ b/src/findutils/grep/grep.c @@ -0,0 +1,30 @@ +#include +#include +#include +#include +#include + +typedef struct { + char *pattern; + regex_t rgex; +} PATTERN; + +int main(int argc, char **argv) { + + int opt; + while ((opt = getopt(argc, argv, "e:")) != -1) { + switch (opt) { + case 'e': + addpattern(optarg); + break; + + default: + printf("grep [e] [PATTERN | -e PATTERN]\n"); + return 0; + } + } + + argv += optind; + argc -= optind; + return 0; +} diff --git a/src/procps/ps/ps.c b/src/procps/ps/ps.c index ef57b22..6044173 100644 --- a/src/procps/ps/ps.c +++ b/src/procps/ps/ps.c @@ -1,3 +1,4 @@ +#include #include #include #include