summaryrefslogblamecommitdiff
path: root/lang/modula-3-lib/files/patch-ab
blob: b8d0fef0dabafbb3345fb6f57326d0a3ad32b5f0 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                      

                                                                   
                                              


                                                                       
 
                                                                                
                                                                        










                         



                           










                              
                    

                    


              
                    

















                                                                    

                  
          

              
                   







                          
                    


















                                                
                   







                           
                    















                                              

                  
             

              
                   







                                         
                   







                               
                    


















                                                   
                   









                                                                      
                   







                                                
                    



















                                                       
                    



















                                                             
                    
                 

  














                                                    







                                  
                   







                                
                   

  





                                 
                    














                                            





                                      


































































                                                                          

















                                              
















                                              

                  
           

              
                    













































                                                                     
                   







                           
                     



















                                                                             
    

                                                                     





                                                        

                                                                     







































                                                            
                     























                                                             
                      
























                                                               

                  
             

              
                     







                                          
                     







                                          
                       


























                                                   
                      






                                 


                  


                                           


                 



                                                 
                     







                               
                     







                               
                     









                                     
                       

















                                                                      
                     







                            
                      


















                                                           
Fix a const-related compiler warning produced by the "execve" wrapper.
Move network related wrappers to separate files, for SOCKS support.
Fix some things so that it will compile under FreeBSD-3.0.
Add missing wrappers for various system calls.
Fix numerous argument declarations to agree with their prototypes.
Fix the wrapper for ftruncate so that it deals properly with the 64-bit
arguments.

--- m3/m3core/src/runtime/FreeBSD2/RTHeapDepC.c.orig	Sat Mar 23 14:52:21 1996
+++ m3/m3core/src/runtime/FreeBSD2/RTHeapDepC.c	Sun Mar 14 05:43:53 1999
@@ -80,7 +80,8 @@
 #include <sys/file.h>
 #include <sys/param.h>
 #if __FreeBSD__ >= 2
-# include <sys/sysctl.h>
+#include <sys/sysctl.h>
+#include <osreldate.h>
 #endif
 #include <sys/mount.h>
 #include <sys/ipc.h>
@@ -89,9 +90,21 @@
 #include <ufs/ufs/quota.h>
 #include <sys/signal.h>
 #include <sys/socket.h>
+#include <sys/stat.h>
 #include <sys/uio.h>
 #include <sys/wait.h>
 
+#if __FreeBSD__ >= 3
+#include <sys/time.h>
+#include <nfs/rpcv2.h>
+#include <nfs/nfsproto.h>
+#include <nfs/nfs.h>
+#include <ufs/ufs/ufsmount.h>
+#endif
+
+#include <string.h>
+#include <unistd.h>
+
 #ifdef   NULL
 #undef   NULL
 #endif
@@ -110,22 +123,8 @@
 /* Unless otherwise noted, all the following wrappers have the same
    structure. */
 
