Rework logging functions - noice - small file browser (mirror / fork from 2f30.… | |
git clone git://git.codemadness.org/noice | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 53c35e6b340b7c135038e00057a198f03cb7d7cf | |
parent cd633c1a0a69dcd6c96079dd922820d09d8d992b | |
Author: sin <[email protected]> | |
Date: Fri, 23 Aug 2019 13:40:57 +0100 | |
Rework logging functions | |
Diffstat: | |
M noice.c | 71 ++++++++++++++++++++---------… | |
1 file changed, 45 insertions(+), 26 deletions(-) | |
--- | |
diff --git a/noice.c b/noice.c | |
@@ -11,6 +11,7 @@ | |
#include <locale.h> | |
#include <regex.h> | |
#include <signal.h> | |
+#include <stdarg.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
@@ -90,16 +91,16 @@ int idle; | |
* '------ | |
*/ | |
-void printmsg(char *); | |
-void printwarn(void); | |
-void printerr(int, char *); | |
+void info(char *, ...); | |
+void warn(char *, ...); | |
+void fatal(char *, ...); | |
void * | |
xrealloc(void *p, size_t size) | |
{ | |
p = realloc(p, size); | |
if (p == NULL) | |
- printerr(1, "realloc"); | |
+ fatal("realloc"); | |
return p; | |
} | |
@@ -114,7 +115,7 @@ xdirname(const char *path) | |
strlcpy(tmp, path, sizeof(tmp)); | |
p = dirname(tmp); | |
if (p == NULL) | |
- printerr(1, "dirname"); | |
+ fatal("dirname"); | |
strlcpy(out, p, sizeof(out)); | |
return out; | |
} | |
@@ -143,7 +144,7 @@ setfilter(regex_t *regex, char *filter) | |
if (len > sizeof(errbuf)) | |
len = sizeof(errbuf); | |
regerror(r, regex, errbuf, len); | |
- printmsg(errbuf); | |
+ info("%s", errbuf); | |
} | |
return r; | |
} | |
@@ -241,33 +242,51 @@ exitcurses(void) | |
/* Messages show up at the bottom */ | |
void | |
-printmsg(char *msg) | |
+info(char *fmt, ...) | |
{ | |
+ char buf[LINE_MAX]; | |
+ va_list ap; | |
+ | |
+ va_start(ap, fmt); | |
+ vsnprintf(buf, sizeof(buf), fmt, ap); | |
+ va_end(ap); | |
move(LINES - 1, 0); | |
- printw("%s\n", msg); | |
+ printw("%s\n", buf); | |
} | |
/* Display warning as a message */ | |
void | |
-printwarn(void) | |
+warn(char *fmt, ...) | |
{ | |
- printmsg(strerror(errno)); | |
+ char buf[LINE_MAX]; | |
+ va_list ap; | |
+ | |
+ va_start(ap, fmt); | |
+ vsnprintf(buf, sizeof(buf), fmt, ap); | |
+ va_end(ap); | |
+ move(LINES - 1, 0); | |
+ printw("%s: %s\n", buf, strerror(errno)); | |
} | |
/* Kill curses and display error before exiting */ | |
void | |
-printerr(int r, char *prefix) | |
+fatal(char *fmt, ...) | |
{ | |
+ va_list ap; | |
+ | |
exitcurses(); | |
- fprintf(stderr, "%s: %s\n", prefix, strerror(errno)); | |
- exit(r); | |
+ va_start(ap, fmt); | |
+ vfprintf(stderr, fmt, ap); | |
+ fprintf(stderr, ": %s\n", strerror(errno)); | |
+ va_end(ap); | |
+ exit(1); | |
} | |
/* Clear the last line */ | |
void | |
clearprompt(void) | |
{ | |
- printmsg(""); | |
+ info(""); | |
} | |
/* Print prompt on the last line */ | |
@@ -275,7 +294,7 @@ void | |
printprompt(char *str) | |
{ | |
clearprompt(); | |
- printw(str); | |
+ info("%s", str); | |
} | |
int | |
@@ -431,7 +450,7 @@ dentfill(char *path, struct entry **dents, | |
mkpath(path, dp->d_name, newpath, sizeof(newpath)); | |
r = lstat(newpath, &sb); | |
if (r == -1) | |
- printerr(1, "lstat"); | |
+ fatal("lstat"); | |
(*dents)[n].mode = sb.st_mode; | |
(*dents)[n].t = sb.st_mtime; | |
n++; | |
@@ -440,7 +459,7 @@ dentfill(char *path, struct entry **dents, | |
/* Should never be null */ | |
r = closedir(dirp); | |
if (r == -1) | |
- printerr(1, "closedir"); | |
+ fatal("closedir"); | |
return n; | |
} | |
@@ -565,7 +584,7 @@ browse(char *ipath, char *ifilter) | |
begin: | |
r = populate(path, oldpath, fltr); | |
if (r == -1) { | |
- printwarn(); | |
+ warn("populate"); | |
goto nochange; | |
} | |
@@ -584,7 +603,7 @@ nochange: | |
goto nochange; | |
dir = xdirname(path); | |
if (canopendir(dir) == 0) { | |
- printwarn(); | |
+ warn("canopendir"); | |
goto nochange; | |
} | |
/* Save history */ | |
@@ -604,12 +623,12 @@ nochange: | |
/* Get path info */ | |
fd = open(newpath, O_RDONLY | O_NONBLOCK); | |
if (fd == -1) { | |
- printwarn(); | |
+ warn("open"); | |
goto nochange; | |
} | |
r = fstat(fd, &sb); | |
if (r == -1) { | |
- printwarn(); | |
+ warn("fstat"); | |
close(fd); | |
goto nochange; | |
} | |
@@ -619,7 +638,7 @@ nochange: | |
switch (sb.st_mode & S_IFMT) { | |
case S_IFDIR: | |
if (canopendir(newpath) == 0) { | |
- printwarn(); | |
+ warn("canopendir"); | |
goto nochange; | |
} | |
strlcpy(path, newpath, sizeof(path)); | |
@@ -632,12 +651,12 @@ nochange: | |
r = spawnlp(path, run, run, newpath, (void *)0… | |
initcurses(); | |
if (r == -1) { | |
- printmsg("Failed to execute plumber"); | |
+ info("Failed to execute plumber"); | |
goto nochange; | |
} | |
continue; | |
default: | |
- printmsg("Unsupported file"); | |
+ info("Unsupported file"); | |
goto nochange; | |
} | |
case SEL_FLTR: | |
@@ -689,7 +708,7 @@ nochange: | |
} | |
mkpath(path, tmp, newpath, sizeof(newpath)); | |
if (canopendir(newpath) == 0) { | |
- printwarn(); | |
+ warn("canopendir"); | |
goto nochange; | |
} | |
strlcpy(path, newpath, sizeof(path)); | |
@@ -704,7 +723,7 @@ nochange: | |
goto nochange; | |
} | |
if (canopendir(tmp) == 0) { | |
- printwarn(); | |
+ warn("canopendir"); | |
goto nochange; | |
} | |
strlcpy(path, tmp, sizeof(path)); |