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