aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2008-06-22 21:52:41 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2008-06-22 21:52:41 +0000
commita52be0e194f10e21e8f094a908e3afe9abfce8ae (patch)
tree2954cb870cb8e88d1bcbe5f48b2a1d5ecdaa08d7
parentc4d09c0511f051ea95f65b39712366d1e4479630 (diff)
downloadrtmux-a52be0e194f10e21e8f094a908e3afe9abfce8ae.tar.gz
rtmux-a52be0e194f10e21e8f094a908e3afe9abfce8ae.tar.bz2
rtmux-a52be0e194f10e21e8f094a908e3afe9abfce8ae.zip
More missing bits from Solaris.
-rw-r--r--GNUmakefile6
-rw-r--r--compat/fgetln.c80
-rw-r--r--tmux.h7
3 files changed, 89 insertions, 4 deletions
diff --git a/GNUmakefile b/GNUmakefile
index ada75cd9..1ad644e8 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,4 +1,4 @@
-# $Id: GNUmakefile,v 1.29 2008-06-21 10:21:05 nicm Exp $
+# $Id: GNUmakefile,v 1.30 2008-06-22 21:52:41 nicm Exp $
.PHONY: clean
@@ -56,9 +56,9 @@ INSTALLMAN= install -g bin -o root -m 444
ifeq ($(shell uname),SunOS)
INCDIRS+= -Icompat -I/usr/local/include/ncurses
SRCS+= compat/strtonum.c compat/daemon.c compat/forkpty-sunos.c \
- compat/asprintf.c
+ compat/asprintf.c compat/fgetln.c
CFLAGS+= -DNO_STRTONUM -DNO_TREE_H -DNO_PATHS_H -DNO_SETPROCTITLE \
- -DNO_DAEMON -DNO_FORKPTY -DNO_PROGNAME -DNO_ASPRINTF
+ -DNO_DAEMON -DNO_FORKPTY -DNO_PROGNAME -DNO_ASPRINTF -DNO_FGETLN
LDFLAGS+= -L/usr/local/lib
LIBS+= -lsocket -lnsl
endif
diff --git a/compat/fgetln.c b/compat/fgetln.c
new file mode 100644
index 00000000..639ce49c
--- /dev/null
+++ b/compat/fgetln.c
@@ -0,0 +1,80 @@
+/* $NetBSD: fgetln.c,v 1.3 2007/08/07 02:06:58 lukem Exp $ */
+
+/*-
+ * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tmux.h"
+
+char *
+fgetln(fp, len)
+ FILE *fp;
+ size_t *len;
+{
+ static char *buf = NULL;
+ static size_t bufsiz = 0;
+ char *ptr;
+
+
+ if (buf == NULL) {
+ bufsiz = BUFSIZ;
+ if ((buf = malloc(bufsiz)) == NULL)
+ return NULL;
+ }
+
+ if (fgets(buf, bufsiz, fp) == NULL)
+ return NULL;
+
+ *len = 0;
+ while ((ptr = strchr(&buf[*len], '\n')) == NULL) {
+ size_t nbufsiz = bufsiz + BUFSIZ;
+ char *nbuf = realloc(buf, nbufsiz);
+
+ if (nbuf == NULL) {
+ int oerrno = errno;
+ free(buf);
+ errno = oerrno;
+ buf = NULL;
+ return NULL;
+ } else
+ buf = nbuf;
+
+ *len = bufsiz;
+ if (fgets(&buf[bufsiz], BUFSIZ, fp) == NULL)
+ return buf;
+
+ bufsiz = nbufsiz;
+ }
+
+ *len = (ptr - buf) + 1;
+ return buf;
+}
+
diff --git a/tmux.h b/tmux.h
index 16010d37..47daf108 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1,4 +1,4 @@
-/* $Id: tmux.h,v 1.162 2008-06-22 16:54:08 nicm Exp $ */
+/* $Id: tmux.h,v 1.163 2008-06-22 21:52:41 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -812,6 +812,11 @@ int asprintf(char **, const char *, ...);
int vasprintf(char **, const char *, va_list);
#endif
+#ifdef NO_FGETLN
+/* fgetln.c */
+char *fgetln(FILE *, size_t *);
+#endif
+
/* tmux.c */
extern volatile sig_atomic_t sigwinch;
extern volatile sig_atomic_t sigterm;