X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsysdep.c;h=1ac48347839fa2242161f62bccbb47d6fd4db1e7;hb=b72024be0ea9f3018c978c7e63d241452ab74671;hp=912b3d1fc3ad1baee020f3323307dd36003b94ce;hpb=f52a96980ed9280f8f906a20d4b899dc0b027644;p=chise%2Fxemacs-chise.git- diff --git a/src/sysdep.c b/src/sysdep.c index 912b3d1..1ac4834 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -31,9 +31,8 @@ Boston, MA 02111-1307, USA. */ #include -#ifdef WINDOWSNT -#include -#ifdef __MINGW32__ +#ifdef WIN32_NATIVE +#ifdef MINGW #include #else /* should not conflict with "process.h", as per ANSI definition. @@ -45,13 +44,11 @@ Boston, MA 02111-1307, USA. */ which will conflict with the macro defined in lisp.h */ #include <../include/process.h> -#endif /* __MINGW32__ */ -#endif /* WINDOWSNT */ +#endif /* MINGW */ +#endif /* WIN32_NATIVE */ #include "lisp.h" -#include - /* ------------------------------- */ /* basic includes */ /* ------------------------------- */ @@ -81,16 +78,20 @@ Boston, MA 02111-1307, USA. */ #include "syswait.h" #include "sysdir.h" #include "systime.h" -#if defined(WINDOWSNT) || defined(__CYGWIN32__) +#if defined(WIN32_NATIVE) || defined(CYGWIN) #include "syssignal.h" #endif -#ifndef WINDOWSNT + +#include "sysproc.h" + +#ifndef WIN32_NATIVE #include #endif -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE #include #include "ntheap.h" +#include "nt.h" #endif /* ------------------------------- */ @@ -110,10 +111,6 @@ Boston, MA 02111-1307, USA. */ #endif /* TIOCGWINSZ or ISC4_0 */ #endif /* USG */ -#ifdef HAVE_SYS_STROPTS_H -#include -#endif /* HAVE_SYS_STROPTS_H */ - /* LPASS8 is new in 4.3, and makes cbreak mode provide all 8 bits. */ #ifndef LPASS8 #define LPASS8 0 @@ -233,7 +230,7 @@ wait_without_blocking (void) #endif /* NO_SUBPROCESSES */ -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE void wait_for_termination (HANDLE pHandle) #else void wait_for_termination (int pid) @@ -347,7 +344,7 @@ void wait_for_termination (int pid) Since implementations may add their own error indicators on top, we ignore it by default. */ -#elif defined (WINDOWSNT) +#elif defined (WIN32_NATIVE) int ret = 0, status = 0; if (pHandle == NULL) { @@ -421,7 +418,7 @@ void wait_for_termination (int pid) Try defining BROKEN_WAIT_FOR_SIGNAL. */ EMACS_WAIT_FOR_SIGNAL (SIGCHLD); } -#else /* not HAVE_WAITPID and not WINDOWSNT and (not EMACS_BLOCK_SIGNAL or BROKEN_WAIT_FOR_SIGNAL) */ +#else /* not HAVE_WAITPID and not WIN32_NATIVE 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) @@ -459,7 +456,7 @@ flush_pending_output (int channel) #endif } -#ifndef WINDOWSNT +#ifndef WIN32_NATIVE /* 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 @@ -570,7 +567,7 @@ child_setup_tty (int out) } #endif /* RTU */ } -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ #endif /* not NO_SUBPROCESSES */ @@ -611,7 +608,7 @@ restore_signal_handlers (struct save_signal *saved_handlers) } } -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE pid_t sys_getpid (void) @@ -619,13 +616,13 @@ sys_getpid (void) return abs (getpid ()); } -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ /* Fork a subshell. */ static void sys_subshell (void) { -#ifndef WINDOWSNT +#ifndef WIN32_NATIVE int pid; #endif struct save_signal saved_handlers[5]; @@ -665,13 +662,13 @@ sys_subshell (void) str[len] = 0; xyzzy: -#ifndef WINDOWSNT +#ifndef WIN32_NATIVE pid = fork (); if (pid == -1) error ("Can't spawn subshell"); if (pid == 0) -#endif /* not WINDOWSNT */ +#endif /* not WIN32_NATIVE */ { char *sh = 0; @@ -684,7 +681,7 @@ sys_subshell (void) if (str) sys_chdir (str); -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE /* Waits for process completion */ if (_spawnlp (_P_WAIT, sh, sh, NULL) != 0) @@ -714,7 +711,7 @@ sys_subshell (void) wait_for_termination (pid); restore_signal_handlers (saved_handlers); -#endif /* not WINDOWSNT */ +#endif /* not WIN32_NATIVE */ } @@ -776,6 +773,11 @@ get_pty_max_bytes (int fd) #if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON) { int max_canon = fpathconf (fd, _PC_MAX_CANON); +#ifdef __hpux__ + /* HP-UX 10.20 fpathconf returns 768, but this results in + truncated input lines, while 255 works. */ + if (max_canon > 255) max_canon = 255; +#endif return (max_canon < 0 ? SAFE_MAX_CANON : max_canon > SAFE_MAX_CANON ? max_canon - MAX_CANON_SLACK : max_canon); @@ -882,7 +884,7 @@ set_window_size (int fd, int height, int width) void setup_pty (int fd) { - /* I'm told that TOICREMOTE does not mean control chars + /* I'm told that TIOCREMOTE does not mean control chars "can't be sent" but rather that they don't have input-editing or signaling effects. That should be good, because we have other ways @@ -961,7 +963,7 @@ init_baud_rate (struct device *d) assert (DEVICE_TTY_P (d)); { int input_fd = CONSOLE_TTY_DATA (con)->infd; -#if defined (WINDOWSNT) +#if defined (WIN32_NATIVE) DEVICE_TTY_DATA (d)->ospeed = 15; #elif defined (HAVE_TERMIOS) struct termios sg; @@ -1226,8 +1228,8 @@ unrequest_sigio (void) #ifdef SIGIO_REQUIRES_SEPARATE_PROCESS_GROUP -static int inherited_pgroup; -static int inherited_tty_pgroup; +static pid_t inherited_pgroup; +static pid_t inherited_tty_pgroup; #endif @@ -1245,7 +1247,7 @@ munge_tty_process_group (void) CONSOLE_LIVE_P (XCONSOLE (Vcontrolling_terminal))) { int fd = open ("/dev/tty", O_RDWR, 0); - int me = getpid (); + pid_t me = getpid (); EMACS_BLOCK_SIGNAL (SIGTTOU); EMACS_SET_TTY_PROCESS_GROUP (fd, &me); EMACS_UNBLOCK_SIGNAL (SIGTTOU); @@ -1387,7 +1389,7 @@ disconnect_controlling_terminal (void) /* 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 WINDOWSNT +#ifndef WIN32_NATIVE /* 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 @@ -1406,7 +1408,7 @@ emacs_get_tty (int fd, struct emacs_tty *settings) if (ioctl (fd, TCGETA, &settings->main) < 0) return -1; -#elif !defined (WINDOWSNT) +#elif !defined (WIN32_NATIVE) /* I give up - I hope you have the BSD ioctls. */ if (ioctl (fd, TIOCGETP, &settings->main) < 0) return -1; @@ -1480,7 +1482,7 @@ emacs_set_tty (int fd, struct emacs_tty *settings, int flushp) if (ioctl (fd, flushp ? TCSETAF : TCSETAW, &settings->main) < 0) return -1; -#elif !defined (WINDOWSNT) +#elif !defined (WIN32_NATIVE) /* I give up - I hope you have the BSD ioctls. */ if (ioctl (fd, (flushp) ? TIOCSETP : TIOCSETN, &settings->main) < 0) return -1; @@ -1503,7 +1505,7 @@ emacs_set_tty (int fd, struct emacs_tty *settings, int flushp) return 0; } -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ /* ------------------------------------------------------ */ /* Initializing a device */ @@ -1663,14 +1665,14 @@ tty_init_sys_modes_on_device (struct device *d) tty.main.c_iflag &= ~BRKINT; #endif /* AIX */ #else /* if not HAVE_TERMIO */ -#if !defined (WINDOWSNT) +#if !defined (WIN32_NATIVE) 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 WINDOWSNT */ +#endif /* not WIN32_NATIVE */ #endif /* not HAVE_TERMIO */ /* If going to use CBREAK mode, we must request C-g to interrupt @@ -2153,24 +2155,15 @@ hft_reset (struct console *con) #if !defined(HAVE_TEXT_START) && !defined(PDUMP) -#ifdef __cplusplus - extern "C" int _start (void); -#else - extern int _start (void); -#endif +EXTERN_C int _start (void); char * start_of_text (void) { #ifdef TEXT_START - return ((char *) TEXT_START); + return (char *) TEXT_START; #else -#ifdef GOULD - extern csrt (); - return ((char *) csrt); -#else /* not GOULD */ - return ((char *) _start); -#endif /* GOULD */ + return (char *) _start; #endif /* TEXT_START */ } #endif /* !defined(HAVE_TEXT_START) && !defined(PDUMP) */ @@ -2178,7 +2171,7 @@ start_of_text (void) /* * Return the address of the start of the data segment prior to * doing an unexec. After unexec the return value is undefined. - * See crt0.c for further information and definition of data_start. + * See ecrt0.c for further information and definition of data_start. * * Apparently, on BSD systems this is etext at startup. On * USG systems (swapping) this is highly mmu dependent and @@ -2201,7 +2194,7 @@ start_of_text (void) * */ -#if defined(ORDINARY_LINK) && !defined(__MINGW32__) +#if defined(ORDINARY_LINK) && !defined(MINGW) extern char **environ; #endif @@ -2279,15 +2272,10 @@ end_of_data (void) extern Lisp_Object Vsystem_name; -#ifdef HAVE_SOCKETS -# include -# include -#endif /* HAVE_SOCKETS */ - void init_system_name (void) { -#if defined (WINDOWSNT) +#if defined (WIN32_NATIVE) char hostname [MAX_COMPUTERNAME_LENGTH + 1]; size_t size = sizeof (hostname); GetComputerName (hostname, &size); @@ -2525,7 +2513,7 @@ strerror (int errnum) #endif /* ! HAVE_STRERROR */ -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE struct errentry { unsigned long oscode; /* Win32 error */ @@ -2622,7 +2610,7 @@ mswindows_set_last_errno (void) mswindows_set_errno (GetLastError ()); } -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ /************************************************************************/ @@ -2665,7 +2653,7 @@ sys_open (const char *path, int oflag, ...) PATHNAME_CONVERT_OUT (path); -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE /* Make all handles non-inheritable */ oflag |= _O_NOINHERIT; #endif @@ -2705,7 +2693,7 @@ interruptible_open (const char *path, int oflag, int mode) PATHNAME_CONVERT_OUT (nonreloc); -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE /* Make all handles non-inheritable */ oflag |= _O_NOINHERIT; #endif @@ -2819,7 +2807,7 @@ FILE * sys_fopen (const char *path, const char *type) { PATHNAME_CONVERT_OUT (path); -#if defined (WINDOWSNT) +#if defined (WIN32_NATIVE) { int fd; int oflag; @@ -2972,7 +2960,7 @@ int sys_mkdir (const char *path, mode_t mode) { PATHNAME_CONVERT_OUT (path); -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE return mkdir (path); #else return mkdir (path, mode); @@ -3043,7 +3031,7 @@ sys_readdir (DIR *dirp) Qfile_name); Dynarr_add_many (internal_DIRENTRY, internal_name, internal_len); - Dynarr_add (internal_DIRENTRY, 0); /* zero-terminate */ + Dynarr_add (internal_DIRENTRY, '\0'); /* NUL-terminate */ return (DIRENTRY *) Dynarr_atp (internal_DIRENTRY, 0); } } @@ -3120,25 +3108,28 @@ sys_readlink (const char *path, char *buf, size_t bufsiz) } #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) +xemacs_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 *****************/ @@ -3179,14 +3170,14 @@ sys_rename (const char *old, const char *new) { PATHNAME_CONVERT_OUT (old); PATHNAME_CONVERT_OUT (new); -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE /* Windows rename fails if NEW exists */ if (rename (old, new) == 0) return 0; if (errno != EEXIST) return -1; unlink (new); -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ return rename (old, new); } #endif /* ENCAPSULATE_RENAME */ @@ -3401,7 +3392,7 @@ static int process_times_available; static int get_process_times_1 (long *user_ticks, long *system_ticks) { -#if defined (_SC_CLK_TCK) || defined (CLK_TCK) && !defined(WINDOWSNT) +#if defined (_SC_CLK_TCK) || defined (CLK_TCK) && !defined(WIN32_NATIVE) /* We have the POSIX times() function available. */ struct tms tttt; times (&tttt); @@ -3543,7 +3534,7 @@ get_random (void) #if !defined (SYS_SIGLIST_DECLARED) && !defined (HAVE_SYS_SIGLIST) -#if defined(WINDOWSNT) || defined(__CYGWIN32__) +#if defined(WIN32_NATIVE) || defined(CYGWIN) const char *sys_siglist[] = { "bum signal!!", @@ -3879,7 +3870,7 @@ mkdir (const char *dpath, int dmode) int cpid, status, fd; struct stat statbuf; - if (stat (dpath, &statbuf) == 0) + if (stat (dpath, &statbuf) == 0) /* we do want stat() here */ { errno = EEXIST; /* Stat worked, so it already exists */ return -1; @@ -3938,7 +3929,7 @@ rmdir (const char *dpath) int cpid, status, fd; struct stat statbuf; - if (stat (dpath, &statbuf) != 0) + if (stat (dpath, &statbuf) != 0) /* we do want stat() here */ { /* Stat just set errno. We don't have to */ return -1; @@ -4007,59 +3998,3 @@ dlclose (void) } #endif /* USE_DL_STUBS */ - - - -#ifndef HAVE_STRCASECMP -/* - * From BSD - */ -static unsigned char charmap[] = { - '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', - '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', - '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', - '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', - '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', - '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', - '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', - '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', - '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', - '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', - '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', - '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', - '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', - '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', - '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', - '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', - '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', - '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', - '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', - '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', - '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', - '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', - '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', - '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', - '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', - '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', - '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', - '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', - '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', - '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', - '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', - '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', -}; - -int -strcasecmp (char *s1, char *s2) -{ - unsigned char *cm = charmap; - unsigned char *us1 = (unsigned char *) s1; - unsigned char *us2 = (unsigned char *)s2; - - while (cm[*us1] == cm[*us2++]) - if (*us1++ == '\0') - return (0); - - return (cm[*us1] - cm[*--us2]); -} -#endif /* !HAVE_STRCASECMP */