aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2022-05-24 12:05:56 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2022-05-24 12:08:12 +0200
commit0c42082067500c0dae3237f918e8c80c0971f766 (patch)
treede047612936c42824464f773ea720a70fa25d7f5
parent776800dd45eaad0785add6b476af9714b446132e (diff)
downloadcenter-0c42082067500c0dae3237f918e8c80c0971f766.tar.xz
Use /dev/tty instead of stdout to get terminal size
-rw-r--r--center.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/center.c b/center.c
index 1b03084..a08e9e7 100644
--- a/center.c
+++ b/center.c
@@ -1,12 +1,15 @@
#define _POSIX_C_SOURCE 200809L
#define _XOPEN_SOURCE
+#include <fcntl.h>
+#include <locale.h>
#include <stdio.h>
-#include <wchar.h>
#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <termios.h>
#include <unistd.h>
-#include <sys/ioctl.h>
-#include <locale.h>
+#include <wchar.h>
#define ERR(str) { perror(str); err = EXIT_FAILURE; goto end; }
@@ -22,9 +25,15 @@ int main()
ssize_t len;
int err = EXIT_SUCCESS;
+ int tty_fd = open("/dev/tty", O_RDWR);
+ if (tty_fd < 0) {
+ perror("open");
+ return EXIT_FAILURE;
+ }
+
while ((len = getline(&buf, &siz, stdin)) > 0) {
struct winsize ws;
- if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0) ERR("ioctl")
+ if (ioctl(tty_fd, TIOCGWINSZ, &ws) < 0) ERR("ioctl")
int term_width = ws.ws_col;
@@ -61,6 +70,8 @@ int main()
}
end:
+ close(tty_fd);
+
if (buf)
free(buf);