X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/a4fe8c97414f07dd8b891e0d325dd2733195151d..86849d295b1eb9e18746d8a4fa196fe7b9dce0dc:/slstatus.c?ds=inline

diff --git a/slstatus.c b/slstatus.c
index 7ff323f..96fa5b6 100644
--- a/slstatus.c
+++ b/slstatus.c
@@ -17,7 +17,6 @@ struct arg {
 	const char *args;
 };
 
-char *argv0;
 char buf[1024];
 static int done;
 static Display *dpy;
@@ -37,14 +36,13 @@ difftimespec(struct timespec *res, struct timespec *a, struct timespec *b)
 {
 	res->tv_sec = a->tv_sec - b->tv_sec - (a->tv_nsec < b->tv_nsec);
 	res->tv_nsec = a->tv_nsec - b->tv_nsec +
-	               (a->tv_nsec < b->tv_nsec) * 1000000000;
+	               (a->tv_nsec < b->tv_nsec) * 1E9;
 }
 
 static void
 usage(void)
 {
-	fprintf(stderr, "usage: %s [-s]\n", argv0);
-	exit(1);
+	die("usage: %s [-s]", argv0);
 }
 
 int
@@ -75,19 +73,13 @@ main(int argc, char *argv[])
 	sigaction(SIGINT,  &act, NULL);
 	sigaction(SIGTERM, &act, NULL);
 
-	if (sflag) {
-		setbuf(stdout, NULL);
-	}
-
 	if (!sflag && !(dpy = XOpenDisplay(NULL))) {
-		fprintf(stderr, "XOpenDisplay: Failed to open display\n");
-		return 1;
+		die("XOpenDisplay: Failed to open display");
 	}
 
 	while (!done) {
 		if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) {
-			fprintf(stderr, "clock_gettime: %s\n", strerror(errno));
-			return 1;
+			die("clock_gettime:");
 		}
 
 		status[0] = '\0';
@@ -95,47 +87,40 @@ main(int argc, char *argv[])
 			if (!(res = args[i].func(args[i].args))) {
 				res = unknown_str;
 			}
-			if ((ret = snprintf(status + len, sizeof(status) - len,
+			if ((ret = esnprintf(status + len, sizeof(status) - len,
 			                    args[i].fmt, res)) < 0) {
-				fprintf(stderr, "snprintf: %s\n",
-				        strerror(errno));
-				break;
-			} else if ((size_t)ret >= sizeof(status) - len) {
-				fprintf(stderr, "snprintf: Output truncated\n");
 				break;
 			}
 			len += ret;
 		}
 
 		if (sflag) {
-			printf("%s\n", status);
+			puts(status);
+			fflush(stdout);
+			if (ferror(stdout))
+				die("puts:");
 		} else {
-			if (XStoreName(dpy, DefaultRootWindow(dpy), status) < 0) {
-				fprintf(stderr,
-				        "XStoreName: Allocation failed\n");
-				return 1;
+			if (XStoreName(dpy, DefaultRootWindow(dpy), status)
+                            < 0) {
+				die("XStoreName: Allocation failed");
 			}
 			XFlush(dpy);
 		}
 
 		if (!done) {
 			if (clock_gettime(CLOCK_MONOTONIC, &current) < 0) {
-				fprintf(stderr, "clock_gettime: %s\n",
-				        strerror(errno));
-				return 1;
+				die("clock_gettime:");
 			}
 			difftimespec(&diff, &current, &start);
 
 			intspec.tv_sec = interval / 1000;
-			intspec.tv_nsec = (interval % 1000) * 1000000;
+			intspec.tv_nsec = (interval % 1000) * 1E6;
 			difftimespec(&wait, &intspec, &diff);
 
 			if (wait.tv_sec >= 0) {
 				if (nanosleep(&wait, NULL) < 0 &&
 				    errno != EINTR) {
-					fprintf(stderr, "nanosleep: %s\n",
-					        strerror(errno));
-					return 1;
+					die("nanosleep:");
 				}
 			}
 		}
@@ -144,9 +129,7 @@ main(int argc, char *argv[])
 	if (!sflag) {
 		XStoreName(dpy, DefaultRootWindow(dpy), NULL);
 		if (XCloseDisplay(dpy) < 0) {
-			fprintf(stderr,
-			        "XCloseDisplay: Failed to close display\n");
-			return 1;
+			die("XCloseDisplay: Failed to close display");
 		}
 	}