-int accept(s, addr, addrlen)   /* ok */
-int s;
-struct sockaddr *addr;
-int *addrlen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(addr);
-  MAKE_WRITABLE(addrlen);
-  result = syscall(SYS_accept, s, addr, addrlen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int access(path, mode)   /* ok */
-char *path;
+const char *path;
 int mode;
 { int result;
 
@@ -137,7 +136,7 @@
 }
 
 int acct(file)   /* ok */
-char *file;
+const char *file;
 { int result;
 
   ENTER_CRITICAL;
@@ -228,19 +227,6 @@
 }
 */
 
-int bind(s, name, namelen)   /* ok */
-int s;
-const struct sockaddr *name;
-int namelen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(name);
-  result = syscall(SYS_bind, s, name, namelen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 /* not implemented
 int cachectl(addr, nbytes, op)
 char *addr;
@@ -268,7 +254,7 @@
 */
 
 int chdir(path)   /* ok */
-char *path;
+const char *path;
 { int result;
 
   ENTER_CRITICAL;
@@ -278,8 +264,20 @@
   return result;
 }
 
+int chflags(path, flags)
+const char *path;
+u_long flags;
+{ int result;
+
+  ENTER_CRITICAL;
+  MAKE_READABLE(path);
+  result = syscall(SYS_chflags, path, flags);
+  EXIT_CRITICAL;
+  return result;
+}
+
 int chmod(path, mode)   /* ok */
-char *path;
+const char *path;
 mode_t mode;
 { int result;
 
@@ -291,7 +289,7 @@
 }
 
 int chown(path, owner, group)   /* ok */
-char *path;
+const char *path;
 uid_t owner;
 gid_t group;
 { int result;
@@ -304,7 +302,7 @@
 }
 
 int chroot(dirname)   /* ok */
-char *dirname;
+const char *dirname;
 { int result;
 
   ENTER_CRITICAL;
@@ -314,19 +312,6 @@
   return result;
 }
 
-int connect(s, name, namelen)   /* ok */
-int s;
-const struct sockaddr *name;
-int namelen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(name);
-  result = syscall(SYS_connect, s, name, namelen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 /* not implemented (obsolete)
 int creat(name, mode)   
 const char *name;
@@ -356,8 +341,8 @@
     result = syscall(SYS_execve, name, argv, envp);
     if (result == -1 && errno == EFAULT) {
       MAKE_READABLE(name);
-      { char **a; for (a = argv; *a; a++) MAKE_READABLE(*a); }
-      { char **e; for (e = envp; *e; e++) MAKE_READABLE(*e); }
+      { char * const *a; for (a = argv; *a; a++) MAKE_READABLE(*a); }
+      { char * const *e; for (e = envp; *e; e++) MAKE_READABLE(*e); }
     } else {
       return result;
     }
@@ -473,7 +458,7 @@
 
 int getgroups(gidsetsize, grouplist)   /* ok */
 int gidsetsize;
-int grouplist[];
+gid_t grouplist[];
 { int result;
 
   ENTER_CRITICAL;
@@ -513,20 +498,6 @@
 }
 */
 
-int getpeername(s, name, namelen)   /* ok */
-int s;
-struct sockaddr *name;
-int *namelen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(name);
-  MAKE_WRITABLE(namelen);
-  result = syscall(SYS_getpeername, s, name, namelen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int getrlimit(resource, rlp)   /* ok */
 int resource;
 struct rlimit *rlp;
@@ -551,20 +522,6 @@
   return result;
 }
 
-int getsockname(s, name, namelen)   /* ok */
-int s;
-struct sockaddr *name;
-int *namelen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(name);
-  MAKE_WRITABLE(namelen);
-  result = syscall(SYS_getsockname, s, name, namelen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int getsockopt(s, level, optname, optval, optlen)   /* ok */
 int s, level, optname;
 void *optval;
@@ -629,9 +586,24 @@
   return result;
 }
 
+#ifdef SYS_lchown
+int lchown(path, owner, group)   /* ok */
+const char *path;
+uid_t owner;
+gid_t group;
+{ int result;
+
+  ENTER_CRITICAL;
+  MAKE_READABLE(path);
+  result = syscall(SYS_lchown, path, owner, group);
+  EXIT_CRITICAL;
+  return result;
+}
+#endif /* SYS_lchown */
+
 int link(name1, name2)   /* ok */
-char *name1;
-char *name2;
+const char *name1;
+const char *name2;
 { int result;
 
   ENTER_CRITICAL;
@@ -643,7 +615,7 @@
 }
 
 int lstat(path, buf)   /* ok */
-char *path;
+const char *path;
 struct stat *buf;
 { int result;
 
@@ -656,7 +628,7 @@
 }
 
 int mkdir(path, mode)   /* ok */
-char *path;
+const char *path;
 mode_t mode;
 { int result;
 
@@ -667,8 +639,20 @@
   return result;
 }
 
+int mkfifo(path, mode)   /* ok */
+const char *path;
+mode_t mode;
+{ int result;
+
+  ENTER_CRITICAL;
+  MAKE_READABLE(path);
+  result = syscall(SYS_mkfifo, path, mode);
+  EXIT_CRITICAL;
+  return result;
+}
+
 int mknod(path, mode, dev)   /* ok */
-char *path;
+const char *path;
 mode_t mode;
 dev_t dev;
 { int result;
@@ -680,13 +664,51 @@
   return result;
 }
 
-/* quite different ...
-int mount(special, name, rwflag, type, options)
-char *special;
-char *name;
-int rwflag, type;
-char *options;
-*/
+#if __FreeBSD_version >= 300001		/* New form of mount(2) */
+int
+mount(type, dir, flags, data)
+  const char *type;
+  const char *dir;
+  int flags;
+  void *data;
+{ int result;
+  struct ufs_args *u_data;
+  struct mfs_args *m_data;
+  struct nfs_args *n_data;
+
+  ENTER_CRITICAL;
+  MAKE_READABLE(type);
+  MAKE_READABLE(dir);
+  if (strcmp(type, "ufs") == 0) {
+    u_data = (struct ufs_args*) data;
+    MAKE_READABLE(u_data);
+    MAKE_READABLE(u_data->fspec);
+    result = syscall(SYS_mount, type, dir, flags, data);
+  } else if (strcmp(type, "mfs") == 0) {
+    m_data = (struct mfs_args*) data;
+    MAKE_READABLE(m_data);
+    MAKE_READABLE(m_data->fspec);
+    result = syscall(SYS_mount, type, dir, flags, data);
+  } else if (strcmp(type, "nfs") == 0) {
+    n_data = (struct nfs_args*) data;
+    MAKE_READABLE(n_data);
+    MAKE_READABLE(n_data->addr); 
+    MAKE_READABLE(n_data->fh);
+    MAKE_READABLE(n_data->hostname);
+    result = syscall(SYS_mount, type, dir, flags, data);
+  } else {	/* Not anything we recognize. */
+    MAKE_READABLE(data);
+    result = syscall(SYS_mount, type, dir, flags, data);
+  }
+  EXIT_CRITICAL;
+  if (result != -1) {
+    result = 0;
+  }
+  return result;
+}
+
+#else /* __FreeBSD_version >= 300001 */
+
 int mount(type, dir, flags, data)
 int type;
 const char *dir;
@@ -723,6 +745,7 @@
   }
   return result;
 }
+#endif /* __FreeBSD_version >= 300001 */
 
 int msgctl(msqid, cmd, buf)   /* ok */
 int msqid, cmd;
@@ -793,9 +816,13 @@
 }
 
 int quotactl(path, cmd, uid, addr)   /* ok */
