Introduction
Introduction Statistics Contact Development Disclaimer Help
Replace the non-standard err(3) with our own die() function - lchat - A line or…
git clone git://git.suckless.org/lchat
Log
Files
Refs
README
---
commit 0c1a66c482d9ffa4e0e3f8fdb60aa1a02755da37
parent 6ac420add96b2b3df6364d2c0d170ae8b0d41af5
Author: Tom Schwindl <[email protected]>
Date: Tue, 6 Sep 2022 22:41:08 +0200
Replace the non-standard err(3) with our own die() function
`err.h', which includes err(3) and errx(3), is a BSD extension, using
it hurts portability and replacing it is not hard, it seems obvious to
do it.
Diffstat:
M filter/indent.c | 1 -
M lchat.c | 96 ++++++++++++++++-------------…
M util.c | 26 +++++++++++++++++++++++---
M util.h | 1 +
4 files changed, 72 insertions(+), 52 deletions(-)
---
diff --git a/filter/indent.c b/filter/indent.c
@@ -1,4 +1,3 @@
-#include <err.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/lchat.c b/lchat.c
@@ -16,7 +16,6 @@
#include <sys/ioctl.h>
-#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <libgen.h>
@@ -51,7 +50,7 @@ static void
exit_handler(void)
{
if (tcsetattr(STDIN_FILENO, TCSANOW, &origin_term) == -1)
- err(EXIT_FAILURE, "tcsetattr");
+ die("tcsetattr:");
}
static char *
@@ -66,19 +65,19 @@ read_file_line(const char *file)
return NULL;
if ((fh = fopen(file, "r")) == NULL)
- err(EXIT_FAILURE, "fopen");
+ die("fopen:");
if (fgets(buf, sizeof buf, fh) == NULL)
- err(EXIT_FAILURE, "fgets");
+ die("fgets:");
if (fclose(fh) == EOF)
- err(EXIT_FAILURE, "fclose");
+ die("fclose:");
if ((nl = strchr(buf, '\n')) != NULL) /* delete new line */
*nl = '\0';
if ((line = strdup(buf)) == NULL)
- err(EXIT_FAILURE ,"strdup");
+ die("strdup:");
return line;
}
@@ -89,13 +88,13 @@ line_output(struct slackline *sl, char *file)
int fd;
if ((fd = open(file, O_WRONLY|O_APPEND)) == -1)
- err(EXIT_FAILURE, "open: %s", file);
+ die("open: %s:", file);
if (write(fd, sl->buf, sl->blen) == -1)
- err(EXIT_FAILURE, "write");
+ die("write:");
if (close(fd) == -1)
- err(EXIT_FAILURE, "close");
+ die("close:");
}
static void
@@ -105,33 +104,34 @@ fork_filter(int *read, int *write)
int fds_write[2]; /* lchat -> .filter */
if (pipe(fds_read) == -1)
- err(EXIT_FAILURE, "pipe");
+ die("pipe:");
if (pipe(fds_write) == -1)
- err(EXIT_FAILURE, "pipe");
+ die("pipe:");
switch (fork()) {
case -1:
- err(EXIT_FAILURE, "fork of .filter");
+ die("fork of .filter");
+ break;
case 0: /* child */
if (dup2(fds_read[1], STDOUT_FILENO) == -1)
- err(EXIT_FAILURE, "dup2");
+ die("dup2:");
if (dup2(fds_write[0], STDIN_FILENO) == -1)
- err(EXIT_FAILURE, "dup2");
+ die("dup2:");
if (close(fds_read[0]) == -1)
- err(EXIT_FAILURE, "close");
+ die("close:");
if (close(fds_write[1]) == -1)
- err(EXIT_FAILURE, "close");
+ die("close:");
execl("./.filter", "./.filter", NULL);
- err(EXIT_FAILURE, "exec of .filter");
+ die("exec of .filter");
}
/* parent */
if (close(fds_read[1]) == -1)
- err(EXIT_FAILURE, "close");
+ die("close:");
if (close(fds_write[0]) == -1)
- err(EXIT_FAILURE, "close");
+ die("close:");
*read = fds_read[0];
*write = fds_write[1];
@@ -183,27 +183,27 @@ main(int argc, char *argv[])
errno = 0;
history_len = strtoull(optarg, NULL, 0);
if (errno != 0)
- err(EXIT_FAILURE, "strtoull");
+ die("strtoull:");
break;
case 'i':
if ((in_file = strdup(optarg)) == NULL)
- err(EXIT_FAILURE, "strdup");
+ die("strdup:");
break;
case 'e':
empty_line = true;
break;
case 'o':
if ((out_file = strdup(optarg)) == NULL)
- err(EXIT_FAILURE, "strdup");
+ die("strdup:");
break;
case 'p':
if ((prompt = strdup(optarg)) == NULL)
- err(EXIT_FAILURE, "strdup");
+ die("strdup:");
prompt_len = strlen(prompt);
break;
case 't':
if ((title = strdup(optarg)) == NULL)
- err(EXIT_FAILURE, "strdup");
+ die("strdup:");
break;
case 'u':
ucspi = true;
@@ -222,26 +222,26 @@ main(int argc, char *argv[])
if (argc == 1)
if ((dir = strdup(argv[0])) == NULL)
- err(EXIT_FAILURE, "strdup");
+ die("strdup:");
if (in_file == NULL)
if (asprintf(&in_file, "%s/in", dir) == -1)
- err(EXIT_FAILURE, "asprintf");
+ die("asprintf:");
if (out_file == NULL)
if (asprintf(&out_file, "%s/out", dir) == -1)
- err(EXIT_FAILURE, "asprintf");
+ die("asprintf:");
if (isatty(fd) == 0)
- err(EXIT_FAILURE, "isatty");
+ die("isatty:");
/* set terminal's window title */
if (title == NULL) {
char path[PATH_MAX];
if (getcwd(path, sizeof path) == NULL)
- err(EXIT_FAILURE, "getcwd");
+ die("getcwd:");
if ((title = basename(path)) == NULL)
- err(EXIT_FAILURE, "basename");
+ die("basename:");
}
if (strcmp(getenv("TERM"), "screen") == 0)
printf("\033k%s\033\\", title);
@@ -250,14 +250,14 @@ main(int argc, char *argv[])
/* preprate terminal reset on exit */
if (tcgetattr(fd, &origin_term) == -1)
- err(EXIT_FAILURE, "tcgetattr");
+ die("tcgetattr:");
if (atexit(exit_handler) == -1)
- err(EXIT_FAILURE, "atexit");
+ die("atexit:");
/* prepare terminal */
if (tcgetattr(fd, &term) == -1)
- err(EXIT_FAILURE, "tcgetattr");
+ die("tcgetattr:");
/* TODO: clean up this block. copied from cfmakeraw(3) */
term.c_iflag &= ~(IMAXBEL|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
@@ -269,7 +269,7 @@ main(int argc, char *argv[])
term.c_cc[VTIME] = 0;
if (tcsetattr(fd, TCSANOW, &term) == -1)
- err(EXIT_FAILURE, "tcsetattr");
+ die("tcsetattr:");
/* get the terminal size */
sigwinch(SIGWINCH);
@@ -287,7 +287,7 @@ main(int argc, char *argv[])
history_len, out_file);
if ((fh = popen(tail_cmd, "r")) == NULL)
- err(EXIT_FAILURE, "unable to open pipe to tail");
+ die("unable to open pipe to tail:");
read_fd = fileno(fh);
}
@@ -314,11 +314,11 @@ main(int argc, char *argv[])
for (;;) {
if (fflush(stdout) == EOF)
- err(EXIT_FAILURE, "fflush");
+ die("fflush:");
errno = 0;
if (poll(pfd, nfds, INFTIM) == -1 && errno != EINTR)
- err(EXIT_FAILURE, "poll");
+ die("poll:");
/* moves cursor back after linewrap */
if (loverhang > 0) {
@@ -334,7 +334,7 @@ main(int argc, char *argv[])
ssize_t ret = read(fd, &c, sizeof c);
if (ret == -1)
- err(EXIT_FAILURE, "read");
+ die("read:");
if (ret == 0)
return EXIT_SUCCESS;
@@ -349,7 +349,7 @@ main(int argc, char *argv[])
sl->buf[sl->blen++] = '\n';
if (ucspi) {
if (write(7, sl->buf, sl->blen) == -1)
- err(EXIT_FAILURE, "write");
+ die("write:");
} else {
line_output(sl, in_file);
}
@@ -357,7 +357,7 @@ main(int argc, char *argv[])
break;
default:
if (sl_keystroke(sl, c) == -1)
- errx(EXIT_FAILURE, "sl_keystroke");
+ die("sl_keystroke");
}
}
@@ -365,18 +365,18 @@ main(int argc, char *argv[])
if (pfd[1].revents & POLLHUP)
break;
if (pfd[1].revents & POLLERR || pfd[1].revents & POLLNVAL)
- errx(EXIT_FAILURE, "backend error");
+ die("backend error");
/* handle backend input */
if (pfd[1].revents & POLLIN) {
char buf[BUFSIZ];
ssize_t n = read(pfd[1].fd, buf, sizeof buf);
if (n == 0)
- errx(EXIT_FAILURE, "backend exited");
+ die("backend exited");
if (n == -1)
- err(EXIT_FAILURE, "read");
+ die("read:");
if (write(backend_sink, buf, n) == -1)
- err(EXIT_FAILURE, "write");
+ die("write:");
/* terminate the input buffer with NUL */
buf[n == BUFSIZ ? n - 1 : n] = '\0';
@@ -393,18 +393,18 @@ main(int argc, char *argv[])
break;
if (pfd[2].revents & POLLERR ||
pfd[2].revents & POLLNVAL)
- errx(EXIT_FAILURE, ".filter error");
+ die(".filter error");
/* handle .filter output */
if (pfd[2].revents & POLLIN) {
char buf[BUFSIZ];
ssize_t n = read(pfd[2].fd, buf, sizeof buf);
if (n == 0)
- errx(EXIT_FAILURE, ".filter exited");
+ die(".filter exited");
if (n == -1)
- err(EXIT_FAILURE, "read");
+ die("read:");
if (write(STDOUT_FILENO, buf, n) == -1)
- err(EXIT_FAILURE, "write");
+ die("write:");
}
}
out:
diff --git a/util.c b/util.c
@@ -14,12 +14,32 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <err.h>
+#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
+void
+die(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
+ fputc(' ', stderr);
+ perror(NULL);
+ } else {
+ fputc('\n', stderr);
+ }
+
+ exit(EXIT_FAILURE);
+}
+
bool
bell_match(const char *str, const char *regex_file)
{
@@ -32,10 +52,10 @@ bell_match(const char *str, const char *regex_file)
snprintf(cmd, sizeof cmd, "exec grep -qf %s", regex_file);
if ((fh = popen(cmd, "w")) == NULL)
- err(EXIT_FAILURE, "popen");
+ die("popen:");
if (fputs(str, fh) == EOF)
- err(EXIT_FAILURE, "fputs");
+ die("fputs:");
if (pclose(fh) == 0)
return true;
diff --git a/util.h b/util.h
@@ -2,5 +2,6 @@
#define _UTIL_H_
bool bell_match(const char *str, const char *regex_file);
+void die(const char *fmt, ...);
#endif
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.