X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fsysdep.c;h=54059496cc1d19d4b0ee8adbeb2c0d0f0702fc90;hb=761f92c159f8327ecf570ab8e9a4b27cd5e35732;hp=e027ad290746ce7a760bd2fcb3956ae2079de688;hpb=762383636a99307282c2d93d26c35c046ec24da1;p=chise%2Fxemacs-chise.git.1 diff --git a/src/sysdep.c b/src/sysdep.c index e027ad2..5405949 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -30,23 +30,6 @@ Boston, MA 02111-1307, USA. */ #define DONT_ENCAPSULATE #include - -#ifdef WIN32_NATIVE -#ifdef MINGW -#include -#else -/* 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. - - 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 */ - #include "lisp.h" /* ------------------------------- */ @@ -94,6 +77,19 @@ Boston, MA 02111-1307, USA. */ #include "nt.h" #endif +#ifdef WIN32_NATIVE +#ifdef MINGW +#include <../mingw/process.h> +#else +/* 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. +*/ +#include <../include/process.h> +#endif /* MINGW */ +#endif /* WIN32_NATIVE */ + /* ------------------------------- */ /* TTY definitions */ /* ------------------------------- */ @@ -111,10 +107,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 @@ -144,22 +136,6 @@ static void hft_reset (struct console *c); #include #endif -/* ------------------------------- */ -/* miscellaneous */ -/* ------------------------------- */ - -#ifndef HAVE_UTIMES -#ifndef HAVE_STRUCT_UTIMBUF -/* We want to use utime rather than utimes, but we couldn't find the - structure declaration. We'll use the traditional one. */ -struct utimbuf -{ - long actime; - long modtime; -}; -#endif -#endif - /************************************************************************/ /* subprocess control */ @@ -777,6 +753,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); @@ -883,7 +864,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 @@ -990,7 +971,7 @@ init_baud_rate (struct device *d) sg.sg_ospeed = B9600; if (ioctl (input_fd, TIOCGETP, &sg) < 0) - abort (); + ABORT (); DEVICE_TTY_DATA (d)->ospeed = sg.sg_ospeed; #endif } @@ -1227,8 +1208,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 @@ -1246,7 +1227,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); @@ -2170,7 +2151,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 @@ -2203,7 +2184,7 @@ start_of_data (void) #ifdef DATA_START return ((char *) DATA_START); #else -#ifdef ORDINARY_LINK +#if defined (ORDINARY_LINK) || defined(PDUMP) /* * This is a hack. Since we're not linking crt0.c or pre_crt0.c, * data_start isn't defined. We take the address of environ, which @@ -2352,7 +2333,11 @@ init_system_name (void) xzero (hints); hints.ai_flags = AI_CANONNAME; +#ifdef IPV6_CANONICALIZE hints.ai_family = AF_UNSPEC; +#else + hints.ai_family = PF_INET; +#endif hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; if (!getaddrinfo (hostname, NULL, &hints, &res)) @@ -3000,23 +2985,22 @@ sys_readdir (DIR *dirp) if (rtnval == NULL) /* End of directory */ return NULL; { - Extcount external_len; - int ascii_filename_p = 1; 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++) - { - if (!BYTE_ASCII_P (external_name[external_len])) - ascii_filename_p = 0; - } - if (ascii_filename_p) + Extcount external_len = strlen (rtnval->d_name); + const Bufbyte *internal_name; + Bytecount internal_len; + + TO_INTERNAL_FORMAT (DATA, (external_name, external_len), + ALLOCA, (internal_name, internal_len), + Qfile_name); + + /* check for common case of ASCII filename */ + if (internal_len == external_len && + !memcmp (external_name, internal_name, internal_len)) return rtnval; { /* Non-ASCII filename */ static Bufbyte_dynarr *internal_DIRENTRY; - const Bufbyte *internal_name; - Bytecount internal_len; if (!internal_DIRENTRY) internal_DIRENTRY = Dynarr_new (Bufbyte); else @@ -3025,12 +3009,9 @@ sys_readdir (DIR *dirp) 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); 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); } } @@ -3119,9 +3100,8 @@ sys_fstat (int fd, struct stat *buf) } #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 @@ -3130,7 +3110,6 @@ sys_stat (const char *path, struct stat *buf) return stat (path, buf); #endif } -#endif /* ENCAPSULATE_STAT */ /****************** file-manipulation calls *****************/ @@ -3175,9 +3154,11 @@ sys_rename (const char *old, const char *new) /* Windows rename fails if NEW exists */ if (rename (old, new) == 0) return 0; - if (errno != EEXIST) + /* In some cases errno is EACCES if NEW exists */ + if (errno != EEXIST && errno != EACCES) + return -1; + if (unlink (new) != 0) return -1; - unlink (new); #endif /* WIN32_NATIVE */ return rename (old, new); } @@ -3363,19 +3344,31 @@ gettimeofday (struct timeval *tp, struct timezone *tzp) access to those functions goes through the following. */ int -set_file_times (char *filename, EMACS_TIME atime, EMACS_TIME mtime) +set_file_times (Lisp_Object path, EMACS_TIME atime, EMACS_TIME mtime) { -#ifdef HAVE_UTIMES - struct timeval tv[2]; - tv[0] = atime; - tv[1] = mtime; - return utimes (filename, tv); -#else /* not HAVE_UTIMES */ +#if defined (WIN32_NATIVE) + struct utimbuf utb; + utb.actime = EMACS_SECS (atime); + utb.modtime = EMACS_SECS (mtime); + return mswindows_utime (path, &utb); +#elif defined (HAVE_UTIME) struct utimbuf utb; + Extbyte *filename; utb.actime = EMACS_SECS (atime); utb.modtime = EMACS_SECS (mtime); + LISP_STRING_TO_EXTERNAL (path, filename, Qfile_name); return utime (filename, &utb); -#endif /* not HAVE_UTIMES */ +#elif defined (HAVE_UTIMES) + struct timeval tv[2]; + Extbyte *filename; + tv[0] = atime; + tv[1] = mtime; + LISP_STRING_TO_EXTERNAL (path, filename, Qfile_name); + return utimes (filename, tv); +#else + /* No file times setting function available. */ + return -1; +#endif } /* */ @@ -3513,19 +3506,19 @@ long get_random (void) { long val = random (); -#if VALBITS > RAND_BITS +#if INT_VALBITS > RAND_BITS val = (val << RAND_BITS) ^ random (); -#if VALBITS > 2*RAND_BITS +#if INT_VALBITS > 2*RAND_BITS val = (val << RAND_BITS) ^ random (); -#if VALBITS > 3*RAND_BITS +#if INT_VALBITS > 3*RAND_BITS val = (val << RAND_BITS) ^ random (); -#if VALBITS > 4*RAND_BITS +#if INT_VALBITS > 4*RAND_BITS val = (val << RAND_BITS) ^ random (); #endif /* need at least 5 */ #endif /* need at least 4 */ #endif /* need at least 3 */ #endif /* need at least 2 */ - return val & ((1L << VALBITS) - 1); + return val & (EMACS_INT) ((1UL << INT_VALBITS) - 1); } @@ -3587,7 +3580,7 @@ const char *sys_siglist[NSIG + 1] = DEFER_GETTEXT ("bad argument to system call"), /* 12 SIGSYS */ DEFER_GETTEXT ("write on a pipe with no one to read it"), /* 13 SIGPIPE */ DEFER_GETTEXT ("alarm clock"), /* 14 SIGALRM */ - DEFER_GETTEXT ("software termination signum"), /* 15 SIGTERM */ + DEFER_GETTEXT ("software termination signal"), /* 15 SIGTERM */ DEFER_GETTEXT ("user defined signal 1"), /* 16 SIGUSR1 */ DEFER_GETTEXT ("user defined signal 2"), /* 17 SIGUSR2 */ DEFER_GETTEXT ("death of a child"), /* 18 SIGCLD */ @@ -3626,7 +3619,7 @@ const char *sys_siglist[NSIG + 1] = DEFER_GETTEXT ("bad argument to system call"), /* 12 SIGSYS */ DEFER_GETTEXT ("write on a pipe with no one to read it"), /* 13 SIGPIPE */ DEFER_GETTEXT ("alarm clock"), /* 14 SIGALRM */ - DEFER_GETTEXT ("software termination signum"), /* 15 SIGTERM */ + DEFER_GETTEXT ("software termination signal"), /* 15 SIGTERM */ DEFER_GETTEXT ("user defined signal 1"), /* 16 SIGUSR1 */ DEFER_GETTEXT ("user defined signal 2"), /* 17 SIGUSR2 */ DEFER_GETTEXT ("death of a child"), /* 18 SIGCLD */ @@ -3871,7 +3864,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; @@ -3930,7 +3923,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; @@ -3999,59 +3992,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 */