aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xluks_test.sh2
-rw-r--r--src/status.c34
-rw-r--r--src/status.h2
-rw-r--r--src/ui_nask.c40
-rw-r--r--src/ui_statusbar.c10
-rw-r--r--src/ui_statusbar.h2
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, ...);