From 6db6980e27bdde6f2d444dd3cdd7a46985fa84fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Aptel?= Date: Sat, 28 Aug 2010 03:18:22 +0200 Subject: [PATCH] st now runs on Linux, OpenBSD and FreeBSD. --- Makefile | 5 +++-- config.mk | 13 +++++++------ st.c | 27 ++++++++++++++------------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 9ec8d21..ef3bf09 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ all: options st options: @echo st build options: + @echo "SYSTEM = ${SYSTEM}" @echo "CFLAGS = ${CFLAGS}" @echo "LDFLAGS = ${LDFLAGS}" @echo "CC = ${CC}" @@ -31,7 +32,7 @@ clean: dist: clean @echo creating dist tarball @mkdir -p st-${VERSION} - @cp -R LICENSE Makefile README config.mk st.h ${SRC} st-${VERSION} + @cp -R LICENSE Makefile README config.mk config.h st.info ${SRC} st-${VERSION} @tar -cf st-${VERSION}.tar st-${VERSION} @gzip st-${VERSION}.tar @rm -rf st-${VERSION} @@ -41,7 +42,7 @@ install: all @mkdir -p ${DESTDIR}${PREFIX}/bin @cp -f st ${DESTDIR}${PREFIX}/bin @chmod 755 ${DESTDIR}${PREFIX}/bin/st - @tic st.info + @tic -s st.info uninstall: @echo removing executable file from ${DESTDIR}${PREFIX}/bin diff --git a/config.mk b/config.mk index 2827e98..216e7df 100644 --- a/config.mk +++ b/config.mk @@ -12,16 +12,17 @@ X11LIB = /usr/X11R6/lib # includes and libs INCS = -I. -I/usr/include -I${X11INC} -LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 +LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 -lutil + +# uncomment your system # +#SYSTEM = -DLINUX +#SYSTEM = -DOPENBSD +#SYSTEM = -DFREEBSD # flags -CPPFLAGS = -DVERSION=\"${VERSION}\" +CPPFLAGS = -DVERSION=\"${VERSION}\" ${SYSTEM} CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} LDFLAGS = -s ${LIBS} -# Solaris -#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" -#LDFLAGS = ${LIBS} - # compiler and linker CC = cc diff --git a/st.c b/st.c index 623ca29..9ca032f 100644 --- a/st.c +++ b/st.c @@ -20,6 +20,14 @@ #include #include +#if defined(LINUX) + #include +#elif defined(OPENBSD) + #include +#elif defined(FREEBSD) + #include +#endif + /* Arbitrary sizes */ #define ESC_TITLE_SIZ 256 #define ESC_BUF_SIZ 256 @@ -242,19 +250,12 @@ sigchld(int a) { void ttynew(void) { int m, s; - char *pts; - - if((m = posix_openpt(O_RDWR | O_NOCTTY)) < 0) - die("openpt failed: %s\n", SERRNO); - if(grantpt(m) < 0) - die("grantpt failed: %s\n", SERRNO); - if(unlockpt(m) < 0) - die("unlockpt failed: %s\n", SERRNO); - if(!(pts = ptsname(m))) - die("ptsname failed: %s\n", SERRNO); - if((s = open(pts, O_RDWR | O_NOCTTY)) < 0) - die("Couldn't open slave: %s\n", SERRNO); - fcntl(s, F_SETFL, O_NDELAY); + + /* seems to work fine on linux, openbsd and freebsd */ + struct winsize w = {term.row, term.col, 0, 0}; + if(openpty(&m, &s, NULL, NULL, &w) < 0) + die("openpty failed: %s\n", SERRNO); + switch(pid = fork()) { case -1: die("fork failed\n");