From f4d7cabd7af3d8eca9aedaa5a874351419945b0b Mon Sep 17 00:00:00 2001 From: Luis Gerhorst <privat@luisgerhorst.de> Date: Thu, 8 Jul 2021 14:27:44 +0200 Subject: [PATCH] task_find: Print files matching first char --- libbpf | 2 +- src/task_find.bpf.c | 14 +++++++++----- src/task_lib.bpf.h | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/libbpf b/libbpf index 8f83692..c91f117 160000 --- a/libbpf +++ b/libbpf @@ -1 +1 @@ -Subproject commit 8f8369223c327743277a8e4fcbf87c5d9d6f3c88 +Subproject commit c91f1175e2273825767160fdc54448c19c97ba13 diff --git a/src/task_find.bpf.c b/src/task_find.bpf.c index 5f84a91..676717e 100644 --- a/src/task_find.bpf.c +++ b/src/task_find.bpf.c @@ -28,7 +28,7 @@ void *u_newline; void *u_iterdents64_buf; size_t root_namelen; -static long iter_dir(size_t namelen) { +static long iter_dir(size_t namelen, bool print) { long err = 0; if (namelen + 1 > PATHLEN) { @@ -66,8 +66,10 @@ static long iter_dir(size_t namelen) { int dfd = openat(*parent_dfd, name_user, O_RDONLY | O_DIRECTORY, 0777); if (dfd < 0) { bpf_printk("file, depth = %d", depth); - write(STDOUT_FILENO, name_user, namelen); - write(STDOUT_FILENO, u_newline, 1); + if (print) { + write(STDOUT_FILENO, name_user, namelen); + write(STDOUT_FILENO, u_newline, 1); + } /* Not a directory, no need to iterate. */ goto end; } @@ -118,7 +120,7 @@ int entry(void *ctx) { long err = 0; - err = iter_dir(root_namelen); + err = iter_dir(root_namelen, false); if (err) { goto end; } @@ -129,12 +131,14 @@ end: SEC("iterdents64") int process_dirent(struct bpf_dirent64 *d) { int err = 0; + bool match = false; /* Skip "." and "..": */ if (!(d->name + 2 > (char *) d->name_end)) { if (d->name[0] == '.' && d->namelen == 1) { goto end; } + match = d->name[0] == 'a'; } if (!(d->name + 3 > (char *) d->name_end)) { @@ -143,7 +147,7 @@ int process_dirent(struct bpf_dirent64 *d) { } } - err = iter_dir(d->namelen); + err = iter_dir(d->namelen, match); if (err) { goto end; } diff --git a/src/task_lib.bpf.h b/src/task_lib.bpf.h index e4e1784..84c7af2 100644 --- a/src/task_lib.bpf.h +++ b/src/task_lib.bpf.h @@ -11,6 +11,7 @@ #define NULL ((void *) 0) +typedef int bool; #define false ((bool) 0) #define true ((bool) 1) -- GitLab