-const char *path;
-int cmd, uid;
-char *addr;
+  const char *path;
+  int cmd, uid;
+#if __FreeBSD_version >= 400002
+  void *addr;
+#else
+  char *addr;
+#endif
 { int result;
 
   ENTER_CRITICAL;
@@ -821,21 +848,8 @@
   return result;
 }
 
-int read(d, buf, nbytes)   /* ok */
-int d;
-char *buf;
-size_t nbytes;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(buf);
-  result = syscall(SYS_read, d, buf, nbytes);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int readlink(path, buf, bufsiz)   /* ok */
-char *path;
+const char *path;
 char *buf;
 int bufsiz;
 { int result;
@@ -865,46 +879,6 @@
   return result;
 }
 
-int recv(s, buf, len, flags)   /* ok */
-int s;
-void *buf;
-#if __FreeBSD__ >=2
-size_t len;
-#else
-int len;
-#endif
-int flags;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(buf);
-  result = syscall(SYS_recvfrom, s, buf, len, flags, NULL, 0);
-  EXIT_CRITICAL;
-  return result;
-}
-
-int recvfrom(s, buf, len, flags, from, fromlen)   /* ok */
-int s;
-void *buf;
-#if __FreeBSD__ >=2
-size_t len;
-#else
-int len;
-#endif
-int flags;
-struct sockaddr *from;
-int *fromlen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(buf);
-  MAKE_WRITABLE(from);
-  MAKE_WRITABLE(fromlen);
-  result = syscall(SYS_recvfrom, s, buf, len, flags, from, fromlen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int recvmsg(s, msg, flags)   /* ok */
 int s;
 struct msghdr msg[];
@@ -940,7 +914,7 @@
 }
 
 int rmdir(path)   /* ok */
-char *path;
+const char *path;
 { int result;
 
   ENTER_CRITICAL;
@@ -950,44 +924,42 @@
   return result;
 }
 
-int select(nfds, readfds, writefds, exceptfds, timeout)   /* ok */
-int nfds;
-fd_set *readfds;
-fd_set *writefds;
-fd_set *exceptfds;
-struct timeval *timeout;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_WRITABLE(readfds);
-  MAKE_WRITABLE(writefds);
-  MAKE_WRITABLE(exceptfds);
-  MAKE_READABLE(timeout);
-  result = syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout);
-  EXIT_CRITICAL;
-  return result;
-}
+int
+#if (227002 <= __FreeBSD_version && __FreeBSD_version < 300000) || \
+  __FreeBSD_version >= 300002
+semctl(int semid, int semnum, int cmd, ...)
+#else
+semctl(int semid, int semnum, int cmd, union semun arg)
+#endif
+{
+  int result;
+#if (227002 <= __FreeBSD_version && __FreeBSD_version < 300000) || \
+  __FreeBSD_version >= 300002
+  union semun arg;
+  va_list ap;
 
-int semctl(semid, semnum, cmd, arg)   /* ok ? */
-int semid, cmd;
-int semnum;
-union semun arg;
-{ int result;
+  va_start(ap, cmd);
+  arg = va_arg(ap, union semun);
+  va_end(ap);
+#endif
 
   ENTER_CRITICAL;
   switch (cmd) {
-  case GETNCNT:
-  case GETPID:
-  case GETVAL:
-  case GETALL:
-  case GETZCNT:
+
+  case IPC_SET:
     MAKE_READABLE(arg.buf);
     break;
+
   case SETALL:
-  case SETVAL:
+    MAKE_READABLE(arg.array);
+    break;
+
+  case IPC_STAT:
     MAKE_WRITABLE(arg.buf);
     break;
-  default:
+
+  case GETALL:
+    MAKE_WRITABLE(arg.array);
     break;
   }
   result = syscall(SYS_semsys, 0, semid, semnum, cmd, arg);
@@ -1012,24 +984,6 @@
   return result;
 }
 
-int send(s, msg, len, flags)   /* ok */
-int s;
-const void *msg;
-#if __FreeBSD__ >=2
-size_t len;
-#else
-int len;
-#endif
-int flags;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(msg);
-  result = syscall(SYS_sendto, s, msg, len, flags, NULL, 0);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int sendmsg(s, msg, flags)   /* ok */
 int s;
 const struct msghdr msg[];
@@ -1051,29 +1005,8 @@
   return result;
 }
 
