From b10a854d9b8fbedca0499ffcc9da35a7fa78d477 Mon Sep 17 00:00:00 2001 From: Adriano Oliviero Date: Thu, 25 Feb 2021 21:47:00 +0100 Subject: [PATCH] Changed pkgman(), optimized overall performance. --- Makefile | 40 ++-------- main.c | 227 +++++++++++++++++++------------------------------------ 2 files changed, 85 insertions(+), 182 deletions(-) diff --git a/Makefile b/Makefile index 5525ad6..14e1cab 100644 --- a/Makefile +++ b/Makefile @@ -1,35 +1,11 @@ -name = litefetch -files = main.c -install_dir = /usr/bin/ -debug: - @echo Building debug... - gcc -Wall -Wextra -o $(name) $(files) - @echo Build completed! Running... - @echo - ./$(name) - @echo - @exit +NAME = litefetch +FILES = main.c +FLAGS = -O3 -Wall -Wextra +INSTALL_DIR = /usr/bin/ +all: build install -clean: - @echo Building debug... - gcc -Wall -Wextra -o $(name) $(files) - @echo Build completed! Running... - @echo - ./$(name) - @echo - rm -f $(name) - @echo Removed output file. - @exit +build: main.c + gcc $(FLAGS) -o $(NAME) $(FILES) install: - @echo Building release... - sudo gcc -o $(install_dir)$(name) $(files) - @echo Building and installation completed! - @exit - -uninstall: - @echo Uninstalling $(name)... - sudo rm -f $(install_dir)$(name) - rm -rf ../$(name) - @echo Uninstall completed! - @exit \ No newline at end of file + sudo cp $(NAME) $(INSTALL_DIR)$(NAME) \ No newline at end of file diff --git a/main.c b/main.c index ccfcb3e..66f5291 100644 --- a/main.c +++ b/main.c @@ -2,15 +2,8 @@ #include #include #include -#ifdef __linux__ - #include - #include -#elif __ANDROID__ - #include - #include -#elif _WIN32 - -#endif +#include +#include // COLORS #define NORMAL "\x1b[0m" #define BOLD "\x1b[1m" @@ -23,158 +16,92 @@ #define CYAN "\x1b[36m" #define WHITE "\x1b[37m" -void pkgman(); +char user[32], host[253], shell[64], version_name[64]; +int pkgman(); int main() { - // init variables and other useful things - char user[32], host[253], shell[64], version_name[64]; - // get user and host names - #ifdef __linux__ - struct utsname sys_var; - struct sysinfo sys; + // get user name, host name and shell + struct utsname sys_var; + struct sysinfo sys; - snprintf(user, 32, "%s", getenv("USER")); - gethostname(host, 253); - snprintf(shell, 16, "%s", getenv("SHELL")); - memmove(&shell[0], &shell[5], 16); + snprintf(user, 32, "%s", getenv("USER")); + gethostname(host, 253); + snprintf(shell, 16, "%s", getenv("SHELL")); + memmove(&shell[0], &shell[5], 16); - FILE *fos_rel = popen("lsb_release -a | grep Description", "r"); - fscanf(fos_rel,"%[^\n]", version_name); - fclose(fos_rel); - memmove(&version_name[0], &version_name[12], 64); - #elif __ANDROID__ - FILE *fwhoami = popen("whoami", "r"); - fscanf(fwhoami,"%[^\n]", user); - fclose(fwhoami); + // get os version + FILE *fos_rel = popen("lsb_release -a | grep Description", "r"); + fscanf(fos_rel,"%[^\n]", version_name); + fclose(fos_rel); + memmove(&version_name[0], &version_name[12], 32); - FILE *fos_rel = popen("getprop ro.system.build.version.release", "r"); - fscanf(fos_rel,"%[^\n]", version_name); - fclose(fos_rel); - snprintf(shell, 16, "%s", getenv("SHELL")); - memmove(&shell[0], &shell[36], 64); - #endif - - if (uname(&sys_var) == -1) printf("Ah sh-t, an error\n"); - if (sysinfo(&sys) == -1) printf("Ah sh-t, an error\n"); - - char cpu_model[128]; - FILE *fcpu = popen("lscpu | grep 'Model name:'", "r"); - fscanf(fcpu, "%[^\n]", cpu_model); - fclose(fcpu); + if (uname(&sys_var) == -1) printf("Ah sh*t, an error\n"); + if (sysinfo(&sys) == -1) printf("Ah sh*t, an error\n"); + + // get cpu info + char cpu_model[256]; + FILE *fcpu = popen("lscpu | grep 'Model name:'", "r"); + fscanf(fcpu, "%[^\n]", cpu_model); + fclose(fcpu); memmove(&cpu_model[0], &cpu_model[33], 128); - int ram_max = sys.totalram * sys.mem_unit / 1048576; - - int ram_used; - FILE *framu = popen("grep -i MemAvailable /proc/meminfo | awk '{print $2}' ", "r"); - fscanf(framu, "%i", &ram_used); - fclose(framu); - ram_used = ram_used / 1024; - - // Now we print the info and exit the program. - //NORMAL, BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE - if (strcmp(version_name, "Arch Linux")) { - printf("%s %s@%s\n", BOLD, user, host); - printf("%s /\\ %s%sOS %s%s\n", BLUE, NORMAL, BOLD, NORMAL, version_name); - printf("%s / \\ %s%sKERNEL %s%s %s\n", BLUE, NORMAL, BOLD, NORMAL, sys_var.release, sys_var.machine); - printf("%s /\\ \\ %s%sCPU %s%s\n", BLUE, NORMAL, BOLD, NORMAL, cpu_model); - printf("%s / \\ %s%sRAM %s%iM/%iM\n", BLUE, NORMAL, BOLD, NORMAL, ram_used, ram_max); - printf("%s / __ \\ %s%sSHELL %s%s\n", BLUE, NORMAL, BOLD, NORMAL, shell); - printf("%s / __| |__-\\ %s%sPKGS %s%s", BLUE, NORMAL, BOLD, NORMAL, NORMAL); pkgman(); - printf("%s /_-'' ''-_\\ %s%sUPTIME %s%lid, %lih, %lim\n", BLUE, NORMAL, BOLD, NORMAL, sys.uptime/60/60/24, sys.uptime/60/60%24, sys.uptime/60%60); - printf(" %s%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\n", BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, NORMAL); - } - - - return 0; + // get ram info + int ram_max = sys.totalram * sys.mem_unit / 1048576; + int ram_used; + FILE *framu = popen("grep -i MemAvailable /proc/meminfo | awk '{print $2}' ", "r"); + fscanf(framu, "%i", &ram_used); + fclose(framu); + ram_used = ram_used / 1024; + + // print collected info + if (strcmp(version_name, "Arch Linux")) { + printf("%s %s@%s\n", BOLD, user, host); + printf("%s /\\ %s%sOS %s%s\n", BLUE, NORMAL, BOLD, NORMAL, version_name); + printf("%s / \\ %s%sKERNEL %s%s %s\n", BLUE, NORMAL, BOLD, NORMAL, sys_var.release, sys_var.machine); + printf("%s /\\ \\ %s%sCPU %s%s\n", BLUE, NORMAL, BOLD, NORMAL, cpu_model); + printf("%s / \\ %s%sRAM %s%iM/%iM\n", BLUE, NORMAL, BOLD, NORMAL, ram_used, ram_max); + printf("%s / __ \\ %s%sSHELL %s%s\n", BLUE, NORMAL, BOLD, NORMAL, shell); + printf("%s / __| |__-\\ %s%sPKGS %s%s%d\n", BLUE, NORMAL, BOLD, NORMAL, NORMAL, pkgman()); + printf("%s /_-'' ''-_\\ %s%sUPTIME %s%lid, %lih, %lim\n", BLUE, NORMAL, BOLD, NORMAL, sys.uptime/60/60/24, sys.uptime/60/60%24, sys.uptime/60%60); + printf(" %s%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\n", BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, NORMAL); + } } -void pkgman() { - int apt, dnf, emerge, flatpak, nix, pacman, rpm, snap, xbps, yay; +int pkgman() { // this is just a function that returns the total of installed packages + int apt, dnf, emerge, flatpak, nix, pacman, rpm, snap, xbps, total = 0; - FILE *fapt = popen("dpkg-query -f '${binary:Package}\n' -W 2>/dev/null | wc -l", "r"); - FILE *fdnf = popen("dnf list installed 2>/dev/null | wc -l", "r"); - FILE *femerge = popen("qlist -I 2>/dev/null | wc -l", "r"); - FILE *fflatpak = popen("flatpak list 2>/dev/null | wc -l", "r"); - FILE *fnix = popen("nix-store -q --requisites /run/current-sys_vartem/sw 2>/dev/null | wc -l", "r"); - FILE *fpacman = popen("pacman -Q 2>/dev/null | wc -l", "r"); - FILE *frpm = popen("rpm -qa --last 2>/dev/null | wc -l", "r"); - FILE *fsnap = popen("snap list 2>/dev/null | wc -l", "r"); - FILE *fxbps = popen("xbps-query -l 2>/dev/null | wc -l", "r"); - FILE *fyay = popen("yay -Q 2>/dev/null | wc -l", "r"); - fscanf(fapt, "%d", &apt); - fscanf(fdnf, "%d", &dnf); - fscanf(femerge, "%d", &emerge); - fscanf(fflatpak, "%d", &flatpak); - fscanf(fnix, "%d", &nix); - fscanf(fpacman, "%d", &pacman); - fscanf(frpm, "%d", &rpm); - fscanf(fsnap, "%d", &snap); - fscanf(fxbps, "%d", &xbps); - fscanf(fyay, "%d", &yay); - fclose(fapt); - fclose(fdnf); - fclose(femerge); - fclose(fflatpak); - fclose(fnix); - fclose(fpacman); - fclose(frpm); - fclose(fsnap); - fclose(fxbps); - fclose(fyay); + FILE *file[9]; + file[0] = popen("dpkg-query -f '${binary:Package}\n' -W 2> /dev/null | wc -l", "r"); + file[1] = popen("dnf list installed 2> /dev/null | wc -l", "r"); + file[2] = popen("qlist -I 2> /dev/null | wc -l", "r"); + file[3] = popen("flatpak list 2> /dev/null | wc -l", "r"); + file[4] = popen("nix-store -q --requisites /run/current-sys_vartem/sw 2> /dev/null | wc -l", "r"); + file[5] = popen("pacman -Qq 2> /dev/null | wc -l", "r"); + file[6] = popen("rpm -qa --last 2> /dev/null | wc -l", "r"); + file[7] = popen("snap list 2> /dev/null | wc -l", "r"); + file[8] = popen("xbps-query -l 2> /dev/null | wc -l", "r"); - int pipe = 0; + fscanf(file[0], "%d", &apt); + fscanf(file[1], "%d", &dnf); + fscanf(file[2], "%d", &emerge); + fscanf(file[3], "%d", &flatpak); + fscanf(file[4], "%d", &nix); + fscanf(file[5], "%d", &pacman); + fscanf(file[6], "%d", &rpm); + fscanf(file[7], "%d", &snap); + fscanf(file[8], "%d", &xbps); + for (int i = 0; i < 9; i++) fclose(file[i]); - if (apt > 0) { - if (pipe == 1) printf(" | "); - printf("apt %d", apt); - pipe = 1; - } - if (dnf > 0) { - if(pipe == 1) printf(" | "); - printf("dnf %d", dnf); - pipe = 1; - } - if (emerge > 0) { - if (pipe == 1) printf(" | "); - printf("emerge %d", emerge); - pipe = 1; - } - if (flatpak > 0) { - if (pipe == 1) printf(" | "); - printf("flatpak %d", flatpak); - pipe = 1; - } - if (nix > 0) { - if (pipe == 1) printf(" | "); - printf("nix %d", nix); - pipe = 1; - } - if (pacman > 0) { - if (pipe == 1) printf(" | "); - printf("pacman %d", pacman); - pipe = 1; - } - if (rpm > 0) { - if (pipe == 1) printf(" | "); - printf("rpm %d", rpm); - pipe = 1; - } - if (snap > 0) { - if (pipe == 1) printf(" | "); - printf("snap %d", snap); - pipe = 1; - } - if (xbps > 0) { - if (pipe == 1) printf(" | "); - printf("xbps %d", xbps); - pipe = 1; - } - if (yay > 0) { - if (pipe == 1) printf(" | "); - printf("yay %d", yay); - pipe = 1; - } - printf("\n"); + if (apt > 0) total += apt; + if (dnf > 0) total += dnf; + if (emerge > 0) total += emerge; + if (flatpak > 0) total += flatpak; + if (nix > 0) total += nix; + if (pacman > 0) total += pacman; + if (rpm > 0) total += rpm; + if (snap > 0) total += snap; + if (xbps > 0) total += xbps; + + return total; }