diff options
Diffstat (limited to 'ioext.c')
-rw-r--r-- | ioext.c | 68 |
1 files changed, 40 insertions, 28 deletions
@@ -48,12 +48,13 @@ # include <sys/types.h> #endif -#ifndef THINK_C +#ifndef macintosh # ifdef vms # include <stat.h> # else # include <sys/stat.h> -# endif +#endif + # ifdef __TURBOC__ # include <io.h> # endif @@ -74,6 +75,9 @@ SCM stat2scm P((struct stat *stat_temp)); # include <sys/types.h> # include <unistd.h> #endif +#ifdef linux +# include <unistd.h> +#endif #ifndef STDC_HEADERS int chdir P((const char *path)); @@ -124,6 +128,7 @@ SCM read_line(port) switch (c) { case LINE_INCREMENTORS: case EOF: + if (j>0 && '\r'==p[j-1]) j--; if (len==j) return tok_buf; return resizuve(tok_buf, (SCM)MAKINUM(j)); default: @@ -222,7 +227,7 @@ SCM reopen_file(filename, modes, port) } #ifndef MCH_AMIGA - +# ifndef macintosh static char s_dup[]="duplicate-port"; SCM l_dup(oldpt, modes) SCM oldpt, modes; @@ -262,6 +267,7 @@ SCM l_dup2(into_pt, from_pt) ALLOW_INTS; return into_pt; } +# endif # ifndef vms # ifndef _WIN32 @@ -293,7 +299,7 @@ SCM l_readdir(port) if (!rdent) {ALLOW_INTS; return BOOL_F;} ALLOW_INTS; /* rdent could be overwritten by another readdir to the same handle */ - return makfrom0str(rdent->d_name); + return makfrom0str((char *)rdent->d_name); } static char s_rewinddir[]="rewinddir"; SCM l_rewinddir(port) @@ -396,6 +402,7 @@ SCM l_getcwd() # endif } +# ifndef __MWERKS__ static char s_chmod[] = "chmod"; SCM l_chmod(pathname, mode) SCM pathname, mode; @@ -406,6 +413,7 @@ SCM l_chmod(pathname, mode) SYSCALL(val = chmod(CHARS(pathname), INUM(mode));); return val ? BOOL_F : BOOL_T; } +# endif # ifndef vms # ifdef __EMX__ @@ -431,6 +439,7 @@ SCM l_utime(pathname, acctime, modtime) } # endif /* vms */ +# ifndef __MWERKS__ static char s_umask[] = "umask"; SCM l_umask(mode) SCM mode; @@ -438,6 +447,7 @@ SCM l_umask(mode) ASSERT(INUMP(mode), mode, ARG1, s_umask); return MAKINUM(umask(INUM(mode))); } +# endif # endif /* MCH_AMIGA */ #endif /* THINK_C */ @@ -448,7 +458,7 @@ SCM ren_fil(oldname, newname) SCM ans; ASSERT(NIMP(oldname) && STRINGP(oldname), oldname, ARG1, s_ren_fil); ASSERT(NIMP(newname) && STRINGP(newname), newname, ARG2, s_ren_fil); -#ifdef STDC_HEADERS +#if 1 /* def STDC_HEADERS */ SYSCALL(ans = (rename(CHARS(oldname), CHARS(newname))) ? BOOL_F: BOOL_T;); return ans; #else @@ -471,20 +481,14 @@ SCM l_fileno(port) if (tc16_fport != TYP16(port)) return BOOL_F; return MAKINUM(fileno(STREAM(port))); } -static char s_isatty[] = "isatty?"; -SCM l_isatty(port) - SCM port; -{ - ASSERT(NIMP(port) && OPPORTP(port), port, ARG1, s_isatty); - if (tc16_fport != TYP16(port)) return BOOL_F; - return isatty(fileno(STREAM(port)))?BOOL_T:BOOL_F; -} -#ifndef F_OK -# define F_OK 00 -# define X_OK 01 -# define W_OK 02 -# define R_OK 04 -#endif +#ifndef THINK_C +# ifndef __MWERKS__ +# ifndef F_OK +# define F_OK 00 +# define X_OK 01 +# define W_OK 02 +# define R_OK 04 +# endif static char s_access[] = "access"; SCM l_access(pathname, mode) SCM pathname, mode; @@ -502,8 +506,9 @@ SCM l_access(pathname, mode) SYSCALL(val = access(CHARS(pathname), imodes);); return val ? BOOL_F : BOOL_T; } +# endif /* __MWERKS__ */ -#ifndef THINK_C +SCM stat2scm P((struct stat *stat_temp)); char s_stat[] = "stat"; SCM l_stat(str) @@ -563,10 +568,10 @@ SCM l_getpid() return MAKINUM((unsigned long)getpid()); } # endif /* MCH_AMIGA */ -#endif /* THINK_C */ +#endif /* THINK_C */ #ifndef __IBMC__ -# ifndef THINK_C +# ifndef macintosh # ifndef __WATCOMC__ # ifndef GO32 # ifndef _Windows @@ -587,8 +592,10 @@ SCM i_execv(modes, path, args) args = cons(path, args); DEFER_INTS; execargv = makargvfrmstrs(args, s_execv); - ALLOW_INTS; + ignore_signals(); (strchr(modes, 'p') ? execvp : execv)(execargv[0], &execargv[1]); + unignore_signals(); + ALLOW_INTS; perror(execargv[0]); return MAKINUM(errno); } @@ -628,7 +635,6 @@ SCM l_putenv(str) static iproc subr1s[] = { {s_file_position, file_position}, {s_fileno, l_fileno}, - {s_isatty, l_isatty}, #ifndef MCH_AMIGA # ifndef vms # ifndef _WIN32 @@ -642,10 +648,12 @@ static iproc subr1s[] = { #endif #ifndef THINK_C # ifndef MCH_AMIGA +# ifndef __MWERKS__ {s_umask, l_umask}, +# endif # endif - {s_chdir, lchdir}, {s_stat, l_stat}, + {s_chdir, lchdir}, #endif {0, 0}}; @@ -655,12 +663,14 @@ static iproc subr1os[] = { static iproc subr2s[] = { {s_ren_fil, ren_fil}, +#ifndef macintosh {s_access, l_access}, +#endif #ifndef MCH_AMIGA + {s_mkdir, l_mkdir}, +# ifndef macintosh {s_dup, l_dup}, {s_dup2, l_dup2}, - {s_mkdir, l_mkdir}, -# ifndef THINK_C {s_chmod, l_chmod}, # endif #endif @@ -681,7 +691,9 @@ void init_ioext() make_subr(s_reopen_file, tc7_subr_3, reopen_file); #ifndef THINK_C # ifndef MCH_AMIGA +# ifndef __MWERKS__ make_subr("getpid", tc7_subr_0, l_getpid); +# endif make_subr("getcwd", tc7_subr_0, l_getcwd); # ifndef vms # ifndef _WIN32 @@ -692,7 +704,7 @@ void init_ioext() # endif #endif #ifndef __IBMC__ -# ifndef THINK_C +# ifndef macintosh # ifndef __WATCOMC__ # ifndef GO32 # ifndef _Windows |