Mercurial > hg > xemacs-beta
diff src/sysdep.c @ 412:697ef44129c6 r21-2-14
Import from CVS: tag r21-2-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:20:41 +0200 |
parents | de805c49cfc1 |
children | da8ed4261e83 |
line wrap: on
line diff
--- a/src/sysdep.c Mon Aug 13 11:19:22 2007 +0200 +++ b/src/sysdep.c Mon Aug 13 11:20:41 2007 +0200 @@ -31,24 +31,28 @@ #include <config.h> -#ifdef WIN32_NATIVE -#ifdef MINGW -#include <mingw32/process.h> -#else +#ifdef WINDOWSNT +#include <direct.h> +#ifndef __MINGW32__ /* <process.h> should not conflict with "process.h", as per ANSI definition. - This is not true with visual c though. The trick below works with - VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of - standard way, so include path ends with /include. + This is not true though with visual c though. The trick below works with + VC4.2b and with VC5.0. It assumes that VC is installed in a kind of + standard way, so include files get to what/ever/path/include. Unfortunately, this must go before lisp.h, since process.h defines abort() which will conflict with the macro defined in lisp.h */ #include <../include/process.h> -#endif /* MINGW */ -#endif /* WIN32_NATIVE */ +#else +#include <mingw32/process.h> +#endif +#endif /* WINDOWSNT */ #include "lisp.h" +#include <stddef.h> +#include <stdlib.h> + /* ------------------------------- */ /* basic includes */ /* ------------------------------- */ @@ -78,20 +82,17 @@ #include "syswait.h" #include "sysdir.h" #include "systime.h" -#if defined(WIN32_NATIVE) || defined(CYGWIN) +#if defined(WINDOWSNT) || defined(__CYGWIN32__) #include "syssignal.h" #endif - -#include "sysproc.h" - -#ifndef WIN32_NATIVE +#ifndef WINDOWSNT #include <sys/times.h> #endif -#ifdef WIN32_NATIVE +#ifdef WINDOWSNT #include <sys/utime.h> +#include <windows.h> #include "ntheap.h" -#include "nt.h" #endif /* ------------------------------- */ @@ -234,11 +235,8 @@ #endif /* NO_SUBPROCESSES */ -#ifdef WIN32_NATIVE -void wait_for_termination (HANDLE pHandle) -#else -void wait_for_termination (int pid) -#endif +void +wait_for_termination (int pid) { /* #### With the new improved SIGCHLD handling stuff, there is much less danger of race conditions and some of the comments below @@ -348,49 +346,6 @@ Since implementations may add their own error indicators on top, we ignore it by default. */ -#elif defined (WIN32_NATIVE) - int ret = 0, status = 0; - if (pHandle == NULL) - { - warn_when_safe (Qprocess, Qwarning, "Cannot wait for unknown process to terminate"); - return; - } - do - { - QUIT; - ret = WaitForSingleObject(pHandle, 100); - } - while (ret == WAIT_TIMEOUT); - if (ret == WAIT_FAILED) - { - warn_when_safe (Qprocess, Qwarning, "waiting for process failed"); - } - if (ret == WAIT_ABANDONED) - { - warn_when_safe (Qprocess, Qwarning, - "process to wait for has been abandoned"); - } - if (ret == WAIT_OBJECT_0) - { - ret = GetExitCodeProcess(pHandle, &status); - if (ret) - { - synch_process_alive = 0; - synch_process_retcode = status; - } - else - { - /* GetExitCodeProcess() didn't return a valid exit status, - nothing to do. APA */ - warn_when_safe (Qprocess, Qwarning, - "failure to obtain process exit value"); - } - } - if (pHandle != NULL && !CloseHandle(pHandle)) - { - warn_when_safe (Qprocess, Qwarning, - "failure to close unknown process"); - } #elif defined (EMACS_BLOCK_SIGNAL) && !defined (BROKEN_WAIT_FOR_SIGNAL) && defined (SIGCHLD) while (1) { @@ -422,7 +377,7 @@ Try defining BROKEN_WAIT_FOR_SIGNAL. */ EMACS_WAIT_FOR_SIGNAL (SIGCHLD); } -#else /* not HAVE_WAITPID and not WIN32_NATIVE and (not EMACS_BLOCK_SIGNAL or BROKEN_WAIT_FOR_SIGNAL) */ +#else /* not HAVE_WAITPID and (not EMACS_BLOCK_SIGNAL or BROKEN_WAIT_FOR_SIGNAL) */ /* This approach is kind of cheesy but is guaranteed(?!) to work for all systems. */ while (1) @@ -460,7 +415,7 @@ #endif } -#ifndef WIN32_NATIVE +#ifndef WINDOWSNT /* Set up the terminal at the other end of a pseudo-terminal that we will be controlling an inferior through. It should not echo or do line-editing, since that is done @@ -470,7 +425,7 @@ child_setup_tty (int out) { struct emacs_tty s; - emacs_get_tty (out, &s); + EMACS_GET_TTY (out, &s); #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) assert (isatty(out)); @@ -539,7 +494,7 @@ #endif /* no TIOCGPGRP or no TIOCGLTC or no TIOCGETC */ s.main.c_cc[VEOL] = _POSIX_VDISABLE; #if defined (CBAUD) - /* <mdiers> #### This is not portable. ### + /* <mdiers> ### This is not portable. ### POSIX does not specify CBAUD, and 4.4BSD does not have it. Instead, POSIX suggests to use cfset{i,o}speed(). [cf. D. Lewine, POSIX Programmer's Guide, Chapter 8: Terminal @@ -562,7 +517,7 @@ s.lmode = LLITOUT | s.lmode; /* Don't strip 8th bit */ #endif /* not HAVE_TERMIO */ - emacs_set_tty (out, &s, 0); + EMACS_SET_TTY (out, &s, 0); #ifdef RTU { @@ -571,7 +526,7 @@ } #endif /* RTU */ } -#endif /* WIN32_NATIVE */ +#endif /* WINDOWSNT */ #endif /* not NO_SUBPROCESSES */ @@ -612,23 +567,19 @@ } } -#ifdef WIN32_NATIVE - -pid_t +#ifdef WINDOWSNT +int sys_getpid (void) { return abs (getpid ()); } - -#endif /* WIN32_NATIVE */ +#endif /* WINDOWSNT */ /* Fork a subshell. */ static void sys_subshell (void) { -#ifndef WIN32_NATIVE int pid; -#endif struct save_signal saved_handlers[5]; Lisp_Object dir; unsigned char *str = 0; @@ -661,18 +612,22 @@ str = (unsigned char *) alloca (XSTRING_LENGTH (dir) + 2); len = XSTRING_LENGTH (dir); memcpy (str, XSTRING_DATA (dir), len); - if (!IS_ANY_SEP (str[len - 1])) - str[len++] = DIRECTORY_SEP; + /* #### Unix specific */ + if (str[len - 1] != '/') str[len++] = '/'; str[len] = 0; xyzzy: -#ifndef WIN32_NATIVE +#ifdef WINDOWSNT + pid = -1; +#else /* not WINDOWSNT */ + pid = fork (); if (pid == -1) error ("Can't spawn subshell"); if (pid == 0) -#endif /* not WIN32_NATIVE */ + +#endif /* not WINDOWSNT */ { char *sh = 0; @@ -685,18 +640,7 @@ if (str) sys_chdir (str); -#ifdef WIN32_NATIVE - - /* Waits for process completion */ - if (_spawnlp (_P_WAIT, sh, sh, NULL) != 0) - error ("Can't spawn subshell"); - else - return; /* we're done, no need to wait for termination */ - } - -#else - -#if !defined (NO_SUBPROCESSES) +#if !defined (NO_SUBPROCESSES) && !defined (WINDOWSNT) close_process_descs (); /* Close Emacs's pipes/ptys */ #endif @@ -705,18 +649,23 @@ nice (-emacs_priority); /* Give the new shell the default priority */ #endif +#ifdef WINDOWSNT + /* Waits for process completion */ + pid = _spawnlp (_P_WAIT, sh, sh, NULL); + if (pid == -1) + write (1, "Can't execute subshell", 22); + +#else /* not WINDOWSNT */ execlp (sh, sh, 0); write (1, "Can't execute subshell", 22); _exit (1); +#endif /* not WINDOWSNT */ } save_signal_handlers (saved_handlers); synch_process_alive = 1; wait_for_termination (pid); restore_signal_handlers (saved_handlers); - -#endif /* not WIN32_NATIVE */ - } #endif /* !defined (SIGTSTP) && !defined (USG_JOBCTRL) */ @@ -763,31 +712,23 @@ /* Given FD, obtain pty buffer size. When no luck, a good guess is made, - so that the function works even when fd is not a pty. */ + so that the function works even fd is not a pty. */ int get_pty_max_bytes (int fd) { - /* DEC OSF 4.0 fpathconf returns 255, but xemacs hangs on long shell - input lines if we return 253. 252 is OK!. So let's leave a bit - of slack for the newline that xemacs will insert, and for those - inevitable vendor off-by-one-or-two-or-three bugs. */ -#define MAX_CANON_SLACK 10 -#define SAFE_MAX_CANON (127 - MAX_CANON_SLACK) + int pty_max_bytes; + #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON) - { - int max_canon = fpathconf (fd, _PC_MAX_CANON); - return (max_canon < 0 ? SAFE_MAX_CANON : - max_canon > SAFE_MAX_CANON ? max_canon - MAX_CANON_SLACK : - max_canon); - } -#elif defined (_POSIX_MAX_CANON) - return (_POSIX_MAX_CANON > SAFE_MAX_CANON ? - _POSIX_MAX_CANON - MAX_CANON_SLACK : - _POSIX_MAX_CANON); -#else - return SAFE_MAX_CANON; + pty_max_bytes = fpathconf (fd, _PC_MAX_CANON); + if (pty_max_bytes < 0) #endif + pty_max_bytes = 250; + + /* Deduct one, to leave space for the eof. */ + pty_max_bytes--; + + return pty_max_bytes; } /* Figure out the eof character for the FD. */ @@ -795,7 +736,7 @@ Bufbyte get_eof_char (int fd) { - const Bufbyte ctrl_d = (Bufbyte) '\004'; + CONST Bufbyte ctrl_d = (Bufbyte) '\004'; if (!isatty (fd)) return ctrl_d; @@ -805,7 +746,7 @@ tcgetattr (fd, &t); #if 0 /* What is the following line designed to do??? -mrb */ - if (strlen ((const char *) t.c_cc) < (unsigned int) (VEOF + 1)) + if (strlen ((CONST char *) t.c_cc) < (unsigned int) (VEOF + 1)) return ctrl_d; else return (Bufbyte) t.c_cc[VEOF]; @@ -828,7 +769,7 @@ { struct termio t; ioctl (fd, TCGETA, &t); - if (strlen ((const char *) t.c_cc) < (unsigned int) (VINTR + 1)) + if (strlen ((CONST char *) t.c_cc) < (unsigned int) (VINTR + 1)) return ctrl_d; else return (Bufbyte) t.c_cc[VINTR]; @@ -962,7 +903,7 @@ assert (DEVICE_TTY_P (d)); { int input_fd = CONSOLE_TTY_DATA (con)->infd; -#if defined (WIN32_NATIVE) +#if defined (WINDOWSNT) DEVICE_TTY_DATA (d)->ospeed = 15; #elif defined (HAVE_TERMIOS) struct termios sg; @@ -1078,7 +1019,7 @@ { int filedesc = DEVICE_INFD (d); -#if defined (I_SETSIG) && !defined(HPUX10) && !defined(LINUX) +#if defined (I_SETSIG) && !defined(HPUX10) { int events=0; ioctl (filedesc, I_GETSIG, &events); @@ -1388,7 +1329,7 @@ /* It's wrong to encase these into #ifdef HAVE_TTY because we need them for child TTY processes. */ /* However, this does break NT support while we don't do child TTY processes */ -#ifndef WIN32_NATIVE +#ifndef WINDOWSNT /* Set *TC to the parameters associated with the terminal FD. Return zero if all's well, or -1 if we ran into an error we @@ -1407,7 +1348,7 @@ if (ioctl (fd, TCGETA, &settings->main) < 0) return -1; -#elif !defined (WIN32_NATIVE) +#elif !defined (WINDOWSNT) /* I give up - I hope you have the BSD ioctls. */ if (ioctl (fd, TIOCGETP, &settings->main) < 0) return -1; @@ -1432,8 +1373,7 @@ /* Set the parameters of the tty on FD according to the contents of *SETTINGS. If FLUSHP is non-zero, we discard input. - Return 0 if all went well, and -1 if anything failed. - #### All current callers use FLUSHP == 0. */ + Return 0 if all went well, and -1 if anything failed. */ int emacs_set_tty (int fd, struct emacs_tty *settings, int flushp) @@ -1481,7 +1421,7 @@ if (ioctl (fd, flushp ? TCSETAF : TCSETAW, &settings->main) < 0) return -1; -#elif !defined (WIN32_NATIVE) +#elif !defined (WINDOWSNT) /* I give up - I hope you have the BSD ioctls. */ if (ioctl (fd, (flushp) ? TIOCSETP : TIOCSETN, &settings->main) < 0) return -1; @@ -1504,7 +1444,7 @@ return 0; } -#endif /* WIN32_NATIVE */ +#endif /* WINDOWSNT */ /* ------------------------------------------------------ */ /* Initializing a device */ @@ -1543,7 +1483,7 @@ input_fd = CONSOLE_TTY_DATA (con)->infd; output_fd = CONSOLE_TTY_DATA (con)->outfd; - emacs_get_tty (input_fd, &CONSOLE_TTY_DATA (con)->old_tty); + EMACS_GET_TTY (input_fd, &CONSOLE_TTY_DATA (con)->old_tty); tty = CONSOLE_TTY_DATA (con)->old_tty; con->tty_erase_char = Qnil; @@ -1664,14 +1604,14 @@ tty.main.c_iflag &= ~BRKINT; #endif /* AIX */ #else /* if not HAVE_TERMIO */ -#if !defined (WIN32_NATIVE) +#if !defined (WINDOWSNT) con->tty_erase_char = make_char (tty.main.sg_erase); tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS); if (TTY_FLAGS (con).meta_key) tty.main.sg_flags |= ANYP; /* #### should we be using RAW mode here? */ tty.main.sg_flags |= /* interrupt_input ? RAW : */ CBREAK; -#endif /* not WIN32_NATIVE */ +#endif /* not WINDOWSNT */ #endif /* not HAVE_TERMIO */ /* If going to use CBREAK mode, we must request C-g to interrupt @@ -1710,7 +1650,7 @@ tty.ltchars = new_ltchars; #endif /* HAVE_LTCHARS */ - emacs_set_tty (input_fd, &tty, 0); + EMACS_SET_TTY (input_fd, &tty, 0); /* This code added to insure that, if flow-control is not to be used, we have an unlocked terminal at the start. */ @@ -1718,9 +1658,11 @@ #ifdef TCXONC if (!TTY_FLAGS (con).flow_control) ioctl (input_fd, TCXONC, 1); #endif +#ifndef APOLLO #ifdef TIOCSTART if (!TTY_FLAGS (con).flow_control) ioctl (input_fd, TIOCSTART, 0); #endif +#endif #if defined (HAVE_TERMIOS) || defined (HPUX9) #ifdef TCOON @@ -1815,7 +1757,7 @@ { struct emacs_tty tty; - emacs_get_tty (DEVICE_INFD (d), &tty); + EMACS_GET_TTY (DEVICE_INFD (d), &tty); return EMACS_TTY_TABS_OK (&tty); } #endif @@ -1888,7 +1830,7 @@ assert (DEVICE_TTY_P (d)); input_fd = DEVICE_INFD (d); - emacs_get_tty (input_fd, &s); + EMACS_GET_TTY (input_fd, &s); #if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS) eight_bit = (s.main.c_cflag & CSIZE) == CS8; @@ -1938,7 +1880,7 @@ fsync (output_fd); #endif - while (emacs_set_tty (input_fd, &CONSOLE_TTY_DATA (con)->old_tty, 0) + while (EMACS_SET_TTY (input_fd, &CONSOLE_TTY_DATA (con)->old_tty, 0) < 0 && errno == EINTR) ; @@ -2132,7 +2074,7 @@ /* limits of text/data segments */ /************************************************************************/ -#if !defined(CANNOT_DUMP) && !defined(PDUMP) +#ifndef CANNOT_DUMP #define NEED_STARTS #endif @@ -2152,20 +2094,28 @@ * */ -#if !defined(HAVE_TEXT_START) && !defined(PDUMP) - -EXTERN_C int _start (void); - +#ifdef __cplusplus + extern "C" int _start (); +#else + extern int _start (); +#endif + +#ifndef HAVE_TEXT_START char * start_of_text (void) { #ifdef TEXT_START - return (char *) TEXT_START; + return ((char *) TEXT_START); #else - return (char *) _start; +#ifdef GOULD + extern csrt (); + return ((char *) csrt); +#else /* not GOULD */ + return ((char *) _start); +#endif /* GOULD */ #endif /* TEXT_START */ } -#endif /* !defined(HAVE_TEXT_START) && !defined(PDUMP) */ +#endif /* not HAVE_TEXT_START */ /* * Return the address of the start of the data segment prior to @@ -2193,7 +2143,7 @@ * */ -#if defined(ORDINARY_LINK) && !defined(MINGW) +#ifdef ORDINARY_LINK extern char **environ; #endif @@ -2210,7 +2160,7 @@ * is known to live at or near the start of the system crt0.c, and * we don't sweat the handful of bytes that might lose. */ -#if defined (HEAP_IN_DATA) && !defined(PDUMP) +#ifdef HEAP_IN_DATA extern char* static_heap_base; if (!initialized) return static_heap_base; @@ -2224,7 +2174,7 @@ } #endif /* NEED_STARTS (not CANNOT_DUMP or not SYSTEM_MALLOC) */ -#if !defined(CANNOT_DUMP) && !defined(PDUMP) +#ifndef CANNOT_DUMP /* Some systems that cannot dump also cannot implement these. */ /* @@ -2259,7 +2209,7 @@ #endif } -#endif /* !defined(CANNOT_DUMP) && !defined(PDUMP) */ +#endif /* not CANNOT_DUMP */ /************************************************************************/ @@ -2271,12 +2221,17 @@ extern Lisp_Object Vsystem_name; +#ifdef HAVE_SOCKETS +# include <sys/socket.h> +# include <netdb.h> +#endif /* HAVE_SOCKETS */ + void init_system_name (void) { -#if defined (WIN32_NATIVE) +#if defined (WINDOWSNT) char hostname [MAX_COMPUTERNAME_LENGTH + 1]; - size_t size = sizeof (hostname); + size_t size = sizeof(hostname); GetComputerName (hostname, &size); Vsystem_name = build_string (hostname); #elif !defined (HAVE_GETHOSTNAME) @@ -2312,27 +2267,26 @@ # endif /* not CANNOT_DUMP */ if (!strchr (hostname, '.')) { -# if !(defined(HAVE_GETADDRINFO) && defined(HAVE_GETNAMEINFO)) struct hostent *hp = NULL; int count; -# ifdef TRY_AGAIN +# ifdef TRY_AGAIN for (count = 0; count < 10; count++) { h_errno = 0; -# endif +# endif /* Some systems can't handle SIGALARM/SIGIO in gethostbyname(). */ stop_interrupts (); hp = gethostbyname (hostname); start_interrupts (); -# ifdef TRY_AGAIN +# ifdef TRY_AGAIN if (! (hp == 0 && h_errno == TRY_AGAIN)) break; Fsleep_for (make_int (1)); } -# endif +# endif if (hp) { - const char *fqdn = (const char *) hp->h_name; + CONST char *fqdn = (CONST char *) hp->h_name; if (!strchr (fqdn, '.')) { @@ -2347,22 +2301,6 @@ hostname = (char *) alloca (strlen (fqdn) + 1); strcpy (hostname, fqdn); } -# else /* !(HAVE_GETADDRINFO && HAVE_GETNAMEINFO) */ - struct addrinfo hints, *res; - - xzero (hints); - hints.ai_flags = AI_CANONNAME; - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - if (!getaddrinfo (hostname, NULL, &hints, &res)) - { - hostname = (char *) alloca (strlen (res->ai_canonname) + 1); - strcpy (hostname, res->ai_canonname); - - freeaddrinfo (res); - } -# endif /* !(HAVE_GETADDRINFO && HAVE_GETNAMEINFO) */ } # endif /* HAVE_SOCKETS */ Vsystem_name = build_string (hostname); @@ -2492,7 +2430,7 @@ /* Linux added here by Raymond L. Toy <toy@alydar.crd.ge.com> for XEmacs. */ /* Irix added here by gparker@sni-usa.com for XEmacs. */ /* NetBSD added here by James R Grinter <jrg@doc.ic.ac.uk> for XEmacs */ -extern const char *sys_errlist[]; +extern CONST char *sys_errlist[]; extern int sys_nerr; #endif @@ -2502,17 +2440,17 @@ #endif -const char * +CONST char * strerror (int errnum) { if (errnum >= 0 && errnum < sys_nerr) return sys_errlist[errnum]; - return ((const char *) GETTEXT ("Unknown error")); + return ((CONST char *) GETTEXT ("Unknown error")); } #endif /* ! HAVE_STRERROR */ -#ifdef WIN32_NATIVE +#ifdef WINDOWSNT struct errentry { unsigned long oscode; /* Win32 error */ @@ -2583,7 +2521,7 @@ int i; /* check the table for the OS error code */ - for (i = 0; i < countof (errtable); ++i) + for (i = 0; i < sizeof(errtable)/sizeof(errtable[0]); ++i) { if (win32_error == errtable[i].oscode) { @@ -2609,7 +2547,7 @@ mswindows_set_errno (GetLastError ()); } -#endif /* WIN32_NATIVE */ +#endif /* WINDOWSNT */ /************************************************************************/ @@ -2617,7 +2555,7 @@ /************************************************************************/ #define PATHNAME_CONVERT_OUT(path) \ - TO_EXTERNAL_FORMAT (C_STRING, (path), C_STRING_ALLOCA, (path), Qfile_name); + GET_C_CHARPTR_EXT_FILENAME_DATA_ALLOCA ((CONST Bufbyte *) path, path) /***************** low-level calls ****************/ @@ -2636,12 +2574,12 @@ /* Ben sez: read Dick Gabriel's essay about the Worse Is Better approach to programming and its connection to the silly - interruptible-system-call business. To find it, look on - Jamie's home page (http://www.jwz.org/worse-is-better.html). */ + interruptible-system-call business. To find it, look at + Jamie's home page (http://www.netscape.com/people/jwz). */ #ifdef ENCAPSULATE_OPEN int -sys_open (const char *path, int oflag, ...) +sys_open (CONST char *path, int oflag, ...) { int mode; va_list ap; @@ -2651,13 +2589,10 @@ va_end (ap); PATHNAME_CONVERT_OUT (path); - -#ifdef WIN32_NATIVE +#if defined (WINDOWSNT) /* Make all handles non-inheritable */ - oflag |= _O_NOINHERIT; -#endif - -#ifdef INTERRUPTIBLE_OPEN + return open (path, oflag | _O_NOINHERIT, mode); +#elif defined (INTERRUPTIBLE_OPEN) { int rtnval; while ((rtnval = open (path, oflag, mode)) == -1 @@ -2680,7 +2615,7 @@ is not interrupted by C-g. However, the worst that can happen is the fallback to simple open(). */ int -interruptible_open (const char *path, int oflag, int mode) +interruptible_open (CONST char *path, int oflag, int mode) { /* This function can GC */ size_t len = strlen (path); @@ -2692,11 +2627,6 @@ PATHNAME_CONVERT_OUT (nonreloc); -#ifdef WIN32_NATIVE - /* Make all handles non-inheritable */ - oflag |= _O_NOINHERIT; -#endif - for (;;) { int rtnval = open (nonreloc, oflag, mode); @@ -2709,13 +2639,13 @@ #ifdef ENCAPSULATE_CLOSE int -sys_close (int filedes) +sys_close (int fd) { #ifdef INTERRUPTIBLE_CLOSE int did_retry = 0; REGISTER int rtnval; - while ((rtnval = close (filedes)) == -1 + while ((rtnval = close (fd)) == -1 && (errno == EINTR)) did_retry = 1; @@ -2727,15 +2657,15 @@ return rtnval; #else - return close (filedes); + return close (fd); #endif } #endif /* ENCAPSULATE_CLOSE */ -ssize_t +int sys_read_1 (int fildes, void *buf, size_t nbyte, int allow_quit) { - ssize_t rtnval; + int rtnval; /* No harm in looping regardless of the INTERRUPTIBLE_IO setting. */ while ((rtnval = read (fildes, buf, nbyte)) == -1 @@ -2748,23 +2678,24 @@ } #ifdef ENCAPSULATE_READ -ssize_t +int sys_read (int fildes, void *buf, size_t nbyte) { return sys_read_1 (fildes, buf, nbyte, 0); } #endif /* ENCAPSULATE_READ */ -ssize_t -sys_write_1 (int fildes, const void *buf, size_t nbyte, int allow_quit) +int +sys_write_1 (int fildes, CONST void *buf, size_t nbyte, int allow_quit) { - ssize_t bytes_written = 0; - const char *b = (const char *) buf; + int rtnval; + int bytes_written = 0; + CONST char *b = (CONST char *) buf; /* No harm in looping regardless of the INTERRUPTIBLE_IO setting. */ while (nbyte > 0) { - ssize_t rtnval = write (fildes, b, nbyte); + rtnval = write (fildes, b, nbyte); if (allow_quit) REALLY_QUIT; @@ -2774,18 +2705,18 @@ if (errno == EINTR) continue; else - return bytes_written ? bytes_written : -1; + return (bytes_written ? bytes_written : -1); } b += rtnval; nbyte -= rtnval; bytes_written += rtnval; } - return bytes_written; + return (bytes_written); } #ifdef ENCAPSULATE_WRITE -ssize_t -sys_write (int fildes, const void *buf, size_t nbyte) +int +sys_write (int fildes, CONST void *buf, size_t nbyte) { return sys_write_1 (fildes, buf, nbyte, 0); } @@ -2803,10 +2734,10 @@ #ifdef ENCAPSULATE_FOPEN FILE * -sys_fopen (const char *path, const char *type) +sys_fopen (CONST char *path, CONST char *type) { PATHNAME_CONVERT_OUT (path); -#if defined (WIN32_NATIVE) +#if defined (WINDOWSNT) { int fd; int oflag; @@ -2913,12 +2844,12 @@ #ifdef ENCAPSULATE_FWRITE size_t -sys_fwrite (const void *ptr, size_t size, size_t nitem, FILE *stream) +sys_fwrite (CONST void *ptr, size_t size, size_t nitem, FILE *stream) { #ifdef INTERRUPTIBLE_IO size_t rtnval; size_t items_written = 0; - const char *b = (const char *) ptr; + CONST char *b = (CONST char *) ptr; while (nitem > 0) { @@ -2946,7 +2877,7 @@ #ifdef ENCAPSULATE_CHDIR int -sys_chdir (const char *path) +sys_chdir (CONST char *path) { PATHNAME_CONVERT_OUT (path); return chdir (path); @@ -2956,10 +2887,10 @@ #ifdef ENCAPSULATE_MKDIR int -sys_mkdir (const char *path, mode_t mode) +sys_mkdir (CONST char *path, mode_t mode) { PATHNAME_CONVERT_OUT (path); -#ifdef WIN32_NATIVE +#ifdef WINDOWSNT return mkdir (path); #else return mkdir (path, mode); @@ -2970,7 +2901,7 @@ #ifdef ENCAPSULATE_OPENDIR DIR * -sys_opendir (const char *filename) +sys_opendir (CONST char *filename) { DIR *rtnval; PATHNAME_CONVERT_OUT (filename); @@ -3002,7 +2933,7 @@ { Extcount external_len; int ascii_filename_p = 1; - const Extbyte * const external_name = (const Extbyte *) rtnval->d_name; + CONST Extbyte * CONST external_name = (CONST Extbyte *) rtnval->d_name; /* Optimize for the common all-ASCII case, computing len en passant */ for (external_len = 0; external_name[external_len] ; external_len++) @@ -3015,7 +2946,7 @@ { /* Non-ASCII filename */ static Bufbyte_dynarr *internal_DIRENTRY; - const Bufbyte *internal_name; + CONST Bufbyte *internal_name; Bytecount internal_len; if (!internal_DIRENTRY) internal_DIRENTRY = Dynarr_new (Bufbyte); @@ -3025,9 +2956,9 @@ Dynarr_add_many (internal_DIRENTRY, (Bufbyte *) rtnval, offsetof (DIRENTRY, d_name)); - TO_INTERNAL_FORMAT (DATA, (external_name, external_len), - ALLOCA, (internal_name, internal_len), - Qfile_name); + internal_name = + convert_from_external_format (external_name, external_len, + &internal_len, FORMAT_FILENAME); Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); Dynarr_add (internal_DIRENTRY, 0); /* zero-terminate */ @@ -3055,7 +2986,7 @@ #ifdef ENCAPSULATE_RMDIR int -sys_rmdir (const char *path) +sys_rmdir (CONST char *path) { PATHNAME_CONVERT_OUT (path); return rmdir (path); @@ -3067,7 +2998,7 @@ #ifdef ENCAPSULATE_ACCESS int -sys_access (const char *path, int mode) +sys_access (CONST char *path, int mode) { PATHNAME_CONVERT_OUT (path); return access (path, mode); @@ -3078,7 +3009,7 @@ #ifdef HAVE_EACCESS #ifdef ENCAPSULATE_EACCESS int -sys_eaccess (const char *path, int mode) +sys_eaccess (CONST char *path, int mode) { PATHNAME_CONVERT_OUT (path); return eaccess (path, mode); @@ -3089,7 +3020,7 @@ #ifdef ENCAPSULATE_LSTAT int -sys_lstat (const char *path, struct stat *buf) +sys_lstat (CONST char *path, struct stat *buf) { PATHNAME_CONVERT_OUT (path); return lstat (path, buf); @@ -3099,7 +3030,7 @@ #ifdef ENCAPSULATE_READLINK int -sys_readlink (const char *path, char *buf, size_t bufsiz) +sys_readlink (CONST char *path, char *buf, size_t bufsiz) { PATHNAME_CONVERT_OUT (path); /* #### currently we don't do conversions on the incoming data */ @@ -3107,36 +3038,22 @@ } #endif /* ENCAPSULATE_READLINK */ -#ifdef ENCAPSULATE_FSTAT -int -sys_fstat (int fd, struct stat *buf) -{ -#ifdef WIN32_NATIVE - return mswindows_fstat (fd, buf); -#else - return fstat (fd, buf); -#endif -} -#endif /* ENCAPSULATE_FSTAT */ #ifdef ENCAPSULATE_STAT int -sys_stat (const char *path, struct stat *buf) +sys_stat (CONST char *path, struct stat *buf) { PATHNAME_CONVERT_OUT (path); -#ifdef WIN32_NATIVE - return mswindows_stat (path, buf); -#else return stat (path, buf); -#endif } #endif /* ENCAPSULATE_STAT */ + /****************** file-manipulation calls *****************/ #ifdef ENCAPSULATE_CHMOD int -sys_chmod (const char *path, mode_t mode) +sys_chmod (CONST char *path, mode_t mode) { PATHNAME_CONVERT_OUT (path); return chmod (path, mode); @@ -3146,7 +3063,7 @@ #ifdef ENCAPSULATE_CREAT int -sys_creat (const char *path, mode_t mode) +sys_creat (CONST char *path, mode_t mode) { PATHNAME_CONVERT_OUT (path); return creat (path, mode); @@ -3156,7 +3073,7 @@ #ifdef ENCAPSULATE_LINK int -sys_link (const char *existing, const char *new) +sys_link (CONST char *existing, CONST char *new) { PATHNAME_CONVERT_OUT (existing); PATHNAME_CONVERT_OUT (new); @@ -3167,18 +3084,18 @@ #ifdef ENCAPSULATE_RENAME int -sys_rename (const char *old, const char *new) +sys_rename (CONST char *old, CONST char *new) { PATHNAME_CONVERT_OUT (old); PATHNAME_CONVERT_OUT (new); -#ifdef WIN32_NATIVE +#ifdef WINDOWSNT /* Windows rename fails if NEW exists */ if (rename (old, new) == 0) return 0; if (errno != EEXIST) return -1; unlink (new); -#endif /* WIN32_NATIVE */ +#endif /* WINDOWSNT */ return rename (old, new); } #endif /* ENCAPSULATE_RENAME */ @@ -3186,7 +3103,7 @@ #ifdef ENCAPSULATE_SYMLINK int -sys_symlink (const char *name1, const char *name2) +sys_symlink (CONST char *name1, CONST char *name2) { PATHNAME_CONVERT_OUT (name1); PATHNAME_CONVERT_OUT (name2); @@ -3197,7 +3114,7 @@ #ifdef ENCAPSULATE_UNLINK int -sys_unlink (const char *path) +sys_unlink (CONST char *path) { PATHNAME_CONVERT_OUT (path); return unlink (path); @@ -3207,7 +3124,7 @@ #ifdef ENCAPSULATE_EXECVP int -sys_execvp (const char *path, char * const * argv) +sys_execvp (CONST char *path, char * CONST * argv) { int i, argc; char ** new_argv; @@ -3235,7 +3152,7 @@ #ifndef HAVE_GETCWD char * -getcwd (char *pathname, size_t size) +getcwd (char *pathname, int size) { return getwd (pathname); } @@ -3279,7 +3196,7 @@ #ifndef HAVE_RENAME int -rename (const char *from, const char *to) +rename (CONST char *from, CONST char *to) { if (access (from, 0) == 0) { @@ -3393,7 +3310,7 @@ static int get_process_times_1 (long *user_ticks, long *system_ticks) { -#if defined (_SC_CLK_TCK) || defined (CLK_TCK) && !defined(WIN32_NATIVE) +#if defined (_SC_CLK_TCK) || defined (CLK_TCK) && !defined(WINDOWSNT) /* We have the POSIX times() function available. */ struct tms tttt; times (&tttt); @@ -3535,8 +3452,8 @@ #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST) -#if defined(WIN32_NATIVE) || defined(CYGWIN) -const char *sys_siglist[] = +#if defined(WINDOWSNT) || defined(__CYGWIN32__) +CONST char *sys_siglist[] = { "bum signal!!", "hangup", @@ -3569,7 +3486,7 @@ #ifdef USG #ifdef AIX -const char *sys_siglist[NSIG + 1] = +CONST char *sys_siglist[NSIG + 1] = { /* AIX has changed the signals a bit */ DEFER_GETTEXT ("bogus signal"), /* 0 */ @@ -3609,7 +3526,7 @@ 0 }; #else /* USG, not AIX */ -const char *sys_siglist[NSIG + 1] = +CONST char *sys_siglist[NSIG + 1] = { DEFER_GETTEXT ("bogus signal"), /* 0 */ DEFER_GETTEXT ("hangup"), /* 1 SIGHUP */ @@ -3658,7 +3575,7 @@ #endif /* not AIX */ #endif /* USG */ #ifdef DGUX -const char *sys_siglist[NSIG + 1] = +CONST char *sys_siglist[NSIG + 1] = { DEFER_GETTEXT ("null signal"), /* 0 SIGNULL */ DEFER_GETTEXT ("hangup"), /* 1 SIGHUP */ @@ -3763,7 +3680,7 @@ #ifdef NONSYSTEM_DIR_LIBRARY DIR * -opendir (const char *filename) /* name of directory */ +opendir (CONST char *filename) /* name of directory */ { DIR *dirp; /* -> malloc'ed storage */ int fd; /* file descriptor for read */ @@ -3865,7 +3782,7 @@ MKDIR_PROTOTYPE #else int -mkdir (const char *dpath, int dmode) +mkdir (CONST char *dpath, int dmode) #endif { int cpid, status, fd; @@ -3925,7 +3842,7 @@ #ifndef HAVE_RMDIR int -rmdir (const char *dpath) +rmdir (CONST char *dpath) { int cpid, status, fd; struct stat statbuf;