* Fucking K&R syntax!
git-svn-id: svn://svn.zoy.org/elk/trunk@89 55e467fa-43c5-0310-a8a2-de718669efc6
This commit is contained in:
		
							parent
							
								
									df7cace828
								
							
						
					
					
						commit
						28fb5f0f30
					
				| 
						 | 
				
			
			@ -94,7 +94,7 @@ static SYMDESCR Errno_Syms[] = {
 | 
			
		|||
 | 
			
		||||
Object Unix_Errobj, V_Call_Errhandler;
 | 
			
		||||
 | 
			
		||||
static Object P_Errorp(x) Object x; {
 | 
			
		||||
static Object P_Errorp(Object x) {
 | 
			
		||||
    return EQ(x, Unix_Errobj) ? True : False;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ static Object P_Errno() {
 | 
			
		|||
    return Nullp(sym) ? Make_Integer(Saved_Errno) : sym;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_error() {
 | 
			
		||||
void elk_init_unix_error() {
 | 
			
		||||
    Unix_Errobj = Intern("*unix-error-object*");
 | 
			
		||||
    Unix_Errobj = Const_Cons(Unix_Errobj, Null);
 | 
			
		||||
    Global_GC_Link(Unix_Errobj);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
static SYMDESCR Open_Syms[] = {
 | 
			
		||||
    { "read",       1 },
 | 
			
		||||
    { "write",      2 },
 | 
			
		||||
| 
						 | 
				
			
			@ -82,13 +84,13 @@ SYMDESCR Lseek_Syms[] = {
 | 
			
		|||
 | 
			
		||||
/* Dangerous: may be used to close the filedescriptor of a port.
 | 
			
		||||
 */
 | 
			
		||||
static Object P_Close(fd) Object fd; {
 | 
			
		||||
static Object P_Close(Object fd) {
 | 
			
		||||
    if (close(Get_Integer(fd)) == -1)
 | 
			
		||||
        Raise_System_Error("~E");
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Close_On_Exec(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Close_On_Exec(int argc, Object *argv) {
 | 
			
		||||
    int flags, fd;
 | 
			
		||||
 | 
			
		||||
    fd = Get_Integer(argv[0]);
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +104,7 @@ static Object P_Close_On_Exec(argc, argv) int argc; Object *argv; {
 | 
			
		|||
    return flags & 1 ? True : False;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Dup(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Dup(int argc, Object *argv) {
 | 
			
		||||
    int fd = Get_Integer(argv[0]), ret;
 | 
			
		||||
 | 
			
		||||
    if ((ret = (argc == 1 ? dup(fd) : dup2(fd, Get_Integer(argv[1])))) == -1)
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +112,7 @@ static Object P_Dup(argc, argv) int argc; Object *argv; {
 | 
			
		|||
    return Make_Integer(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Filedescriptor_Flags(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Filedescriptor_Flags(int argc, Object *argv) {
 | 
			
		||||
    int flags, fd;
 | 
			
		||||
 | 
			
		||||
    fd = Get_Integer(argv[0]);
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +125,7 @@ static Object P_Filedescriptor_Flags(argc, argv) int argc; Object *argv; {
 | 
			
		|||
    return Bits_To_Symbols((unsigned long)flags, 1, Fcntl_Flags);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Fildescriptor_Port(fd, mode) Object fd, mode; {
 | 
			
		||||
static Object P_Fildescriptor_Port(Object fd, Object mode) {
 | 
			
		||||
    int n, flags;
 | 
			
		||||
    FILE *fp;
 | 
			
		||||
    Object ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +155,7 @@ static Object P_Fildescriptor_Port(fd, mode) Object fd, mode; {
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Isatty(fd) Object fd; {
 | 
			
		||||
static Object P_Isatty(Object fd) {
 | 
			
		||||
    return isatty(Get_Integer(fd)) ? True : False;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +169,7 @@ static Object P_List_Open_Modes() {
 | 
			
		|||
 | 
			
		||||
/* Bad assumption: off_t fits into an unsigned int.
 | 
			
		||||
 */
 | 
			
		||||
static Object P_Lseek(fd, off, whence) Object fd, off, whence; {
 | 
			
		||||
static Object P_Lseek(Object fd, Object off, Object whence) {
 | 
			
		||||
    off_t ret;
 | 
			
		||||
 | 
			
		||||
    if ((ret = lseek(Get_Integer(fd), (off_t)Get_Long(off),
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +203,7 @@ static Object P_Num_Filedescriptors() {
 | 
			
		|||
    return Make_Integer(Num_Filedescriptors());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Open(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Open(int argc, Object *argv) {
 | 
			
		||||
    Object fn;
 | 
			
		||||
    int mode, n;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -226,14 +228,14 @@ static Object P_Pipe() {
 | 
			
		|||
    return Integer_Pair(fd[0], fd[1]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Port_Filedescriptor(port) Object port; {
 | 
			
		||||
static Object P_Port_Filedescriptor(Object port) {
 | 
			
		||||
    Check_Type(port, T_Port);
 | 
			
		||||
    if ((PORT(port)->flags & (P_STRING|P_OPEN)) != P_OPEN)
 | 
			
		||||
        Primitive_Error("~s: invalid port", port);
 | 
			
		||||
    return Make_Integer(fileno(PORT(port)->file));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object Read_Write(argc, argv, readflg) int argc; Object *argv; {
 | 
			
		||||
static Object Read_Write(int argc, Object *argv, int readflg) {
 | 
			
		||||
    struct S_String *sp;
 | 
			
		||||
    int len, fd;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -255,15 +257,15 @@ static Object Read_Write(argc, argv, readflg) int argc; Object *argv; {
 | 
			
		|||
 | 
			
		||||
/* Avoid name clash with P_Read/P_Write of interpreter kernel
 | 
			
		||||
 */
 | 
			
		||||
static Object P_Readx(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Readx(int argc, Object *argv) {
 | 
			
		||||
    return Read_Write(argc, argv, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Writex(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Writex(int argc, Object *argv) {
 | 
			
		||||
    return Read_Write(argc, argv, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Ttyname(fd) Object fd; {
 | 
			
		||||
static Object P_Ttyname(Object fd) {
 | 
			
		||||
    char *ret;
 | 
			
		||||
    extern char *ttyname();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UTIME_H
 | 
			
		||||
#  include <utime.h>
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +57,7 @@ static SYMDESCR Access_Syms[] = {
 | 
			
		|||
    { 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static Object P_Accessp(fn, mode) Object fn, mode; {
 | 
			
		||||
static Object P_Accessp(Object fn, Object mode) {
 | 
			
		||||
    if (access(Get_Strsym(fn), (int)Symbols_To_Bits(mode, 1, Access_Syms))
 | 
			
		||||
            == 0)
 | 
			
		||||
        return True;
 | 
			
		||||
| 
						 | 
				
			
			@ -63,37 +65,37 @@ static Object P_Accessp(fn, mode) Object fn, mode; {
 | 
			
		|||
    return False;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Chdir(fn) Object fn; {
 | 
			
		||||
static Object P_Chdir(Object fn) {
 | 
			
		||||
    if (chdir(Get_Strsym(fn)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Chmod(fn, mode) Object fn, mode; {
 | 
			
		||||
static Object P_Chmod(Object fn, Object mode) {
 | 
			
		||||
    if (chmod(Get_Strsym(fn), Get_Integer(mode)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Chown(fn, uid, gid) Object fn, uid, gid; {
 | 
			
		||||
static Object P_Chown(Object fn, Object uid, Object gid) {
 | 
			
		||||
    if (chown(Get_Strsym(fn), Get_Integer(uid), Get_Integer(gid)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Link(fn1, fn2) Object fn1, fn2; {
 | 
			
		||||
static Object P_Link(Object fn1, Object fn2) {
 | 
			
		||||
    if (link(Get_Strsym(fn1), Get_Strsym(fn2)) == -1)
 | 
			
		||||
        Raise_System_Error2("(~s ~s): ~E", fn1, fn2);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Mkdir(fn, mode) Object fn, mode; {
 | 
			
		||||
static Object P_Mkdir(Object fn, Object mode) {
 | 
			
		||||
    if (mkdir(Get_Strsym(fn), Get_Integer(mode)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Read_Directory(fn) Object fn; {
 | 
			
		||||
static Object P_Read_Directory(Object fn) {
 | 
			
		||||
    DIR *d;
 | 
			
		||||
#ifdef HAVE_DIRENT
 | 
			
		||||
    struct dirent *dp;
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +127,7 @@ static Object P_Read_Directory(fn) Object fn; {
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Rename(fromfn, tofn) Object fromfn, tofn; {
 | 
			
		||||
static Object P_Rename(Object fromfn, Object tofn) {
 | 
			
		||||
#ifdef HAVE_RENAME
 | 
			
		||||
    if (rename(Get_Strsym(fromfn), Get_Strsym(tofn)) == -1)
 | 
			
		||||
        Raise_System_Error2("(~s ~s): ~E", fromfn, tofn);
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +151,7 @@ static Object P_Rename(fromfn, tofn) Object fromfn, tofn; {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object General_Stat(obj, ret, l) Object obj, ret; int l; {
 | 
			
		||||
static Object General_Stat(Object obj, Object ret, int l) {
 | 
			
		||||
    Object x;
 | 
			
		||||
    struct stat st;
 | 
			
		||||
    char *s, *fn = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -212,16 +214,16 @@ static Object General_Stat(obj, ret, l) Object obj, ret; int l; {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Stat(obj, ret) Object obj, ret; {
 | 
			
		||||
static Object P_Stat(Object obj, Object ret) {
 | 
			
		||||
    return General_Stat(obj, ret, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef SYMLINKS
 | 
			
		||||
static Object P_Lstat(obj, ret) Object obj, ret; {
 | 
			
		||||
static Object P_Lstat(Object obj, Object ret) {
 | 
			
		||||
    return General_Stat(obj, ret, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Readlink(fn) Object fn; {
 | 
			
		||||
static Object P_Readlink(Object fn) {
 | 
			
		||||
    char *buf;
 | 
			
		||||
    int len;
 | 
			
		||||
    Object ret;
 | 
			
		||||
| 
						 | 
				
			
			@ -238,26 +240,26 @@ static Object P_Readlink(fn) Object fn; {
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Rmdir(fn) Object fn; {
 | 
			
		||||
static Object P_Rmdir(Object fn) {
 | 
			
		||||
    if (rmdir(Get_Strsym(fn)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Symlink(fn1, fn2) Object fn1, fn2; {
 | 
			
		||||
static Object P_Symlink(Object fn1, Object fn2) {
 | 
			
		||||
    if (symlink(Get_Strsym(fn1), Get_Strsym(fn2)) == -1)
 | 
			
		||||
        Raise_System_Error2("(~s ~s): ~E", fn1, fn2);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static Object P_Unlink(fn) Object fn; {
 | 
			
		||||
static Object P_Unlink(Object fn) {
 | 
			
		||||
    if (unlink(Get_Strsym(fn)) == -1)
 | 
			
		||||
        Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Utime(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Utime(int argc, Object *argv) {
 | 
			
		||||
    struct utimbuf ut;
 | 
			
		||||
 | 
			
		||||
    if (argc == 2)
 | 
			
		||||
| 
						 | 
				
			
			@ -272,7 +274,7 @@ static Object P_Utime(argc, argv) int argc; Object *argv; {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_file() {
 | 
			
		||||
void elk_init_unix_file() {
 | 
			
		||||
    Def_Prim(P_Accessp,            "unix-access?",              2, 2, EVAL);
 | 
			
		||||
    Def_Prim(P_Chdir,              "unix-chdir",                1, 1, EVAL);
 | 
			
		||||
    Def_Prim(P_Chmod,              "unix-chmod",                2, 2, EVAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,8 +43,8 @@
 | 
			
		|||
 | 
			
		||||
#ifdef LOCKS
 | 
			
		||||
 | 
			
		||||
static Object P_Internal_Lock_Operation(fd, lck, block, what, ret)
 | 
			
		||||
        Object fd, lck, block, what, ret; {
 | 
			
		||||
static Object P_Internal_Lock_Operation(Object fd, Object lck, Object block,
 | 
			
		||||
                                        Object what, Object ret) {
 | 
			
		||||
#ifdef RECORD_LOCKS
 | 
			
		||||
    struct flock fl;
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ static Object P_Internal_Lock_Operation(fd, lck, block, what, ret)
 | 
			
		|||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
elk_init_unix_lock() {
 | 
			
		||||
void elk_init_unix_lock() {
 | 
			
		||||
#ifdef LOCKS
 | 
			
		||||
    Def_Prim(P_Internal_Lock_Operation, "unix-internal-lock-operation",
 | 
			
		||||
        5, 5, EVAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,9 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
static Object P_Getpass(prompt) Object prompt; {
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
static Object P_Getpass(Object prompt) {
 | 
			
		||||
    char *ret;
 | 
			
		||||
    extern char *getpass();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +44,6 @@ static Object P_Getpass(prompt) Object prompt; {
 | 
			
		|||
    return Make_String(ret, strlen(ret));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_misc() {
 | 
			
		||||
void elk_init_unix_misc() {
 | 
			
		||||
    Def_Prim(P_Getpass,          "unix-getpass",                1, 1, EVAL);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,10 +30,11 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <pwd.h>
 | 
			
		||||
#include <grp.h>
 | 
			
		||||
 | 
			
		||||
static Object P_Get_Passwd(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Get_Passwd(int argc, Object *argv) {
 | 
			
		||||
    struct passwd *p;
 | 
			
		||||
    Object arg, x;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +94,7 @@ static Object P_End_Passwd() {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Get_Group(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Get_Group(int argc, Object *argv) {
 | 
			
		||||
    char **pp;
 | 
			
		||||
    struct group *p;
 | 
			
		||||
    Object arg, member, x;
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +157,7 @@ static Object P_End_Group() {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_passwd() {
 | 
			
		||||
void elk_init_unix_passwd() {
 | 
			
		||||
    Def_Prim(P_Get_Passwd,    "unix-get-passwd-vector-fill!",   1, 2, VARARGS);
 | 
			
		||||
    Def_Prim(P_Rewind_Passwd, "unix-rewind-passwd",             0, 0, EVAL);
 | 
			
		||||
    Def_Prim(P_End_Passwd,    "unix-end-passwd",                0, 0, EVAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/times.h>
 | 
			
		||||
 | 
			
		||||
/* "extern" in front of the next declaration causes the Ultrix 4.2 linker
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +50,8 @@ static Object P_Environ() {
 | 
			
		|||
    GC_Link2(ret, cell);
 | 
			
		||||
    for (ep = environ; *ep; ep++) {
 | 
			
		||||
        cell = Cons(Null, Null);
 | 
			
		||||
        if (p = index(*ep, '='))
 | 
			
		||||
        p = index(*ep, '=');
 | 
			
		||||
        if (p)
 | 
			
		||||
            *p++ = 0;
 | 
			
		||||
        else p = c+1;
 | 
			
		||||
        str = Make_String(p, strlen(p));
 | 
			
		||||
| 
						 | 
				
			
			@ -116,11 +119,11 @@ static Object General_Exec(argc, argv, path) int argc; Object *argv;
 | 
			
		|||
    Raise_System_Error1("~s: ~E", fn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Exec(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Exec(int argc, Object *argv) {
 | 
			
		||||
    return General_Exec(argc, argv, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Exec_Path(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Exec_Path(int argc, Object *argv) {
 | 
			
		||||
    if (argc == 3)   /* There is no execvpe (yet?). */
 | 
			
		||||
        Primitive_Error("environment argument not supported");
 | 
			
		||||
    return General_Exec(argc, argv, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +141,7 @@ static Object P_Fork() {
 | 
			
		|||
    return Make_Integer(pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Getenv(e) Object e; {
 | 
			
		||||
static Object P_Getenv(Object e) {
 | 
			
		||||
    extern char *getenv();
 | 
			
		||||
    char *s;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +198,7 @@ static Object P_Getgroups() {
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Nice(incr) Object incr; {
 | 
			
		||||
static Object P_Nice(Object incr) {
 | 
			
		||||
    int ret;
 | 
			
		||||
 | 
			
		||||
    errno = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -204,10 +207,9 @@ static Object P_Nice(incr) Object incr; {
 | 
			
		|||
    return Make_Integer(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object Open_Pipe(cmd, flags) Object cmd; int flags; {
 | 
			
		||||
static Object Open_Pipe(Object cmd, int flags) {
 | 
			
		||||
    FILE *fp;
 | 
			
		||||
    Object ret;
 | 
			
		||||
    extern pclose();
 | 
			
		||||
 | 
			
		||||
    Disable_Interrupts;
 | 
			
		||||
    if ((fp = popen(Get_String(cmd), flags == P_INPUT ? "r" : "w")) == 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -221,16 +223,16 @@ static Object Open_Pipe(cmd, flags) Object cmd; int flags; {
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Open_Input_Pipe(cmd) Object cmd; {
 | 
			
		||||
static Object P_Open_Input_Pipe(Object cmd) {
 | 
			
		||||
    return Open_Pipe(cmd, P_INPUT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Open_Output_Pipe(cmd) Object cmd; {
 | 
			
		||||
static Object P_Open_Output_Pipe(Object cmd) {
 | 
			
		||||
    return Open_Pipe(cmd, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Process_Resources(ret1, ret2) Object ret1, ret2; {
 | 
			
		||||
    static hzval;
 | 
			
		||||
static Object P_Process_Resources(Object ret1, Object ret2) {
 | 
			
		||||
    static int hzval;
 | 
			
		||||
    struct tms tms;
 | 
			
		||||
    Object x;
 | 
			
		||||
    GC_Node2;
 | 
			
		||||
| 
						 | 
				
			
			@ -266,12 +268,12 @@ static Object P_Process_Resources(ret1, ret2) Object ret1, ret2; {
 | 
			
		|||
    return Make_Integer(hzval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Sleep(s) Object s; {
 | 
			
		||||
static Object P_Sleep(Object s) {
 | 
			
		||||
    (void)sleep(Get_Unsigned(s));
 | 
			
		||||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_System(cmd) Object cmd; {
 | 
			
		||||
static Object P_System(Object cmd) {
 | 
			
		||||
    int n, pid, status;
 | 
			
		||||
    char *s = Get_String(cmd);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -297,12 +299,13 @@ static Object P_System(cmd) Object cmd; {
 | 
			
		|||
    if (n == -1)
 | 
			
		||||
        return False;
 | 
			
		||||
    */
 | 
			
		||||
    if (n = (status & 0377))
 | 
			
		||||
    n = status & 0377;
 | 
			
		||||
    if (n)
 | 
			
		||||
        return Cons(Make_Integer(n), Null);
 | 
			
		||||
    return Make_Integer((status >> 8) & 0377);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Umask(mask) Object mask; {
 | 
			
		||||
static Object P_Umask(Object mask) {
 | 
			
		||||
    return Make_Integer(umask(Get_Integer(mask)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -351,7 +354,7 @@ err:
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_process() {
 | 
			
		||||
void elk_init_unix_process() {
 | 
			
		||||
    Def_Prim(P_Environ,             "unix-environ",              0, 0, EVAL);
 | 
			
		||||
    Def_Prim(P_Exec,                "unix-exec",                 2, 3, VARARGS);
 | 
			
		||||
    Def_Prim(P_Exec_Path,           "unix-exec-path",            2, 3, VARARGS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ static SYMDESCR Signal_Syms[] = {
 | 
			
		|||
    { 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static Object P_Kill(pid, sig) Object pid, sig; {
 | 
			
		||||
static Object P_Kill(Object pid, Object sig) {
 | 
			
		||||
    int t, s;
 | 
			
		||||
 | 
			
		||||
    if ((t = TYPE(sig)) == T_Fixnum || t == T_Bignum)
 | 
			
		||||
| 
						 | 
				
			
			@ -209,12 +209,12 @@ static Object P_Pause() {
 | 
			
		|||
 | 
			
		||||
static Object Handlers;
 | 
			
		||||
 | 
			
		||||
static Object P_Alarm(s) Object s; {
 | 
			
		||||
static Object P_Alarm(Object s) {
 | 
			
		||||
    return Make_Unsigned(alarm(Get_Unsigned(s)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*ARGSUSED*/
 | 
			
		||||
void General_Handler(sig) int sig; {
 | 
			
		||||
void General_Handler(int sig) {
 | 
			
		||||
    Object fun, args;
 | 
			
		||||
 | 
			
		||||
#ifndef BSD_SIGNALS
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ void General_Handler(sig) int sig; {
 | 
			
		|||
    /*NOTREACHED*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object Action_To_Sym(act) void (*act)(); {
 | 
			
		||||
static Object Action_To_Sym(void (*act)()) {
 | 
			
		||||
    char *sym;
 | 
			
		||||
 | 
			
		||||
    if (act == Signal_Exit)
 | 
			
		||||
| 
						 | 
				
			
			@ -247,7 +247,7 @@ static Object Action_To_Sym(act) void (*act)(); {
 | 
			
		|||
    return Intern(sym);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Add_To_Mask(sig) int sig; {
 | 
			
		||||
void Add_To_Mask(int sig) {
 | 
			
		||||
#ifdef POSIX_SIGNALS
 | 
			
		||||
    sigaddset(&Sigset_Block, sig);
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -257,7 +257,7 @@ void Add_To_Mask(sig) int sig; {
 | 
			
		|||
        Force_Disable_Interrupts;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Remove_From_Mask(sig) int sig; {
 | 
			
		||||
void Remove_From_Mask(int sig) {
 | 
			
		||||
#ifdef POSIX_SIGNALS
 | 
			
		||||
    sigdelset(&Sigset_Block, sig);
 | 
			
		||||
#else
 | 
			
		||||
| 
						 | 
				
			
			@ -265,7 +265,7 @@ void Remove_From_Mask(sig) int sig; {
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Signal(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Signal(int argc, Object *argv) {
 | 
			
		||||
    int sig;
 | 
			
		||||
    Object handler, old;
 | 
			
		||||
    void (*disp)();
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +321,7 @@ static Object P_Signal(argc, argv) int argc; Object *argv; {
 | 
			
		|||
}
 | 
			
		||||
#endif /* RELIABLE_SIGNALS */
 | 
			
		||||
 | 
			
		||||
elk_init_unix_signal() {
 | 
			
		||||
void elk_init_unix_signal() {
 | 
			
		||||
    Define_Symbol(&Sym_Exit, "exit");
 | 
			
		||||
    Define_Symbol(&Sym_Default, "default");
 | 
			
		||||
    Define_Symbol(&Sym_Ignore, "ignore");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_UNAME) && !defined(HAVE_GETHOSTNAME)
 | 
			
		||||
#  include <sys/utsname.h>
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -49,7 +51,7 @@ static SYMDESCR Limit_Syms[] = {
 | 
			
		|||
    { 0, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static Object P_File_Limit(lim, f) Object lim, f; {
 | 
			
		||||
static Object P_File_Limit(Object lim, Object f) {
 | 
			
		||||
    int op, fd;
 | 
			
		||||
    long ret;
 | 
			
		||||
    char *fn = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +165,7 @@ static Object P_Job_Controlp() {
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_System_Info(ret) Object ret; {
 | 
			
		||||
static Object P_System_Info(Object ret) {
 | 
			
		||||
#ifdef HAVE_GETHOSTNAME
 | 
			
		||||
    char hostname[MAXHOSTNAMELEN];
 | 
			
		||||
    char *p = hostname;
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +200,7 @@ static Object P_System_Info(ret) Object ret; {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_system() {
 | 
			
		||||
void elk_init_unix_system() {
 | 
			
		||||
    Def_Prim(P_File_Limit,       "unix-file-limit",               2, 2, EVAL);
 | 
			
		||||
    Def_Prim(P_List_File_Limits, "unix-list-file-limits",         0, 0, EVAL);
 | 
			
		||||
    Def_Prim(P_Job_Controlp,     "unix-job-control?",             0, 0, EVAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_TEMPNAM    /* Make sure only one of these is defined (if any) */
 | 
			
		||||
#  undef HAVE_TMPNAM   /* Order of preference: tempnam, mktemp, tmpnam */
 | 
			
		||||
#  undef HAVE_MKTEMP
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +45,7 @@
 | 
			
		|||
#  undef HAVE_MKTEMP
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static Object P_Tempname(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Tempname(int argc, Object *argv) {
 | 
			
		||||
    char *name, *dir = 0, *pref = 0;
 | 
			
		||||
    Object ret;
 | 
			
		||||
#ifdef HAVE_TMPNAM
 | 
			
		||||
| 
						 | 
				
			
			@ -117,6 +119,6 @@ fail: ;
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_temp() {
 | 
			
		||||
void elk_init_unix_temp() {
 | 
			
		||||
    Def_Prim(P_Tempname,           "unix-tempname",             0, 2, VARARGS);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(HAVE_GETTIMEOFDAY) && defined(HAVE_FTIME)
 | 
			
		||||
#  include <sys/timeb.h>
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +42,7 @@
 | 
			
		|||
 | 
			
		||||
extern time_t time();
 | 
			
		||||
 | 
			
		||||
static Object P_Decode_Time(t, ret, utc) Object t, ret, utc; {
 | 
			
		||||
static Object P_Decode_Time(Object t, Object ret, Object utc) {
 | 
			
		||||
    time_t tt;
 | 
			
		||||
    struct tm *tp;
 | 
			
		||||
    Object *op;
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +64,7 @@ static Object P_Decode_Time(t, ret, utc) Object t, ret, utc; {
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Nanotime(ret) Object ret; {
 | 
			
		||||
static Object P_Nanotime(Object ret) {
 | 
			
		||||
    Object x, y;
 | 
			
		||||
#ifdef HAVE_GETTIMEOFDAY
 | 
			
		||||
    struct timeval tv;
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +116,7 @@ static Object P_Time() {
 | 
			
		|||
    return Make_Unsigned_Long((unsigned long)t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct tm *Get_Tm(v) Object v; {
 | 
			
		||||
static struct tm *Get_Tm(Object v) {
 | 
			
		||||
    static struct tm tm;
 | 
			
		||||
    int i, n;
 | 
			
		||||
    Object *op;
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +148,7 @@ static struct tm *Get_Tm(v) Object v; {
 | 
			
		|||
    return &tm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Time_To_String(t) Object t; {
 | 
			
		||||
static Object P_Time_To_String(Object t) {
 | 
			
		||||
    time_t tt;
 | 
			
		||||
    char *ret;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +167,7 @@ static Object P_Time_To_String(t) Object t; {
 | 
			
		|||
    return Make_String(ret, strlen(ret));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_time() {
 | 
			
		||||
void elk_init_unix_time() {
 | 
			
		||||
    Def_Prim(P_Time,            "unix-time",                     0, 0, EVAL);
 | 
			
		||||
    Def_Prim(P_Decode_Time,     "unix-decode-time-vector-fill!", 3, 3, EVAL);
 | 
			
		||||
    Def_Prim(P_Time_To_String,  "unix-time->string-internal",    1, 1, EVAL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
Object Integer_Pair(a, b) int a, b; {
 | 
			
		||||
Object Integer_Pair(int a, int b) {
 | 
			
		||||
    Object x, y;
 | 
			
		||||
    GC_Node2;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ Object Integer_Pair(a, b) int a, b; {
 | 
			
		|||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Object Syms_To_List(p) SYMDESCR *p; {
 | 
			
		||||
Object Syms_To_List(SYMDESCR *p) {
 | 
			
		||||
    Object ret, mode;
 | 
			
		||||
    GC_Node;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,12 +57,12 @@ Object Syms_To_List(p) SYMDESCR *p; {
 | 
			
		|||
    return P_Reverse(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Check_Result_Vector(x, len) Object x; {
 | 
			
		||||
void Check_Result_Vector(Object x, int len) {
 | 
			
		||||
    Check_Type(x, T_Vector);
 | 
			
		||||
    if (VECTOR(x)->size != len)
 | 
			
		||||
        Primitive_Error("argument vector has the wrong length");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
elk_init_unix_unix() {
 | 
			
		||||
void elk_init_unix_unix() {
 | 
			
		||||
    P_Provide(Intern("unix.so"));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,8 @@
 | 
			
		|||
 | 
			
		||||
#include "unix.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_WAITPID) || defined(HAVE_WAIT4)
 | 
			
		||||
#  define WAIT_PROCESS
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +112,7 @@ static Object General_Wait(ret, ruret, haspid, pid, options)
 | 
			
		|||
         status = "none";
 | 
			
		||||
         st = code = 0;
 | 
			
		||||
#ifdef WAIT_RUSAGE
 | 
			
		||||
         bzero((char *)&ru, sizeof(ru));
 | 
			
		||||
         memset((char *)&ru, 0, sizeof(ru));
 | 
			
		||||
#endif
 | 
			
		||||
    } else if (WIFSTOPPED(st)) {
 | 
			
		||||
        status = "stopped";  code = WSTOPSIG(st);
 | 
			
		||||
| 
						 | 
				
			
			@ -138,7 +140,7 @@ static Object General_Wait(ret, ruret, haspid, pid, options)
 | 
			
		|||
    return Void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object P_Wait(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Wait(int argc, Object *argv) {
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
 | 
			
		||||
    if (argc == 3)
 | 
			
		||||
| 
						 | 
				
			
			@ -154,13 +156,13 @@ static Object P_Wait(argc, argv) int argc; Object *argv; {
 | 
			
		|||
/* If WAIT_PROCESS is supported, then WAIT_OPTIONS is supported as well,
 | 
			
		||||
 * because both waitpid() and wait4() accept options.
 | 
			
		||||
 */
 | 
			
		||||
static Object P_Wait_Process(argc, argv) int argc; Object *argv; {
 | 
			
		||||
static Object P_Wait_Process(int argc, Object *argv) {
 | 
			
		||||
    return General_Wait(argv[0], argv[1], 1, Get_Integer(argv[2]),
 | 
			
		||||
        argc == 4 ? (int)Symbols_To_Bits(argv[3], 1, Wait_Flags) : 0);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
elk_init_unix_wait() {
 | 
			
		||||
void elk_init_unix_wait() {
 | 
			
		||||
    Def_Prim(P_Wait,         "unix-wait-vector-fill!",         2, 3, VARARGS);
 | 
			
		||||
#ifdef WAIT_PROCESS
 | 
			
		||||
    Def_Prim(P_Wait_Process, "unix-wait-process-vector-fill!", 3, 4, VARARGS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue