diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2019-03-08 17:48:03 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2019-03-08 17:48:03 +0100 |
commit | 035fbcc25e951b5180d7491cc0a11e514a20f9f7 (patch) | |
tree | 85b93c35c62ca70e37983a066035e591f58bafce | |
parent | 5d95abdee246b6dbb1643f13e916e91700f133aa (diff) |
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
-rwxr-xr-x | luks_test.sh | 2 | ||||
-rw-r--r-- | src/status.c | 34 | ||||
-rw-r--r-- | src/status.h | 2 | ||||
-rw-r--r-- | src/ui_nask.c | 40 | ||||
-rw-r--r-- | src/ui_statusbar.c | 10 | ||||
-rw-r--r-- | src/ui_statusbar.h | 2 |
6 files changed, 60 insertions, 30 deletions
diff --git a/luks_test.sh b/luks_test.sh index 0f9d0f8..11fa605 100755 --- a/luks_test.sh +++ b/luks_test.sh @@ -21,7 +21,7 @@ if [ -w ${FILE} ]; then fi if [ ! -w ${FILE} ] || [ `file ${FILE} | grep -qoE 'LUKS encrypted file' && echo 0 || echo 1` -ne 0 ]; then - dd if=/dev/zero of=${FILE} bs=1M count=10 + dd if=/dev/zero of=${FILE} bs=1M count=50 /sbin/cryptsetup luksFormat ${FILE} fi diff --git a/src/status.c b/src/status.c index e545339..8a8cd44 100644 --- a/src/status.c +++ b/src/status.c @@ -4,28 +4,48 @@ #include <stdlib.h> #include <errno.h> #include <fcntl.h> +#include <string.h> #include <sys/sysinfo.h> #include "status.h" +static const char *sysinfo_error = "[SYSINFO ERROR]"; +static const char *asprintf_error = "[ASPRINTF ERROR]"; + char * -get_system_stat(void) +get_system_stat(size_t *siz) { + size_t retsiz = 0; char *retstr = NULL; int ncpu; struct sysinfo inf; if (sysinfo(&inf) == EFAULT) { - return ("[SYSINFO ERROR]"); + if (siz) { + *siz = strlen(sysinfo_error); + } + return (strdup(sysinfo_error)); } ncpu = get_nprocs(); - if (asprintf(&retstr, "u:%04ld - l:%3.2f,%3.2f,%3.2f - %dcore%s - mem:%lu/%lumb - procs:%02d", - inf.uptime, ((float)inf.loads[0]/10000), ((float)inf.loads[1]/10000), ((float)inf.loads[2]/10000), - ncpu, (ncpu > 1 ? "s" : ""), - (unsigned long)((inf.freeram/1024)/1024), (unsigned long)((inf.totalram/1024)/1024), inf.procs) == -1) { - return ("[ASPRINTF ERROR]"); + retsiz = asprintf(&retstr, "u:%04ld - l:%3.2f,%3.2f,%3.2f - %dcore%s - " + "mem:%lu/%lumb - procs:%02d", + inf.uptime, ((float)inf.loads[0]/10000), + ((float)inf.loads[1]/10000), ((float)inf.loads[2]/10000), + ncpu, (ncpu > 1 ? "s" : ""), + (unsigned long)((inf.freeram/1024)/1024), + (unsigned long)((inf.totalram/1024)/1024), inf.procs); + + if (retsiz < 0) { + if (siz) { + *siz = strlen(asprintf_error); + } + return (strdup(asprintf_error)); } + if (siz) { + *siz = retsiz; + } + return (retstr); } diff --git a/src/status.h b/src/status.h index 995d08a..a69521a 100644 --- a/src/status.h +++ b/src/status.h @@ -2,6 +2,6 @@ #define STATUS_H 1 char * -get_system_stat(void); +get_system_stat(size_t *siz); #endif diff --git a/src/ui_nask.c b/src/ui_nask.c index cb6cb3b..73b2f83 100644 --- a/src/ui_nask.c +++ b/src/ui_nask.c @@ -43,14 +43,17 @@ static unsigned int netupd = 0; static char *title = NULL; static char *untext = NULL; static char busy_str[BSTR_LEN+1] = ".\0\0\0"; +static const char *netinfo_error = "[NETINFO FAILED]"; static int lower_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) { + size_t tmpsiz; + if (ui_timeout == FALSE) return DOUI_OK; - char *tmp = get_system_stat(); - set_statusbar_text(bar, tmp); + char *tmp = get_system_stat(&tmpsiz); + set_statusbar_text(bar, tmp, tmpsiz); free(tmp); return DOUI_OK; } @@ -67,7 +70,7 @@ netinfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) if (ui_timeout == TRUE) { if (netupd == 0) { netupd = NETUPD_INTERVAL; - size_t len = 0; + ssize_t len = 0; char buf[NETUPD_STRLEN+1]; char *dev = NULL, *gwIp, *myIp; memset(buf, '\0', NETUPD_STRLEN+1); @@ -76,12 +79,12 @@ netinfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) #ifdef HAVE_RESOLVE char *dom, *srv; if (utGetDomainInfo(&dom, &srv) == 0) { - snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s // dns: %s // domain: %s", dev, myIp, gwIp, srv, dom); + len = snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s // dns: %s // domain: %s", dev, myIp, gwIp, srv, dom); } free(dom); free(srv); #else - snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s", dev, myIp, gwIp); + len = snprintf(buf, NETUPD_STRLEN, "netdev: %s // address: %s // gateway: %s", dev, myIp, gwIp); #endif free(myIp); } @@ -89,7 +92,10 @@ netinfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) } if (dev) free(dev); - set_statusbar_text(bar, buf); + if (len > 0) + set_statusbar_text(bar, buf, len); + else + set_statusbar_text(bar, netinfo_error, strlen(netinfo_error)); } else { netupd--; } @@ -100,6 +106,8 @@ netinfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) static int uninfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) { + ssize_t len = -1; + if (untext == NULL) { #ifdef HAVE_UNAME char *sysop; @@ -107,20 +115,19 @@ uninfo_statusbar_update(WINDOW *win, struct statusbar *bar, bool ui_timeout) char *sysmachine; if (utGetUnameInfo(&sysop, &sysrelease, &sysmachine) == 0) { - int ret = asprintf(&untext, "%s v%s (%s)", sysop, sysrelease, sysmachine); + len = asprintf(&untext, "%s v%s (%s)", sysop, sysrelease, sysmachine); free(sysop); free(sysrelease); free(sysmachine); - if (ret < 0) { - return UICB_ERR_BUF; - } } else #endif - if (asprintf(&untext, "%s", "[unknown kernel]") < 0) { - return UICB_ERR_BUF; + { + len = asprintf(&untext, "%s", "[unknown kernel]"); } - set_statusbar_text(bar, untext); + if (len < 0) + return UICB_ERR_BUF; + set_statusbar_text(bar, untext, len); } return DOUI_OK; } @@ -216,7 +223,10 @@ passwd_input_cb(WINDOW *wnd, void *data, int key) static void init_ui_elements(unsigned int max_x, unsigned int max_y) { - assert(asprintf(&title, "/* %s-%s */", PKGNAME, VERSION) > 0); + ssize_t title_len; + + title_len = asprintf(&title, "/* %s-%s */", PKGNAME, VERSION); + assert( title_len > 0 ); pw_input = init_input((unsigned int)(max_x / 2)-PASSWD_XRELPOS, (unsigned int)(max_y / 2)-PASSWD_YRELPOS, PASSWD_WIDTH, "PASSWORD: ", @@ -244,7 +254,7 @@ init_ui_elements(unsigned int max_x, unsigned int max_y) register_txtwindow(busywnd); register_txtwindow(errwnd); activate_input(pw_input); - set_statusbar_text(higher, title); + set_statusbar_text(higher, title, title_len); } static void diff --git a/src/ui_statusbar.c b/src/ui_statusbar.c index 03a77ac..9d4cd8a 100644 --- a/src/ui_statusbar.c +++ b/src/ui_statusbar.c @@ -71,10 +71,8 @@ register_statusbar(struct statusbar *a) } inline void -set_statusbar_text(struct statusbar *a, const char *text) +set_statusbar_text(struct statusbar *a, const char *text, size_t len) { - size_t len = strlen(text); - strncpy(a->text, text, (len > a->width ? a->width : len)); } @@ -86,7 +84,9 @@ set_statusbar_textf(struct statusbar *a, const char *format, ...) va_start(ap, format); int ret = vasprintf(&str, format, ap); va_end(ap); - if (ret != -1) - set_statusbar_text(a, str); + if (ret >= 0) { + set_statusbar_text(a, str, ret); + free(str); + } return ret; } diff --git a/src/ui_statusbar.h b/src/ui_statusbar.h index ed0c67c..7f36c11 100644 --- a/src/ui_statusbar.h +++ b/src/ui_statusbar.h @@ -27,7 +27,7 @@ void register_statusbar(struct statusbar *a); void -set_statusbar_text(struct statusbar *a, const char *text); +set_statusbar_text(struct statusbar *a, const char *text, size_t len); int set_statusbar_textf(struct statusbar *a, const char *format, ...); |