-int sendto(s, msg, len, flags, to, tolen)   /* ok */
-int s;
-const void *msg;
-#if __FreeBSD__ >=2
-size_t len;
-#else
-int len;
-#endif
-int flags;
-const struct sockaddr *to;
-int tolen;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(msg);
-  MAKE_READABLE(to);
-  result = syscall(SYS_sendto, s, msg, len, flags, to, tolen);
-  EXIT_CRITICAL;
-  return result;
-}
-
 int setdomainname(name, namelen)   /* ok */
-char *name;
+const char *name;
 int namelen;
 { int result;
 
@@ -1086,7 +1019,7 @@
 
 int setgroups(ngroups, gidset)   /* ok */
 int ngroups;
-int *gidset;
+const gid_t *gidset;
 { int result;
 
   ENTER_CRITICAL;
@@ -1097,7 +1030,7 @@
 }
 
 int sethostname(name, namelen)   /* ok */
-char *name;
+const char *name;
 int namelen;
 { int result;
 #if __FreeBSD__ >= 2
@@ -1213,20 +1146,20 @@
   return result;
 }
 
-/* not implemented
-int sigpending(set)
-sigset_t *set;
+int sigaction(sig, act, oact)
+int sig;
+const struct sigaction *act;
+struct sigaction *oact;
 { int result;
 
   ENTER_CRITICAL;
-  MAKE_WRITABLE(set);
-  result = syscall(SYS_sigpending, set);
+  MAKE_READABLE(act);
+  MAKE_WRITABLE(oact);
+  result = syscall(SYS_sigaction, sig, act, oact);
   EXIT_CRITICAL;
   return result;
 }
-*/
 
-#if __FreeBSD__ >= 2
 int sigaltstack(ss, oss)   /* ok */
 const struct sigaltstack *ss;
 struct sigaltstack *oss;
@@ -1239,20 +1172,6 @@
   EXIT_CRITICAL;
   return result;
 }
-#else
-int sigstack(ss, oss)   /* ok */
-const struct sigstack *ss;
-struct sigstack *oss;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(ss);
-  MAKE_WRITABLE(oss);
-  result = syscall(SYS_sigstack, ss, oss);
-  EXIT_CRITICAL;
-  return result;
-}
-#endif
 
 int socketpair(d, type, protocol, sv)   /* ok */
 int d, type, protocol;
@@ -1267,7 +1186,7 @@
 }
 
 int stat(path, buf)   /* ok */
-char *path;
+const char *path;
 struct stat *buf;
 { int result;
 
@@ -1280,7 +1199,7 @@
 }
 
 int swapon(special)   /* ok */
-char *special;
+const char *special;
 { int result;
 
   ENTER_CRITICAL;
@@ -1291,8 +1210,8 @@
 }
 
 int symlink(name1, name2)   /* ok */
-char *name1;
-char *name2;
+const char *name1;
+const char *name2;
 { int result;
 
   ENTER_CRITICAL;
@@ -1304,14 +1223,14 @@
 }
 
 int truncate(path, length)   /* ok */
-char *path;
-long length;
+const char *path;
+off_t length;
 { int result;
-  off_t len = (off_t)length;
 
   ENTER_CRITICAL;
   MAKE_READABLE(path);
-  result = syscall(SYS_truncate, path, len);
+  /* The casts below pad "path" out to a 64-bit value as required. */
+  result = __syscall(SYS_truncate, (u_quad_t) (u_int) path, length);
   EXIT_CRITICAL;
   return result;
 }
@@ -1328,7 +1247,7 @@
 }
 
 int unlink(path)   /* ok */
-char *path;
+const char *path;
 { int result;
 
   ENTER_CRITICAL;
@@ -1414,19 +1333,6 @@
   ENTER_CRITICAL;
   MAKE_WRITABLE(status);
   result = syscall(SYS_wait4, pid, status, options, NULL);
-  EXIT_CRITICAL;
-  return result;
-}
-
-int write(fd, buf, nbytes)   /* ok */
-int fd;
-char *buf;
-int nbytes;
-{ int result;
-
-  ENTER_CRITICAL;
-  MAKE_READABLE(buf);
-  result = syscall(SYS_write, fd, buf, nbytes);
   EXIT_CRITICAL;
   return result;
 }