From f59216922ce6ece69c621af52d8c1af20f0fc5da Mon Sep 17 00:00:00 2001 From: TheK0tYaRa Date: Sun, 15 Jun 2025 09:32:47 +0300 Subject: [PATCH] uhhh --- .gitignore | 2 + bin/main | Bin 15640 -> 16096 bytes ...gdbrkgbsdkrgbksrbgkdsbrgkjdbrgbdrkjghbskhe | 0 src/main.c | 133 +++++++++++++++++- src/main.h | 15 +- 5 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 dkjhbfgkdhrkjvhbdxjkrgbjkdhbrgjkbdjkrgbjkdrbgjkdbrjkghbdkjrbgkdbrkgbkrbdkhrbgkbrkgfbdkrgbkdrbgkbdsrkgbsdkrgbksdrbgksbfkgbsdrkgbdskrgbksdrbgkdsbrkgdbrkgbsdkrgbksrbgkdsbrgkjdbrgbdrkjghbskhedkjhbfgkdhrkjvhbdxjkrgbjkdhbrgjkbdjkrgbjkdrbgjkdbrjkghbdkjrbgkdbrkgbkrbdkhrbgkbrkgfbdkrgbkdrbgkbdsrkgbsdkrgbksdrbgksbfkgbsdrkgbdskrgbksdrbgkdsbrkgdbrkgbsdkrgbksrbgkdsbrgkjdbrgbdrkjghbskhe diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6dcabdd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +./.vscode +./bin \ No newline at end of file diff --git a/bin/main b/bin/main index 5fd303ae2ebad901a8a9ae83376e9df879a1675c..efe8b24be6e57c4342db368f812d68708dd0282c 100755 GIT binary patch literal 16096 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 delta 1891 zcmZ8iZ%kWN6um5!uobfbLNNoy zK@cY+=-4r4CPw*S49iSbQ$L{54b*IL@dF?HfJPI(nAF5&C0Wdzgy*^M4{n_1_IK~^ z{NA}I_nv$2^6=%Mi!OV+KvaurKrRQSD?YQO%-S$zp8nNqE8(Oi`Gxzp&btg~4zkG?Q${QdsRb39p%)6eUB!^I9!j^+SW~>)P)K`NPb#>(vR5a<_ zz~fz3f|_Ub@t4yd;1Y4<7*LBd+#({4wiMAYR|7(HUWz`-8{_!~0zDoFBrJJw+>)2S z*r4gy>YHH7;w;wpL8X@;@><|q^lG{5v7;JV5O}y_al*mey!7Xe7V9OU9kRlfmP5F2 ziX-eJ3}MR!FBQeGO_3TRNM2Hs_LL+UF(xC*s}R zogES@nvnElzm3o>IpJ!I%wx;VDoO%TMr>iYq9_*;6No9qImAWyP})(Fy{jnOks*66 zYV|yUT^8js@=^F*+U7}Nj1s13ED+x2n)1!9c@|b8Td}=?Ed|u$bhFV%*p^YP?zEvE zV(N68=e0b@<{l|Fip?l4{WOvw{JE=?6YOB~zQoO%;1#c%yF%cCx1N&;-1fTd3B8(F zi7=bx;Q@LRJcN91?l2E+zUx@!nn}>*|Ae~0TG>F4vLn|#gAR$fh%2fojQ@V@2*{Uj z;D?a6a|J}O8%hmF*nw>Z<|X-LL_Z_4F8UaeMcX*bRpdodO#D$zXq>S*mRs>H=H*<( zI9Zy8ke}IH(88O}iKLLFubN4B|Bc9UXxDR4Hwiffn}BoGMX~dceTscmuWmFU>b4_i z!aZR6jVmA^&-9BTsZhh{Czv?U!P4FMfd_d>z16}%tDVKqvjE&(%?=w`zBJEY=ZE#$)}-cwf>e?U;HW#$u<=^mJ>USPZ%Y{#^BjjGgI+RKN*qfdh8! z&Ws*7*u1AHR^`RZGQGE^jizU6B}$iIH0Xq-I+r-BFPwo_ps}tLq@W-kW@iS?Ksz)B zePTjq4UA$WpKVrWvHZRc)~r{hQJq+9|F6qnxK?bD)P#tE-@roHm%sildC-fMQ +#include +#include +#include +#include +#include +#include +#include +#include +// char *scanned_path; // void check_args(int argc, char *argv[]) { @@ -11,11 +21,130 @@ void check_args(int argc, char *argv[]) { } scanned_path=realpath(_scanned_path, NULL); } +// ulong file_size(char *path) { +// struct stat file_stat; + +// if (stat(path, &file_stat) == -1) { +// perror("stat failed"); +// return -1; // Return error +// } + +// if (!S_ISREG(file_stat->st_mode)) { +// fputs("Not a regular file\n", stderr); +// return -1; // Not a regular file +// } + +// return file_stat->st_size; // Return size in bytes +// } +// bool is_dir(char *path) { +// struct stat file_stat; + +// if (stat(path, &file_stat) == -1) { +// perror("stat failed"); +// return false; // Return error +// } + +// return S_ISDIR(file_stat->st_mode); +// } +// ulong cluster_size(char *path) { +// struct stat file_stat; + +// if (stat(path, &file_stat) == -1) { +// perror("stat failed"); +// return -1; // Return error +// } + +// if (!S_ISREG(file_stat->st_mode)) { +// fputs("Not a regular file\n", stderr); +// return -1; // Not a regular file +// } + +// return file_stat->st_blocks * 512; +// } +void ls(struct path_node *node, char *path) { + // path + if(node->path==NULL) node->path=path; + // temporary size + node->size=0; + // children + int fd; + char buf[BUF_SIZE]; + long nread; + struct linux_dirent64 *d; + int bpos; + + // Open directory + fd = open(node->path, O_RDONLY | O_DIRECTORY); + if (fd == -1) { + perror("open"); + return; + } + + while (1) { + // Read directory entries using system call + nread = syscall(SYS_getdents64, fd, buf, BUF_SIZE); + if (nread == -1) { + perror("getdents64"); + break; + } + + if (nread == 0) // End of directory + break; + + // Process each entry in buffer + for (bpos = 0; bpos < nread;) { + d = (struct linux_dirent64 *)(buf + bpos); + bpos += d->d_reclen; + + // Skip . and .. entries + if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) + continue; + + // Print filename (no path, no metadata) + // + char *child_path=node->path; + strcat(child_path, "/"); + strcat(child_path, d->d_name); + + struct stat *file_stat=malloc(sizeof(struct stat)); + // bool is_dir; + if (stat(child_path, file_stat) == -1) { + perror("stat failed"); + } + + long path_size=0; + switch (file_stat->st_mode & S_IFMT) { + case S_IFREG: + path_size=file_stat->st_size; + printf("FILE\t%ld\t%s\n", path_size, child_path); + break; + case S_IFDIR: + path_size=file_stat->st_blocks*512; + printf("DIR\t%ld\t%s/\n", path_size, child_path); + break; + default: + printf("UNKNOWN\t%ld\t%s\n", path_size, child_path); + break; + } + free(child_path); + // free(file_stat); + // free(d); + printf("next...\n"); + } + } + + close(fd); +} int main(int argc, char *argv[]) { check_args(argc, argv); - printf("scanned path: %s\n",scanned_path); + printf("scanning:\t%s\n",scanned_path); // - path_node *parent_node=alloc; + struct path_node *parent_node=malloc(sizeof(struct path_node)); + ls(parent_node, scanned_path); + // recursive_size(parent_node); + // + // print parent_node verbosely + free(parent_node); // return 0; } diff --git a/src/main.h b/src/main.h index b7a8fc2..98cfdb5 100644 --- a/src/main.h +++ b/src/main.h @@ -1,6 +1,9 @@ #ifndef __main_h__ #define __main_h__ // +#define BUF_SIZE 4096 +// +#include #include #include #include @@ -9,8 +12,16 @@ // struct path_node { char *path; - uint size; - struct path_node *next; + ulong size; + struct path_node *children[]; +}; +// Structure matching the kernel's getdents64 system call +struct linux_dirent64 { + uint64_t d_ino; /* Inode number */ + int64_t d_off; /* Offset to next structure */ + unsigned short d_reclen; /* Length of this dirent */ + unsigned char d_type; /* File type */ + char d_name[]; /* Null-terminated filename */ }; // #endif \ No newline at end of file