File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / readline / examples / rlfe / os.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jul 30 08:16:46 2014 UTC (10 years, 8 months ago) by misho
Branches: readline, MAIN
CVS tags: v8_2p0, v8_1p0, v6_3p10_cross, v6_3p10, v6_3, p6, HEAD
readline 6.3

    1: /* Copyright (c) 1993-2002
    2:  *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
    3:  *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
    4:  * Copyright (c) 1987 Oliver Laumann
    5:  *
    6:  * This program is free software; you can redistribute it and/or modify
    7:  * it under the terms of the GNU General Public License as published by
    8:  * the Free Software Foundation; either version 2, or (at your option)
    9:  * any later version.
   10:  *
   11:  * This program is distributed in the hope that it will be useful,
   12:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14:  * GNU General Public License for more details.
   15:  *
   16:  * You should have received a copy of the GNU General Public License
   17:  * along with this program (see the file COPYING); if not, write to the
   18:  * Free Software Foundation, Inc.,
   19:  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
   20:  *
   21:  ****************************************************************
   22:  * $Id: os.h,v 1.1.1.1 2014/07/30 08:16:46 misho Exp $ FAU
   23:  */
   24: 
   25: #include <stdio.h>
   26: #include <errno.h>
   27: 
   28: #include <sys/param.h>
   29: 
   30: /* In strict ANSI mode, HP-UX machines define __hpux but not hpux */
   31: #if defined(__hpux) && !defined(hpux)
   32: # define hpux
   33: #endif
   34: 
   35: #if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux)
   36: # include <signal.h>
   37: #endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */
   38: 
   39: #ifdef ISC
   40: # ifdef ENAMETOOLONG
   41: #  undef ENAMETOOLONG
   42: # endif
   43: # ifdef ENOTEMPTY
   44: #  undef ENOTEMPTY
   45: # endif
   46: # include <sys/bsdtypes.h>
   47: # include <net/errno.h>
   48: #endif
   49: 
   50: #ifdef sun
   51: # define getpgrp __getpgrp
   52: # define exit __exit
   53: #endif
   54: #ifdef POSIX
   55: # include <unistd.h>
   56: # if defined(__STDC__)
   57: #  include <stdlib.h>
   58: # endif /* __STDC__ */
   59: #endif /* POSIX */
   60: #ifdef sun
   61: # undef getpgrp
   62: # undef exit
   63: #endif /* sun */
   64: 
   65: #ifndef linux /* all done in <errno.h> */
   66: extern int errno;
   67: #endif /* linux */
   68: #ifndef HAVE_STRERROR
   69: /* No macros, please */
   70: #undef strerror
   71: #endif
   72: 
   73: #if !defined(SYSV) && !defined(linux)
   74: # ifdef NEWSOS
   75: #  define strlen ___strlen___
   76: #  include <strings.h>
   77: #  undef strlen
   78: # else /* NEWSOS */
   79: #  include <strings.h>
   80: # endif /* NEWSOS */
   81: #else /* SYSV */
   82: # if defined(SVR4) || defined(NEWSOS)
   83: #  define strlen ___strlen___
   84: #  include <string.h>
   85: #  undef strlen
   86: #  if !defined(NEWSOS) && !defined(__hpux)
   87:     extern size_t strlen(const char *);
   88: #  endif
   89: # else /* SVR4 */
   90: #  include <string.h>
   91: # endif /* SVR4 */
   92: #endif /* SYSV */
   93: 
   94: #ifdef USEVARARGS
   95: # if defined(__STDC__)
   96: #  include <stdarg.h>
   97: #  define VA_LIST(var) va_list var;
   98: #  define VA_DOTS ...
   99: #  define VA_DECL
  100: #  define VA_START(ap, fmt) va_start(ap, fmt)
  101: #  define VA_ARGS(ap) ap
  102: #  define VA_END(ap) va_end(ap)
  103: # else
  104: #  include <varargs.h>
  105: #  define VA_LIST(var) va_list var;
  106: #  define VA_DOTS va_alist
  107: #  define VA_DECL va_dcl
  108: #  define VA_START(ap, fmt) va_start(ap)
  109: #  define VA_ARGS(ap) ap
  110: #  define VA_END(ap) va_end(ap)
  111: # endif
  112: #else
  113: # define VA_LIST(var)
  114: # define VA_DOTS p1, p2, p3, p4, p5, p6
  115: # define VA_DECL unsigned long VA_DOTS;
  116: # define VA_START(ap, fmt)
  117: # define VA_ARGS(ap) VA_DOTS
  118: # define VA_END(ap)
  119: # undef vsnprintf
  120: # define vsnprintf xsnprintf
  121: #endif
  122: 
  123: #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX)
  124: # include <time.h>
  125: #endif
  126: #include <sys/time.h>
  127: 
  128: #ifdef M_UNIX   /* SCO */
  129: # include <sys/stream.h>
  130: # include <sys/ptem.h>
  131: # define ftruncate(fd, s) chsize(fd, s)
  132: #endif
  133: 
  134: #ifdef SYSV
  135: # define index strchr
  136: # define rindex strrchr
  137: # define bzero(poi,len) memset(poi,0,len)
  138: # define bcmp memcmp
  139: # define killpg(pgrp,sig) kill( -(pgrp), sig)
  140: #endif
  141: 
  142: #ifndef HAVE_GETCWD
  143: # define getcwd(b,l) getwd(b)
  144: #endif
  145: 
  146: #ifndef USEBCOPY
  147: # ifdef USEMEMMOVE
  148: #  define bcopy(s,d,len) memmove(d,s,len)
  149: # else
  150: #  ifdef USEMEMCPY
  151: #   define bcopy(s,d,len) memcpy(d,s,len)
  152: #  else
  153: #   define NEED_OWN_BCOPY
  154: #   define bcopy xbcopy
  155: #  endif
  156: # endif
  157: #endif
  158: 
  159: #ifdef hpux
  160: # define setreuid(ruid, euid) setresuid(ruid, euid, -1)
  161: # define setregid(rgid, egid) setresgid(rgid, egid, -1)
  162: #endif
  163: 
  164: #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID)
  165: # define USE_SETEUID
  166: #endif
  167: 
  168: #if !defined(HAVE__EXIT) && !defined(_exit)
  169: #define _exit(x) exit(x)
  170: #endif
  171: 
  172: #ifndef HAVE_UTIMES
  173: # define utimes utime
  174: #endif
  175: 
  176: #ifdef BUILTIN_TELNET
  177: # include <netinet/in.h>
  178: # include <arpa/inet.h>
  179: #endif
  180: 
  181: #if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME))
  182: # undef USE_LOCALE
  183: #endif
  184: 
  185: /*****************************************************************
  186:  *    terminal handling
  187:  */
  188: 
  189: #if defined (POSIX) || defined (__FreeBSD__)
  190: # include <termios.h>
  191: # ifdef hpux
  192: #  include <bsdtty.h>
  193: # endif /* hpux */
  194: # ifdef NCCS
  195: #  define MAXCC NCCS
  196: # else
  197: #  define MAXCC 256
  198: # endif
  199: #else /* POSIX */
  200: # ifdef TERMIO
  201: #  include <termio.h>
  202: #  ifdef NCC
  203: #   define MAXCC NCC
  204: #  else
  205: #   define MAXCC 256
  206: #  endif
  207: #  ifdef CYTERMIO
  208: #   include <cytermio.h>
  209: #  endif
  210: # else /* TERMIO */
  211: #  if defined (HAVE_SGTTY_H)
  212: #    include <sgtty.h>
  213: #  endif
  214: # endif /* TERMIO */
  215: #endif /* POSIX */
  216: 
  217: #ifndef VDISABLE
  218: # ifdef _POSIX_VDISABLE
  219: #  define VDISABLE _POSIX_VDISABLE
  220: # else
  221: #  define VDISABLE 0377
  222: # endif /* _POSIX_VDISABLE */
  223: #endif /* !VDISABLE */
  224: 
  225: 
  226: /* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD)
  227:  * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE)
  228:  * to hold the whole packet at first read().
  229:  * (Marc Boucher)
  230:  *
  231:  * matthew green:
  232:  * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100
  233:  *
  234:  * Joe Traister: On AIX4, programs like irc won't work if screen
  235:  * uses TIOCPKT (select fails to return on pty read).
  236:  */
  237: #if defined(sgi) || defined(DGUX) || defined(_IBMR2)
  238: # undef TIOCPKT
  239: #endif
  240: 
  241: /* linux ncurses is broken, we have to use our own tputs */
  242: #if defined(linux) && defined(TERMINFO)
  243: # define tputs xtputs
  244: #endif
  245: 
  246: /* Alexandre Oliva: SVR4 style ptys don't work with osf */
  247: #ifdef __osf__
  248: # undef HAVE_SVR4_PTYS
  249: #endif
  250: 
  251: /*****************************************************************
  252:  *   utmp handling
  253:  */
  254: 
  255: #ifdef GETUTENT
  256:   typedef char *slot_t;
  257: #else
  258:   typedef int slot_t;
  259: #endif
  260: 
  261: #if defined(UTMPOK) || defined(BUGGYGETLOGIN)
  262: # if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)
  263: #  include <utmpx.h>
  264: #  define UTMPFILE	UTMPX_FILE
  265: #  define utmp		utmpx
  266: #  define getutent	getutxent
  267: #  define getutid	getutxid
  268: #  define getutline	getutxline
  269: #  define pututline	pututxline
  270: #  define setutent	setutxent
  271: #  define endutent	endutxent
  272: #  define ut_time	ut_xtime
  273: # else /* SVR4 */
  274: #  include <utmp.h>
  275: # endif /* SVR4 */
  276: # ifdef apollo
  277:    /* 
  278:     * We don't have GETUTENT, so we dig into utmp ourselves.
  279:     * But we save the permanent filedescriptor and
  280:     * open utmp just when we need to. 
  281:     * This code supports an unsorted utmp. jw.
  282:     */
  283: #  define UTNOKEEP
  284: # endif /* apollo */
  285: 
  286: # ifndef UTMPFILE
  287: #  ifdef UTMP_FILE
  288: #   define UTMPFILE	UTMP_FILE
  289: #  else
  290: #   ifdef _PATH_UTMP
  291: #    define UTMPFILE	_PATH_UTMP
  292: #   else
  293: #    define UTMPFILE	"/etc/utmp"
  294: #   endif /* _PATH_UTMP */
  295: #  endif
  296: # endif
  297: 
  298: #endif /* UTMPOK || BUGGYGETLOGIN */
  299: 
  300: #if !defined(UTMPOK) && defined(USRLIMIT)
  301: # undef USRLIMIT
  302: #endif
  303: 
  304: #ifdef LOGOUTOK
  305: # ifndef LOGINDEFAULT
  306: #  define LOGINDEFAULT 0
  307: # endif
  308: #else
  309: # ifdef LOGINDEFAULT
  310: #  undef LOGINDEFAULT
  311: # endif
  312: # define LOGINDEFAULT 1
  313: #endif
  314: 
  315: 
  316: /*****************************************************************
  317:  *    file stuff
  318:  */
  319: 
  320: #ifndef F_OK
  321: #define F_OK 0
  322: #endif
  323: #ifndef X_OK
  324: #define X_OK 1
  325: #endif
  326: #ifndef W_OK
  327: #define W_OK 2
  328: #endif
  329: #ifndef R_OK
  330: #define R_OK 4
  331: #endif
  332: 
  333: #ifndef S_IFIFO
  334: #define S_IFIFO  0010000
  335: #endif
  336: #ifndef S_IREAD
  337: #define S_IREAD  0000400
  338: #endif
  339: #ifndef S_IWRITE
  340: #define S_IWRITE 0000200
  341: #endif
  342: #ifndef S_IEXEC
  343: #define S_IEXEC  0000100
  344: #endif
  345: 
  346: #if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO)
  347: #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
  348: #endif
  349: #if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK)
  350: #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
  351: #endif
  352: #if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR)
  353: #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
  354: #endif
  355: #if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR)
  356: #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
  357: #endif
  358: #if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK)
  359: #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
  360: #endif
  361: 
  362: /*
  363:  * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK:
  364:  *
  365:  *     O_NONBLOCK     Same as O_NDELAY above.
  366:  *
  367:  * on the very same SunOS 4.1.3, I traced the open system call and found
  368:  * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked,
  369:  * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY  |O_NOCTTY) went through.
  370:  *
  371:  * For this simple reason I now favour O_NDELAY. jw. 4.5.95
  372:  */
  373: #if defined(sun) && !defined(SVR4)
  374: # undef O_NONBLOCK
  375: #endif
  376: 
  377: #if !defined(O_NONBLOCK) && defined(O_NDELAY)
  378: # define O_NONBLOCK O_NDELAY
  379: #endif
  380: 
  381: #if !defined(FNBLOCK) && defined(FNONBLOCK)
  382: # define FNBLOCK FNONBLOCK
  383: #endif
  384: #if !defined(FNBLOCK) && defined(FNDELAY)
  385: # define FNBLOCK FNDELAY
  386: #endif
  387: #if !defined(FNBLOCK) && defined(O_NONBLOCK)
  388: # define FNBLOCK O_NONBLOCK
  389: #endif
  390: 
  391: #ifndef POSIX
  392: #undef mkfifo
  393: #define mkfifo(n,m) mknod(n,S_IFIFO|(m),0)
  394: #endif
  395: 
  396: #if !defined(HAVE_LSTAT) && !defined(lstat)
  397: # define lstat stat
  398: #endif
  399: 
  400: /*****************************************************************
  401:  *    signal handling
  402:  */
  403: 
  404: #ifdef SIGVOID
  405: # define SIGRETURN
  406: # define sigret_t void
  407: #else
  408: # define SIGRETURN return 0;
  409: # define sigret_t int
  410: #endif
  411: 
  412: /* Geeeee, reverse it? */
  413: #if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT)
  414: # define SIGHASARG
  415: #endif
  416: 
  417: #ifdef SIGHASARG
  418: # define SIGPROTOARG   (int)
  419: # define SIGDEFARG     (sigsig) int sigsig;
  420: # define SIGARG        0
  421: #else
  422: # define SIGPROTOARG   (void)
  423: # define SIGDEFARG     ()
  424: # define SIGARG
  425: #endif
  426: 
  427: #ifndef SIGCHLD
  428: #define SIGCHLD SIGCLD
  429: #endif
  430: 
  431: #if defined(POSIX) || defined(hpux)
  432: # define signal xsignal
  433: #else
  434: # ifdef USESIGSET
  435: #  define signal sigset
  436: # endif /* USESIGSET */
  437: #endif
  438: 
  439: /* used in screen.c and attacher.c */
  440: #ifndef NSIG		/* kbeal needs these w/o SYSV */
  441: # define NSIG 32
  442: #endif /* !NSIG */
  443: 
  444: 
  445: /*****************************************************************
  446:  *    Wait stuff
  447:  */
  448: 
  449: #if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX)
  450: # include <sys/wait.h>
  451: #endif
  452: 
  453: #ifndef WTERMSIG
  454: # ifndef BSDWAIT /* if wait is NOT a union: */
  455: #  define WTERMSIG(status) (status & 0177)
  456: # else
  457: #  define WTERMSIG(status) status.w_T.w_Termsig 
  458: # endif
  459: #endif
  460: 
  461: #ifndef WSTOPSIG
  462: # ifndef BSDWAIT /* if wait is NOT a union: */
  463: #  define WSTOPSIG(status) ((status >> 8) & 0377)
  464: # else
  465: #  define WSTOPSIG(status) status.w_S.w_Stopsig 
  466: # endif
  467: #endif
  468: 
  469: /* NET-2 uses WCOREDUMP */
  470: #if defined(WCOREDUMP) && !defined(WIFCORESIG)
  471: # define WIFCORESIG(status) WCOREDUMP(status)
  472: #endif
  473: 
  474: #ifndef WIFCORESIG
  475: # ifndef BSDWAIT /* if wait is NOT a union: */
  476: #  define WIFCORESIG(status) (status & 0200)
  477: # else
  478: #  define WIFCORESIG(status) status.w_T.w_Coredump
  479: # endif
  480: #endif
  481: 
  482: #ifndef WEXITSTATUS
  483: # ifndef BSDWAIT /* if wait is NOT a union: */
  484: #  define WEXITSTATUS(status) ((status >> 8) & 0377)
  485: # else
  486: #  define WEXITSTATUS(status) status.w_T.w_Retcode
  487: # endif
  488: #endif
  489: 
  490: 
  491: /*****************************************************************
  492:  *    select stuff
  493:  */
  494: 
  495: #if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_) || defined (__INTERIX)
  496: #include <sys/select.h>		/* for timeval + FD... */
  497: #endif
  498: 
  499: /*
  500:  * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93
  501:  * tschmidt@vax.micron.com
  502:  */
  503: #ifndef FD_SET
  504: # ifndef SUNOS3
  505: typedef struct fd_set { int fds_bits[1]; } fd_set;
  506: # endif
  507: # define FD_ZERO(fd) ((fd)->fds_bits[0] = 0)
  508: # define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b))
  509: # define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b))
  510: # define FD_SETSIZE 32
  511: #endif
  512: 
  513: 
  514: /*****************************************************************
  515:  *    user defineable stuff
  516:  */
  517: 
  518: #ifndef TERMCAP_BUFSIZE
  519: # define TERMCAP_BUFSIZE 2048
  520: #endif
  521: 
  522: #ifndef MAXPATHLEN
  523: # define MAXPATHLEN 1024
  524: #endif
  525: 
  526: /* 
  527:  * you may try to vary this value. Use low values if your (VMS) system
  528:  * tends to choke when pasting. Use high values if you want to test
  529:  * how many characters your pty's can buffer.
  530:  */
  531: #define IOSIZE		4096

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>