diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-04-29 22:25:20 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-04-29 22:25:20 +0000 |
commit | cc9cc1aea8694dec3067246d4483bb3c2860592e (patch) | |
tree | 852e36aecb8ebaae8b3b114b9abeecf61d5adfc3 | |
parent | 323b7cbfbea012ab9358b639c089012a84552bc6 (diff) | |
download | rtmux-cc9cc1aea8694dec3067246d4483bb3c2860592e.tar.gz rtmux-cc9cc1aea8694dec3067246d4483bb3c2860592e.tar.bz2 rtmux-cc9cc1aea8694dec3067246d4483bb3c2860592e.zip |
Some tweaks for Solaris.
Get rid of vis.* in favour of a small replacement function.
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | GNUmakefile | 17 | ||||
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | cmd-server-info.c | 16 | ||||
-rw-r--r-- | compat/getopt.h | 2 | ||||
-rw-r--r-- | compat/vis.c | 219 | ||||
-rw-r--r-- | compat/vis.h | 84 | ||||
-rw-r--r-- | tmux.h | 3 | ||||
-rw-r--r-- | util.c | 22 |
9 files changed, 49 insertions, 326 deletions
@@ -1,3 +1,8 @@ +29 April 2009 + +* Get rid of compat/vis.* - only one function was used which is easily + replaced,and less compat code == good. + 27 April 2009 * Avoid using the prompt history when the server is locked, and prevent any @@ -1224,7 +1229,7 @@ (including mutt, emacs). No status bar yet and no key remapping or other customisation. -$Id: CHANGES,v 1.277 2009-04-27 13:56:51 tcunha Exp $ +$Id: CHANGES,v 1.278 2009-04-29 22:25:20 nicm Exp $ LocalWords: showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr LocalWords: rivo nurges lscm Erdely eol smysession mysession ek dstname RB ms diff --git a/GNUmakefile b/GNUmakefile index 01d890df..4de45126 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,4 +1,4 @@ -# $Id: GNUmakefile,v 1.84 2009-04-27 13:21:15 tcunha Exp $ +# $Id: GNUmakefile,v 1.85 2009-04-29 22:25:20 nicm Exp $ .PHONY: clean @@ -71,7 +71,7 @@ INSTALLMAN= install -g bin -o root -m 444 ifeq ($(shell uname),AIX) INCDIRS+= -I/usr/local/include/ncurses -Icompat -SRCS+= compat/vis.c compat/strlcpy.c compat/strlcat.c compat/strtonum.c \ +SRCS+= compat/strlcpy.c compat/strlcat.c compat/strtonum.c \ compat/fgetln.c compat/asprintf.c compat/daemon.c compat/forkpty-aix.c \ compat/getopt_long.c compat/bsd-poll.c CFLAGS+= -DNO_TREE_H -DNO_ASPRINTF -DNO_QUEUE_H -DNO_VSYSLOG \ @@ -93,18 +93,19 @@ LIBS+= -lgen endif ifeq ($(shell uname),SunOS) -INCDIRS+= -Icompat -I/usr/local/include/ncurses +INCDIRS+= -Icompat -I/usr/include/ncurses SRCS+= compat/strtonum.c compat/daemon.c compat/forkpty-sunos.c \ - compat/asprintf.c compat/fgetln.c compat/vis.c + compat/asprintf.c compat/fgetln.c compat/getopt.c CFLAGS+= -DNO_STRTONUM -DNO_TREE_H -DNO_PATHS_H -DNO_SETPROCTITLE \ - -DNO_DAEMON -DNO_FORKPTY -DNO_PROGNAME -DNO_ASPRINTF -DNO_FGETLN -LDFLAGS+= -L/usr/local/lib + -DNO_DAEMON -DNO_FORKPTY -DNO_PROGNAME -DNO_ASPRINTF -DNO_FGETLN \ + -DBROKEN_GETOPT +LDFLAGS+= -L/usr/gnu/lib LIBS+= -lsocket -lnsl endif ifeq ($(shell uname),Darwin) INCDIRS+= -Icompat -SRCS+= compat/strtonum.c compat/bsd-poll.c compat/vis.c +SRCS+= compat/strtonum.c compat/bsd-poll.c CFLAGS+= -DNO_STRTONUM -DNO_SETRESUID -DNO_SETRESGID -DNO_SETPROCTITLE \ -DNO_QUEUE_H -DNO_TREE_H -DBROKEN_POLL endif @@ -112,7 +113,7 @@ endif ifeq ($(shell uname),Linux) INCDIRS+= -Icompat SRCS+= compat/strlcpy.c compat/strlcat.c compat/strtonum.c \ - compat/fgetln.c compat/getopt_long.c compat/vis.c + compat/fgetln.c compat/getopt_long.c CFLAGS+= $(shell getconf LFS_CFLAGS) -D_GNU_SOURCE \ -DNO_STRLCPY -DNO_STRLCAT -DNO_STRTONUM -DNO_SETPROCTITLE \ -DNO_QUEUE_H -DNO_TREE_H -DUSE_PTY_H -DNO_FGETLN \ @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.125 2009-04-27 18:10:10 nicm Exp $ +# $Id: Makefile,v 1.126 2009-04-29 22:25:20 nicm Exp $ .SUFFIXES: .c .o .y .h .PHONY: clean update-index.html upload-index.html @@ -84,7 +84,6 @@ LIBS+= -lutil -lncurses # FreeBSD and DragonFly .if ${OS} == "FreeBSD" || ${OS} == "DragonFly" INCDIRS+= -Icompat -SRCS+= compat/vis.c CFLAGS+= -DUSE_LIBUTIL_H -DNO_QUEUE_H -DNO_TREE_H LIBS+= -lcrypt .endif @@ -92,7 +91,7 @@ LIBS+= -lcrypt # NetBSD .if ${OS} == "NetBSD" INCDIRS+= -Icompat -SRCS+= compat/strtonum.c compat/vis.c +SRCS+= compat/strtonum.c LIBS+= -lcrypt CFLAGS+=-DNO_STRTONUM -DNO_QUEUE_H .endif diff --git a/cmd-server-info.c b/cmd-server-info.c index 4cbd59aa..c6573cda 100644 --- a/cmd-server-info.c +++ b/cmd-server-info.c @@ -1,4 +1,4 @@ -/* $Id: cmd-server-info.c,v 1.14 2009-04-02 23:28:16 nicm Exp $ */ +/* $Id: cmd-server-info.c,v 1.15 2009-04-29 22:25:20 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> @@ -23,7 +23,6 @@ #include <string.h> #include <time.h> #include <unistd.h> -#include <vis.h> #include "tmux.h" @@ -60,7 +59,7 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) struct utsname un; struct grid *gd; u_int i, j, k; - char out[BUFSIZ]; + char out[80]; char *tim; time_t t; u_int lines, ulines; @@ -115,8 +114,9 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) RB_FOREACH(wl, winlinks, &s->windows) { w = wl->window; ctx->print(ctx, "%4u: %p/%p %s [%ux%u] [flags=0x%x, " - "references=%u, layout=%u]", wl->idx, wl, w, w->name, - w->sx, w->sy, w->flags, w->references, w->layout); + "references=%u, layout=%u]", wl->idx, wl, w, + w->name, w->sx, w->sy, w->flags, w->references, + w->layout); j = 0; TAILQ_FOREACH(wp, &w->panes, entry) { lines = ulines = size = usize = 0; @@ -157,10 +157,8 @@ cmd_server_info_exec(unused struct cmd *self, struct cmd_ctx *ctx) ent->code, ent->name); break; case TTYCODE_STRING: - strnvis(out, code->value.string, - sizeof out, VIS_OCTAL|VIS_WHITE); - out[(sizeof out) - 1] = '\0'; - + clean_string( + code->value.string, out, sizeof out); ctx->print(ctx, "%2u: %s: (string) %s", ent->code, ent->name, out); break; diff --git a/compat/getopt.h b/compat/getopt.h index aab7fe2e..92935a5a 100644 --- a/compat/getopt.h +++ b/compat/getopt.h @@ -33,7 +33,9 @@ #ifndef _GETOPT_H_ #define _GETOPT_H_ +#if !defined (__SVR4) || !defined (__sun) #include <sys/cdefs.h> +#endif /* * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions diff --git a/compat/vis.c b/compat/vis.c deleted file mode 100644 index 8e44ad73..00000000 --- a/compat/vis.c +++ /dev/null @@ -1,219 +0,0 @@ -/* $OpenBSD: vis.c,v 1.19 2005/09/01 17:15:49 millert Exp $ */ -/*- - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * 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 University 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 REGENTS 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 REGENTS 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 <sys/types.h> -#include <limits.h> -#include <ctype.h> -#include <string.h> -#include <vis.h> - -#define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') -#define isvisible(c) \ - (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ - (((c) != '*' && (c) != '?' && (c) != '[' && (c) != '#') || \ - (flag & VIS_GLOB) == 0) && isgraph((u_char)(c))) || \ - ((flag & VIS_SP) == 0 && (c) == ' ') || \ - ((flag & VIS_TAB) == 0 && (c) == '\t') || \ - ((flag & VIS_NL) == 0 && (c) == '\n') || \ - ((flag & VIS_SAFE) && ((c) == '\b' || \ - (c) == '\007' || (c) == '\r' || \ - isgraph((u_char)(c))))) - -/* - * vis - visually encode characters - */ -char * -vis(char *dst, int c, int flag, int nextc) -{ - if (isvisible(c)) { - *dst++ = c; - if (c == '\\' && (flag & VIS_NOSLASH) == 0) - *dst++ = '\\'; - *dst = '\0'; - return (dst); - } - - if (flag & VIS_CSTYLE) { - switch(c) { - case '\n': - *dst++ = '\\'; - *dst++ = 'n'; - goto done; - case '\r': - *dst++ = '\\'; - *dst++ = 'r'; - goto done; - case '\b': - *dst++ = '\\'; - *dst++ = 'b'; - goto done; - case '\a': - *dst++ = '\\'; - *dst++ = 'a'; - goto done; - case '\v': - *dst++ = '\\'; - *dst++ = 'v'; - goto done; - case '\t': - *dst++ = '\\'; - *dst++ = 't'; - goto done; - case '\f': - *dst++ = '\\'; - *dst++ = 'f'; - goto done; - case ' ': - *dst++ = '\\'; - *dst++ = 's'; - goto done; - case '\0': - *dst++ = '\\'; - *dst++ = '0'; - if (isoctal(nextc)) { - *dst++ = '0'; - *dst++ = '0'; - } - goto done; - } - } - if (((c & 0177) == ' ') || (flag & VIS_OCTAL) || - ((flag & VIS_GLOB) && (c == '*' || c == '?' || c == '[' || c == '#'))) { - *dst++ = '\\'; - *dst++ = ((u_char)c >> 6 & 07) + '0'; - *dst++ = ((u_char)c >> 3 & 07) + '0'; - *dst++ = ((u_char)c & 07) + '0'; - goto done; - } - if ((flag & VIS_NOSLASH) == 0) - *dst++ = '\\'; - if (c & 0200) { - c &= 0177; - *dst++ = 'M'; - } - if (iscntrl((u_char)c)) { - *dst++ = '^'; - if (c == 0177) - *dst++ = '?'; - else - *dst++ = c + '@'; - } else { - *dst++ = '-'; - *dst++ = c; - } -done: - *dst = '\0'; - return (dst); -} - -/* - * strvis, strnvis, strvisx - visually encode characters from src into dst - * - * Dst must be 4 times the size of src to account for possible - * expansion. The length of dst, not including the trailing NULL, - * is returned. - * - * Strnvis will write no more than siz-1 bytes (and will NULL terminate). - * The number of bytes needed to fully encode the string is returned. - * - * Strvisx encodes exactly len bytes from src into dst. - * This is useful for encoding a block of data. - */ -int -strvis(char *dst, const char *src, int flag) -{ - char c; - char *start; - - for (start = dst; (c = *src);) - dst = vis(dst, c, flag, *++src); - *dst = '\0'; - return (dst - start); -} - -int -strnvis(char *dst, const char *src, size_t siz, int flag) -{ - char *start, *end; - char tbuf[5]; - int c, i; - - i = 0; - for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) { - if (isvisible(c)) { - i = 1; - *dst++ = c; - if (c == '\\' && (flag & VIS_NOSLASH) == 0) { - /* need space for the extra '\\' */ - if (dst < end) - *dst++ = '\\'; - else { - dst--; - i = 2; - break; - } - } - src++; - } else { - i = vis(tbuf, c, flag, *++src) - tbuf; - if (dst + i <= end) { - memcpy(dst, tbuf, i); - dst += i; - } else { - src--; - break; - } - } - } - if (siz > 0) - *dst = '\0'; - if (dst + i > end) { - /* adjust return value for truncation */ - while ((c = *src)) - dst += vis(tbuf, c, flag, *++src) - tbuf; - } - return (dst - start); -} - -int -strvisx(char *dst, const char *src, size_t len, int flag) -{ - char c; - char *start; - - for (start = dst; len > 1; len--) { - c = *src; - dst = vis(dst, c, flag, *++src); - } - if (len) - dst = vis(dst, *src, flag, '\0'); - *dst = '\0'; - return (dst - start); -} diff --git a/compat/vis.h b/compat/vis.h deleted file mode 100644 index d4a43af5..00000000 --- a/compat/vis.h +++ /dev/null @@ -1,84 +0,0 @@ -/* $OpenBSD: vis.h,v 1.11 2005/08/09 19:38:31 millert Exp $ */ -/* $NetBSD: vis.h,v 1.4 1994/10/26 00:56:41 cgd Exp $ */ - -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * 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 University 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 REGENTS 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 REGENTS 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. - * - * @(#)vis.h 5.9 (Berkeley) 4/3/91 - */ - -#ifndef _VIS_H_ -#define _VIS_H_ - -/* - * to select alternate encoding format - */ -#define VIS_OCTAL 0x01 /* use octal \ddd format */ -#define VIS_CSTYLE 0x02 /* use \[nrft0..] where appropriate */ - -/* - * to alter set of characters encoded (default is to encode all - * non-graphic except space, tab, and newline). - */ -#define VIS_SP 0x04 /* also encode space */ -#define VIS_TAB 0x08 /* also encode tab */ -#define VIS_NL 0x10 /* also encode newline */ -#define VIS_WHITE (VIS_SP | VIS_TAB | VIS_NL) -#define VIS_SAFE 0x20 /* only encode "unsafe" characters */ - -/* - * other - */ -#define VIS_NOSLASH 0x40 /* inhibit printing '\' */ -#define VIS_GLOB 0x100 /* encode glob(3) magics and '#' */ - -/* - * unvis return codes - */ -#define UNVIS_VALID 1 /* character valid */ -#define UNVIS_VALIDPUSH 2 /* character valid, push back passed char */ -#define UNVIS_NOCHAR 3 /* valid sequence, no character produced */ -#define UNVIS_SYNBAD -1 /* unrecognized escape sequence */ -#define UNVIS_ERROR -2 /* decoder in unknown state (unrecoverable) */ - -/* - * unvis flags - */ -#define UNVIS_END 1 /* no more characters */ - -#include <sys/cdefs.h> - -char *vis(char *, int, int, int); -int strvis(char *, const char *, int); -int strnvis(char *, const char *, size_t, int); -int strvisx(char *, const char *, size_t, int); -int strunvis(char *, const char *); -int unvis(char *, char, int *, int); -ssize_t strnunvis(char *, const char *, size_t); - -#endif /* !_VIS_H_ */ @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.304 2009-04-29 17:50:52 nicm Exp $ */ +/* $Id: tmux.h,v 1.305 2009-04-29 22:25:20 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1605,6 +1605,7 @@ int utf8_width(u_int); /* util.c */ char *section_string(char *, size_t, size_t, size_t); +void clean_string(const char *, char *, size_t); /* osdep-*.c */ char *osdep_get_name(int, char *); @@ -1,4 +1,4 @@ -/* $Id: util.c,v 1.1 2009-01-18 17:20:52 nicm Exp $ */ +/* $Id: util.c,v 1.2 2009-04-29 22:25:20 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -50,3 +50,23 @@ section_string(char *buf, size_t len, size_t sectoff, size_t sectlen) (int) (last - first), buf + first, last == len ? "" : "..."); return (s); } + +/* Clean string of invisible characters. */ +void +clean_string(const char *in, char *buf, size_t len) +{ + const u_char *cp; + size_t off; + + off = 0; + for (cp = in; *cp != '\0'; cp++) { + if (off >= len) + break; + if (*cp >= 0x20 && *cp <= 0x7f) + buf[off++] = *cp; + else + off += xsnprintf(buf + off, len - off, "\\%03hho", *cp); + } + if (off < len) + buf[off] = '\0'; +} |