commit 899d7115ca91dd98ba24a92d2e8764dbb0be1408
parent 2c7eec83c6d91083326d161be2f054ba3140f10e
Author: Bakar Chargeishvili <bakar@bcharge.de>
Date:   Wed, 18 Dec 2024 17:44:55 +0100
Extract the first name from passwd entry
Diffstat:
| M | welcome.c |  |  | 34 | +++++++++++++++++++++++++++++++++- | 
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/welcome.c b/welcome.c
@@ -6,6 +6,8 @@
 #include <stdio.h>
 #include <curl/curl.h>
 #include <locale.h>
+#include <pwd.h>
+#include <unistd.h>
 
 #define MAXPIPE 1024
 #define EVBOX_W 50
@@ -116,10 +118,40 @@ int syspipe(char* input, char* output, size_t* max_width)
 	return 0;
 }
 
+char* get_first_name()
+{
+	// Try to get a first name from passwd entry
+	struct passwd* pw = getpwuid(getuid());
+	if (pw != NULL && pw->pw_gecos != NULL && strlen(pw->pw_gecos) > 0) {
+		char* name_copy = strdup(pw->pw_gecos);
+		char* first_part = strtok(name_copy, ",");
+
+		if (first_part != NULL) {
+			char* first_name = strtok(first_part, " ");
+			if (first_name != NULL) {
+				return strdup(first_name);
+			}
+			free(name_copy);
+		}
+		free(name_copy);
+	}
+
+	// If it fails, return username
+	if (pw != NULL) {
+		return strdup(pw->pw_name);
+	}
+
+	// Last resort
+	return strdup("user");
+}
+
 int print_greet(WINDOW* frame)
 {
 	char buf[500] = {0};
-	const char *cmd = "figlet Welcome Bakar!";
+	char* name = get_first_name();
+	char command[100];
+	sprintf(command, "figlet Welcome %s!", name);
+	const char *cmd = command;
 
 	FILE *fp;