darwin-updates-20020821
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Wed, 21 Aug 2002 23:07:52 +0000 (23:07 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 21 Aug 2002 23:07:52 +0000 (23:07 +0000)
should be correct support for 10.2. also updates for 10.1

33 files changed:
acinclude.m4
src/afs/DARWIN/osi_machdep.h
src/afs/DARWIN/osi_module.c
src/afs/DARWIN/osi_prototypes.h
src/afs/DARWIN/osi_vm.c
src/afs/DARWIN/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_attrs.c
src/afs/afs.h
src/afs/afs_analyze.c
src/afs/afs_call.c
src/afs/afs_cell.c
src/afs/afs_conn.c
src/afs/afs_server.c
src/afs/afs_user.c
src/afs/afs_util.c
src/afs/afs_vcache.c
src/afs/afs_volume.c
src/afsd/afs.rc.darwin
src/butc/dump.c
src/config/Makefile.ppc_darwin_60.in [new file with mode: 0644]
src/config/afs_sysnames.h
src/config/param.ppc_darwin_60.h [new file with mode: 0644]
src/config/param.ppc_darwin_60_usr.h [new file with mode: 0644]
src/dir/dir.c
src/gtx/curseswindows.c
src/libafs/MakefileProto.DARWIN.in
src/libafs/afs.ppc_darwin_60.plist.in [new file with mode: 0644]
src/pinstall/install.c
src/rx/DARWIN/rx_kmutex.h
src/rx/rx_kcommon.c
src/rx/rx_kcommon.h
src/rxgen/rpc_main.c
src/rxkad/rxkad_common.c

index c360b49..a5f7798 100644 (file)
@@ -292,6 +292,9 @@ else
                powerpc-apple-darwin5.5*)
                        AFS_SYSNAME="ppc_darwin_14"
                        ;;
+               powerpc-apple-darwin6.0*)
+                       AFS_SYSNAME="ppc_darwin_60"
+                       ;;
                sparc-sun-solaris2.5*)
                        AFS_SYSNAME="sun4x_55"
                        ;;
index 0aa14a7..9feda03 100644 (file)
@@ -42,7 +42,9 @@ enum vcexcl { EXCL, NONEXCL } ;
 /* 
  * Time related macros
  */
+#ifndef AFS_DARWIN60_ENV
 extern struct timeval time;
+#endif
 #define osi_Time() (time.tv_sec)
 #define afs_hz      hz
 
index 1959dea..823dd1a 100644 (file)
@@ -5,7 +5,11 @@ RCSID("$Header$");
 
 #include "../afs/sysincludes.h"
 #include "../afs/afsincludes.h"
+#ifdef AFS_DARWIN60_ENV /* not in Kernel.framework anymore !?! */
+#include <sys/syscall.h>
+#else
 #include "../sys/syscall.h"
+#endif
 #include <mach/kmod.h>
 
 struct vfsconf afs_vfsconf;
index 852e1c3..ed68243 100644 (file)
@@ -19,5 +19,5 @@ extern int osi_lookupname(char *aname, enum uio_seg seg, int followlink,
                          struct vnode **dirvpp, struct vnode **vpp);
 /* osi_vm.c */
 extern void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size);
-extern int osi_VM_Setup(struct vcache *avc);
+extern int osi_VM_Setup(struct vcache *avc, int force);
 #endif /* _OSI_PROTO_H_ */
index b419ccc..f5a6086 100644 (file)
@@ -301,36 +301,38 @@ void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size)
 #endif
 }
 
-int osi_VM_Setup(struct vcache *avc)
-{
-   int error;
-   struct vnode *vp=AFSTOV(avc);
-
-   if (UBCISVALID(vp) && (avc->states & CStatd)) {
-      if (!UBCINFOEXISTS(vp) && !ISSET(vp->v_flag, VTERMINATE)) {
-         osi_vnhold(avc,0);  
-         AFS_GUNLOCK();
-         if ((error=ubc_info_init(&avc->v)))  {
-             AFS_GLOCK();
-             AFS_RELE(avc);
-             return error;
-         }
+int osi_VM_Setup(struct vcache *avc, int force) {
+    int error;
+    struct vnode *vp=AFSTOV(avc);
+  
+    if (UBCISVALID(vp) && ((avc->states & CStatd) || force)) {
+        if (!UBCINFOEXISTS(vp) && !ISSET(vp->v_flag, VTERMINATE)) {
+           osi_vnhold(avc,0);  
+           avc->states  |= CUBCinit;
+           AFS_GUNLOCK();
+           if ((error=ubc_info_init(&avc->v)))  {
+               AFS_GLOCK();
+               avc->states  &= ~CUBCinit;
+               AFS_RELE(avc);
+               return error;
+           }
 #ifndef AFS_DARWIN14_ENV
-         simple_lock(&avc->v.v_interlock);
-         if (!ubc_issetflags(&avc->v, UI_HASOBJREF))
+           simple_lock(&avc->v.v_interlock);
+           if (!ubc_issetflags(&avc->v, UI_HASOBJREF))
 #ifdef AFS_DARWIN13_ENV
-            if (ubc_getobject(&avc->v, (UBC_NOREACTIVATE|UBC_HOLDOBJECT)))
-                   panic("VM_Setup: null object");
+               if (ubc_getobject(&avc->v, (UBC_NOREACTIVATE|UBC_HOLDOBJECT)))
+                   panic("VM_Setup: null object");
 #else
             (void)_ubc_getobject(&avc->v, 1); /* return value not used */
 #endif
-         simple_unlock(&avc->v.v_interlock);
+           simple_unlock(&avc->v.v_interlock);
 #endif
-         AFS_GLOCK();
-         AFS_RELE(avc);
-      }
-      if (UBCINFOEXISTS(&avc->v))
-          ubc_setsize(&avc->v, avc->m.Length);
-   }
-   return 0;
+           AFS_GLOCK();
+           avc->states  &= ~CUBCinit;
+           AFS_RELE(avc);
+       }
+       if (UBCINFOEXISTS(&avc->v))
+           ubc_setsize(&avc->v, avc->m.Length);
+    }
+    return 0;
 }
index 769b290..c44ddb9 100644 (file)
@@ -309,6 +309,17 @@ afs_vop_close(ap)
     osi_FlushPages(avc);        /* hold bozon lock, but not basic vnode lock */
     afs_BozonUnlock(&avc->pvnLock, avc);
     AFS_GUNLOCK();
+#ifdef AFS_DARWIN14_ENV
+    if (UBCINFOEXISTS(ap->a_vp) && ap->a_vp->v_ubcinfo->ui_refcount < 2) {
+      ubc_hold(ap->a_vp);
+      if (ap->a_vp->v_ubcinfo->ui_refcount < 2) {
+         printf("afs: Imminent ui_refcount panic\n");
+       } else {
+         printf("afs: WARNING: ui_refcount panic averted\n");
+       }
+    }
+#endif
+
     return code;
 }
 
@@ -1214,21 +1225,23 @@ afs_vop_print(ap)
     register struct vnode *vp = ap->a_vp;
     register struct vcache *vc = VTOAFS(ap->a_vp);
     int s = vc->states;
-    char buf[20];
     printf("tag %d, fid: %ld.%x.%x.%x, opens %d, writers %d", vp->v_tag, vc->fid.Cell,
           vc->fid.Fid.Volume, vc->fid.Fid.Vnode, vc->fid.Fid.Unique, vc->opens,
           vc->execsOrWriters);
     printf("\n  states%s%s%s%s%s", (s&CStatd) ? " statd" : "", (s&CRO) ? " readonly" : "",(s&CDirty) ? " dirty" : "",(s&CMAPPED) ? " mapped" : "", (s&CVFlushed) ? " flush in progress" : "");
-    if (UBCISVALID(vp))
-        printf("\n  UBC: %s%s",
-               UBCINFOEXISTS(vp) ? "exists, " : "does not exist",
+    if (UBCISVALID(vp)) {
+        printf("\n  UBC: ");
+        if (UBCINFOEXISTS(vp)) {
+               printf("exists, ") ;
 #ifdef AFS_DARWIN14_ENV
-               UBCINFOEXISTS(vp) ?
-                 sprintf(buf, "refs %d", vp->v_ubcinfo->ui_refcount),buf : "");
+                 printf("refs %d%s%s", vp->v_ubcinfo->ui_refcount,
+                         ubc_issetflags(vp, UI_HASOBJREF) ? " HASOBJREF" : "",
+                         ubc_issetflags(vp, UI_WASMAPPED) ? " WASMAPPED" : "");
 #else
-               UBCINFOEXISTS(vp) ?
-                 sprintf(buf, "holdcnt %d", vp->v_ubcinfo->ui_holdcnt),buf : "");
+                 printf("holdcnt %d", vp->v_ubcinfo->ui_holdcnt);
 #endif
+        } else printf("does not exist");
+    }
     printf("\n");
     return 0;
 }
index 953fb6e..6d903aa 100644 (file)
@@ -224,6 +224,12 @@ int afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred)
        return code;
     }
 #endif
+#if defined(AFS_DARWIN_ENV)
+    if (avc->states & CUBCinit) {
+       code = afs_CopyOutAttrs(avc, attrs);
+       return code;
+    }
+#endif
 
 #if defined(AFS_SUN_ENV) || defined(AFS_ALPHA_ENV) || defined(AFS_SUN5_ENV)
     afs_BozonLock(&avc->pvnLock, avc);
index fe939fe..5fc2e73 100644 (file)
@@ -513,8 +513,12 @@ struct SimpleLocks {
 #ifdef AFS_OSF_ENV
 #define CWired         0x00000800      /* OSF hack only */
 #else
+#ifdef AFS_DARWIN_ENV
+#define CUBCinit        0x00000800
+#else
 #define CWRITE_IGN     0x00000800      /* Next OS hack only */
 #endif
+#endif
 #define CUnique                0x00001000      /* vc's uniquifier - latest unifiquier for fid */
 #define CForeign       0x00002000      /* this is a non-afs vcache */
 #define CUnlinked      0x00010000
@@ -1036,7 +1040,7 @@ extern struct brequest afs_brs[NBRS];             /* request structures */
 #else
 #ifdef AFS_DARWIN_ENV
 #define afs_VerifyVCache(avc, areq)  \
-  (((avc)->states & CStatd) ? (osi_VM_Setup(avc), 0) : \
+  (((avc)->states & CStatd) ? (osi_VM_Setup(avc, 0), 0) : \
    afs_VerifyVCache2((avc),areq))
 #else
 #define afs_VerifyVCache(avc, areq)  \
index e51edc0..ac5fa41 100644 (file)
@@ -27,7 +27,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif
 #endif /* !UKERNEL */
index 15b1b7c..e9e804d 100644 (file)
@@ -21,7 +21,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN60_ENV)
 #include "netinet/in_var.h"
 #endif
 #endif /* !defined(UKERNEL) */
@@ -622,11 +622,19 @@ long parm, parm2, parm3, parm4, parm5, parm6;
       }
 #else /* AFS_USERSPACE_IP_ADDR */
       struct ifnet *tifnp;
+#ifdef AFS_DARWIN60_ENV
+      struct ifaddr *tifadp = (struct ifaddr *) 0;
+#else
       struct in_ifaddr *tifadp = (struct in_ifaddr *) 0;
+#endif
       extern struct ifnet *rxi_FindIfnet();
       tifnp = rxi_FindIfnet(parm2, &tifadp);  /* make iterative */
       if (tifnp && tifadp) {
+#ifdef AFS_DARWIN60_ENV
+        mask = ((struct sockaddr_in *)tifadp->ifa_netmask)->sin_addr.s_addr;
+#else
         mask = tifadp->ia_subnetmask;
+#endif
       } else {
         code = -1;
       }
index 07aee48..ba13ea9 100644 (file)
@@ -25,7 +25,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* ! ASF_HPUX110_ENV */
 #endif /* !defined(UKERNEL) */
index ee351bf..f476246 100644 (file)
@@ -25,7 +25,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* ! AFS_HPUX110_ENV */
 #endif /* !defined(UKERNEL) */
index 0723773..fc83995 100644 (file)
@@ -44,9 +44,12 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* AFS_HPUX110_ENV */
+#ifdef AFS_DARWIN60_ENV
+#include <net/if_var.h>
+#endif
 #endif /* !defined(UKERNEL) */
 
 #include "../afs/afsincludes.h"        /* Afs-based standard headers */
@@ -1016,7 +1019,7 @@ int afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr, afs_uint32 subnetma
    }
 }
 #else /* AFS_USERSPACE_IP_ADDR */
-#if (! defined(AFS_SUN5_ENV)) && defined(USEIFADDR)
+#if (! defined(AFS_SUN5_ENV)) && !defined(AFS_DARWIN60_ENV) && defined(USEIFADDR)
 void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *ifa)
 {
     struct sockaddr_in *sin;
@@ -1052,6 +1055,65 @@ void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *ifa)
 #endif /* IFF_POINTTOPOINT */
 }
 #endif /*(!defined(AFS_SUN5_ENV)) && defined(USEIFADDR)*/
+#if defined(AFS_DARWIN60_ENV) && defined(USEIFADDR)
+#ifndef afs_min
+#define afs_min(A,B) ((A)<(B)) ? (A) : (B)
+#endif
+void
+afsi_SetServerIPRank(sa, ifa)
+    struct srvAddr *sa;
+    struct ifaddr *ifa;
+{
+    struct sockaddr_in *sin;
+    int t;
+    
+   afs_uint32 subnetmask, myAddr, myNet, myDstaddr, mySubnet, netMask;
+   afs_uint32 serverAddr ; 
+
+   if (ifa->ifa_addr->sa_family != AF_INET)
+      return;
+   sin=(struct sockaddr_in *)ifa->ifa_addr;
+   myAddr = ntohl(sin->sin_addr.s_addr);   /* one of my IP addr in host order */
+   serverAddr = ntohl(sa->sa_ip); /* server's IP addr in host order */
+   sin=(struct sockaddr_in *)ifa->ifa_netmask;
+   subnetmask = ntohl(sin->sin_addr.s_addr);/* subnet mask in host order */
+   sin=(struct sockaddr_in *)ifa->ifa_dstaddr;
+   if (sin)
+      myDstaddr=sin->sin_addr.s_addr;
+
+   if      ( IN_CLASSA(myAddr) ) netMask = IN_CLASSA_NET;
+   else if ( IN_CLASSB(myAddr) ) netMask = IN_CLASSB_NET;
+   else if ( IN_CLASSC(myAddr) ) netMask = IN_CLASSC_NET;
+   else                          netMask = 0;
+
+   myNet    =  myAddr & netMask;
+   mySubnet =  myAddr & subnetmask;
+
+   if ( (serverAddr & netMask ) == myNet ) {
+      if ( (serverAddr & subnetmask ) == mySubnet) {
+        if ( serverAddr == myAddr ) {    /* same machine */
+          sa->sa_iprank = afs_min(sa->sa_iprank, TOPR);
+        } else {                           /* same subnet */
+           sa->sa_iprank = afs_min(sa->sa_iprank, HI + ifa->ifa_metric);
+        }
+      } else {                               /* same net */
+        sa->sa_iprank = afs_min(sa->sa_iprank, MED + ifa->ifa_metric);
+      }
+   }
+#ifdef  IFF_POINTTOPOINT
+    /* check for case #4 -- point-to-point link */
+    if ((ifa->ia_ifp->if_flags & IFF_POINTOPOINT) &&
+       (myDstaddr == serverAddr))) {
+       if (ifa->ia_ifp->if_metric >= (MAXDEFRANK - MED)/PPWEIGHT) 
+           t = MAXDEFRANK;
+       else 
+           t = MED + (PPWEIGHT << ifa->->ifa_metric);
+       if (sa->sa_iprank > t)
+           sa->sa_iprank = t;
+    }
+#endif /* IFF_POINTTOPOINT */
+}
+#endif /*(!defined(AFS_SUN5_ENV)) && defined(USEIFADDR)*/
 #endif /* else AFS_USERSPACE_IP_ADDR */
 
 #ifdef AFS_SGI62_ENV
@@ -1206,6 +1268,16 @@ static int afs_SetServerPrefs(struct srvAddr *sa)
 #ifdef AFS_SGI62_ENV
     (void) hash_enum(&hashinfo_inaddr, afsi_enum_set_rank, HTF_INET, NULL,
                     (caddr_t)sa, NULL);
+#elif defined(AFS_DARWIN60_ENV)
+    {
+        struct ifnet *ifn;
+        struct ifaddr *ifa;
+        TAILQ_FOREACH(ifn , &ifnet, if_link) {
+            TAILQ_FOREACH(ifa , &ifn->if_addrhead, ifa_link) {
+                afsi_SetServerIPRank(sa, ifa);
+            }
+        }
+    }
 #elif defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
     {
         struct in_ifaddr *ifa;
index 228c8b7..2a2d31c 100644 (file)
@@ -25,7 +25,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* ! AFS_HPUX110_ENV */
 #endif /* !defined(UKERNEL) */
index 0215c85..3c2a6d7 100644 (file)
@@ -27,7 +27,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* ! AFS_HPUX110_ENV */
 #endif /* !defined(UKERNEL) */
index 4594339..54a8c11 100644 (file)
@@ -1559,6 +1559,9 @@ void afs_ProcessFS(register struct vcache *avc, register struct AFSFetchStatus *
 #ifdef AFS_LINUX22_ENV
     vcache2inode(avc);    /* Set the inode attr cache */
 #endif
+#ifdef AFS_DARWIN_ENV
+   osi_VM_Setup(avc,1);
+#endif
 
 } /*afs_ProcessFS*/
 
@@ -1689,7 +1692,7 @@ loop:
 #endif
        ReleaseWriteLock(&tvc->lock);
 #ifdef AFS_DARWIN_ENV
-        osi_VM_Setup(tvc);
+        osi_VM_Setup(tvc,0);
 #endif
        return tvc;
     }
@@ -1754,9 +1757,6 @@ loop:
     }
 
     ReleaseWriteLock(&tvc->lock);
-#ifdef AFS_DARWIN_ENV
-    osi_VM_Setup(avc);
-#endif
     return tvc;
 
 } /*afs_GetVCache*/
@@ -1917,9 +1917,6 @@ struct vcache *afs_LookupVCache(struct VenusFid *afid, struct vrequest *areq,
     afs_ProcessFS(tvc, &OutStatus, areq);
 
     ReleaseWriteLock(&tvc->lock);
-#ifdef AFS_DARWIN_ENV
-    osi_VM_Setup(tvc);
-#endif
     return tvc;
 
 }
@@ -2474,7 +2471,7 @@ struct vcache *afs_FindVCache(struct VenusFid *afid, afs_int32 *retry, afs_int32
 #endif
 #ifdef AFS_DARWIN_ENV
     if (tvc)
-        osi_VM_Setup(tvc);
+        osi_VM_Setup(tvc, 0);
 #endif
     return tvc;
 } /*afs_FindVCache*/
index 2a76bb2..4a2062e 100644 (file)
@@ -30,7 +30,7 @@ RCSID("$Header$");
 #ifdef AFS_SGI62_ENV
 #include "../h/hashing.h"
 #endif
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
 #include <netinet/in_var.h>
 #endif /* ! AFS_HPUX110_ENV */
 #endif /* !defined(UKERNEL) */
index ed05090..a8240b3 100644 (file)
@@ -30,12 +30,20 @@ SMALL="-stat 300 -dcache 100 -daemons 2 -volumes 50"
 if [ -f $AFSDOPT ]; then
     OPTIONS=`cat $AFSDOPT`
 else
-    OPTIONS=$MEDIUM
+    OPTIONS="$MEDIUM -fakestat"
+fi
+
+if [ -x /usr/sbin/kmodstat ]; then
+   KMODSTAT=/usr/sbin/kmodstat
+else
+  if [ -x /usr/sbin/kextstat ]; then
+     KMODSTAT=/usr/sbin/kextstat
+fi
 fi
 
 # Need the commands ps, awk, kill, sleep
 PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin
-if kmodstat | grep -q openafs ; then
+if $KMODSTAT | grep -q openafs ; then
 :
 else
 if [ -d $VICEETC/afs.kext ]; then
@@ -46,7 +54,7 @@ else
        exit 1
 fi
 fi
-if kmodstat | grep -q openafs ; then
+if $KMODSTAT | grep -q openafs ; then
 :
 else
        echo "AFS kernel extensions failed to initialize. Skipping AFS startup."
index 063807f..a05320d 100644 (file)
@@ -101,10 +101,8 @@ afs_int32 tapeblocks;      /* Number of 16K tape datablocks in buffer (!CONF_XBS
    else \
      sprintf(dumpname, "%s (DumpId %u)", name, dbDumpId);
 
-#if defined(AFS_NT40_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_SUN4_ENV)
-localtime_r(t, tm)
-   time_t *t;
-   struct tm *tm;
+#if defined(AFS_NT40_ENV) || (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV)) || defined(AFS_SUN4_ENV)
+int localtime_r(time_t *t, struct tm *tm)
 {
    memcpy(tm, localtime(t), sizeof(struct tm));
 }
@@ -148,11 +146,8 @@ afs_int32 tc_KEndMargin;
 char  *bufferBlock;
 
 /* compute the absolute expiration date */
-afs_int32
-calcExpirationDate(expType, expDate, createTime)
-     afs_int32 expType;
-     afs_int32 expDate;
-     afs_int32 createTime;
+afs_int32 calcExpirationDate(afs_int32 expType, afs_int32 expDate, 
+                            afs_int32 createTime)
 {
     struct ktime_date kd;
     afs_int32  Add_RelDate_to_Time();
@@ -180,8 +175,7 @@ calcExpirationDate(expType, expDate, createTime)
 afs_int32                 curr_bserver = 0;
 struct rx_connection  *curr_fromconn = (struct rx_connection *)0;
 
-struct rx_connection *Bind(server)
-  afs_int32 server;
+struct rx_connection *Bind(afs_int32 server)
 {
   if (curr_fromconn) {
       if (curr_bserver == server)                             /* Keep connection if have it */
@@ -211,9 +205,7 @@ struct rx_connection *Bind(server)
 #define BIGCHUNK 102400
 
 afs_int32
-dumpVolume(curDump, dparamsPtr)
-    struct tc_dumpDesc *curDump;
-    struct dumpRock *dparamsPtr;
+dumpVolume(struct tc_dumpDesc *curDump, struct dumpRock *dparamsPtr)
 {
     struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr;
     struct dumpNode      *nodePtr     = dparamsPtr->node;
@@ -502,9 +494,7 @@ abort_exit:
 }
 
 afs_int32
-xbsaDumpVolume(curDump, dparamsPtr)
-    struct tc_dumpDesc *curDump;
-    struct dumpRock *dparamsPtr;
+xbsaDumpVolume(struct tc_dumpDesc *curDump, struct dumpRock *dparamsPtr)
 {
 #ifdef xbsa
     struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr;
@@ -801,10 +791,7 @@ abort_exit:
  *             be done for user aborts?
  */
 
-afs_int32
-dumpPass(dparamsPtr, passNumber)
-    struct dumpRock *dparamsPtr;
-    int passNumber;
+afs_int32 dumpPass(struct dumpRock *dparamsPtr, int passNumber)
 {
     struct dumpNode      *nodePtr     = dparamsPtr->node;
     struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr;
@@ -1090,8 +1077,7 @@ error_exit:
     return(code);
 }
 
-Dumper(nodePtr)
-    struct dumpNode *nodePtr;
+int Dumper(struct dumpNode *nodePtr)
 {
     struct dumpRock      dparams;
     struct butm_tapeInfo tapeInfo;
@@ -1354,11 +1340,7 @@ Dumper(nodePtr)
  *     character typed by user, one of r, o or a
  */
 
-char
-retryPrompt(volumeName, volumeId, taskId)
-     char *volumeName;
-     afs_int32 volumeId;
-     afs_uint32 taskId;
+char retryPrompt(char *volumeName, afs_int32 volumeId, afs_uint32 taskId)
 {
     afs_int32 start;
     char ch;
@@ -1416,8 +1398,7 @@ again:
 }
 
 /* For testing: it prints the tape label */
-printTapeLabel(tl)
-   struct butm_tapeLabel *tl;
+int printTapeLabel(struct butm_tapeLabel *tl)
 {
    printf("Tape Label\n");
    printf("   structVersion  = %d\n", tl->structVersion);
@@ -1437,8 +1418,7 @@ printTapeLabel(tl)
  *      Create a tape structure to be satisfy the backup database
  *      even though we don't really use a tape with XBSA.
  */
-getXBSATape(dparamsPtr)
-    struct dumpRock *dparamsPtr;
+int getXBSATape(struct dumpRock *dparamsPtr)
 {
     struct dumpNode       *nodePtr      =  dparamsPtr->node;
     struct butm_tapeInfo  *tapeInfoPtr  =  dparamsPtr->tapeInfoPtr;
@@ -1476,10 +1456,8 @@ getXBSATape(dparamsPtr)
  *             1 - prompt regardless
  */
 
-getDumpTape(dparamsPtr, interactiveFlag, append)
-     struct dumpRock *dparamsPtr;
-     int interactiveFlag;
-     afs_int32 append;
+int getDumpTape(struct dumpRock *dparamsPtr, int interactiveFlag,
+               afs_int32 append)
 {
     struct dumpNode       *nodePtr         =  dparamsPtr->node;
     struct butm_tapeInfo  *tapeInfoPtr     =  dparamsPtr->tapeInfoPtr;
@@ -1822,10 +1800,8 @@ error_exit:
     return(code);
 }
 
-makeVolumeHeader(vhptr, dparamsPtr, fragmentNumber)
-     struct volumeHeader *vhptr;
-     struct dumpRock *dparamsPtr;
-     int fragmentNumber;
+int makeVolumeHeader(struct volumeHeader *vhptr, struct dumpRock *dparamsPtr,
+                    int fragmentNumber)
 {
     struct dumpNode *nodePtr = dparamsPtr->node;
     struct tc_dumpDesc *curDump;
@@ -1855,8 +1831,8 @@ error_exit:
     return (code);
 }
 
-volumeHeader_hton(hostPtr, netPtr)
-     struct volumeHeader *hostPtr, *netPtr;
+int volumeHeader_hton(struct volumeHeader *hostPtr, 
+                     struct volumeHeader *netPtr)
 {
     struct volumeHeader volHdr;
 
@@ -1883,9 +1859,7 @@ volumeHeader_hton(hostPtr, netPtr)
 
 /* database related routines */
 
-afs_int32
-createDump(dparamsPtr)
-     struct dumpRock *dparamsPtr;
+afs_int32 createDump(struct dumpRock *dparamsPtr)
 {
     struct dumpNode *nodePtr = dparamsPtr->node;
     struct budb_dumpEntry *dumpPtr;
@@ -1946,7 +1920,8 @@ createDump(dparamsPtr)
  * server as the original server and go back to it each time we pass 0
  * as the server.
  */
-afs_int32 InitToServer(afs_int32 taskId, struct butx_transactionInfo *butxInfoP, char *server)
+afs_int32 InitToServer(afs_int32 taskId, 
+                      struct butx_transactionInfo *butxInfoP, char *server)
 {
    static char origserver[BSA_MAX_DESC];
    static int  init=0;
@@ -2000,8 +1975,7 @@ afs_int32 InitToServer(afs_int32 taskId, struct butx_transactionInfo *butxInfoP,
 /* DeleteDump
  *
  */
-DeleteDump(ptr) 
-   struct deleteDumpIf *ptr;
+int DeleteDump(struct deleteDumpIf *ptr)
 {
     afs_int32 taskId;
     afs_int32 rc, code=0;
diff --git a/src/config/Makefile.ppc_darwin_60.in b/src/config/Makefile.ppc_darwin_60.in
new file mode 100644 (file)
index 0000000..d032a36
--- /dev/null
@@ -0,0 +1,43 @@
+# Keep macros within each section in sorted order for clean diff displays.
+#
+# AFS_OSTYPE used to indicate suffixes and os specific subdirectories.
+AFS_OSTYPE = DARWIN
+#
+#
+# compilation and link editor flags
+XCFLAGS=-no-cpp-precomp
+#MT_CFLAGS=-D_REENTRANT -DAFS_PTHREAD_ENV ${XCFLAGS}
+#MT_CC=cc
+KROOT=
+KINCLUDES=-I$(KROOT)/System/Library/Frameworks/Kernel.framework/Headers
+#SHARE_LDFLAGS =
+LWP_OPTMZ=-O2
+OPTMZ=-O2
+DBG=-g
+REGEX_OBJ=regex.o
+
+
+#
+# libraries
+XLIBS=@LIB_AFSDB@
+TXLIBS=-lncurses
+#MTLIBS=
+#XLIBELFA=
+#XLIBKVM=
+#
+SHLIB_SUFFIX=
+SHLIB_CFLAGS=
+#
+# programs
+AR=ar
+AS=as
+CC=cc
+CP=cp
+INSTALL=${TOP_SRCDIR}/pinstall/pinstall
+LEX=lex -l
+LD= ld
+LORDER = lorder
+MV=mv
+RANLIB=ranlib
+RM=rm
+STRIP= strip
index 5394f49..58e86d4 100644 (file)
@@ -50,6 +50,7 @@
 #define SYS_NAME_ID_ppc_darwin_12        503
 #define SYS_NAME_ID_ppc_darwin_13        504
 #define SYS_NAME_ID_ppc_darwin_14        505
+#define SYS_NAME_ID_ppc_darwin_60        506
 
 #define SYS_NAME_ID_next_mach20                 601
 #define SYS_NAME_ID_next_mach30                 602
diff --git a/src/config/param.ppc_darwin_60.h b/src/config/param.ppc_darwin_60.h
new file mode 100644 (file)
index 0000000..acaec06
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef AFS_PARAM_H
+#define AFS_PARAM_H
+
+#define AFS_ENV                 1
+#define AFS_64BIT_ENV           1       /* Defines afs_int32 as int, not long. */
+#define AFS_PPC_ENV 1
+#define AFS_VFSINCL_ENV 1
+
+#include <afs/afs_sysnames.h>
+
+#define AFS_DARWIN_ENV
+#define AFS_DARWIN13_ENV
+#define AFS_DARWIN14_ENV
+#define AFS_DARWIN60_ENV
+#define AFS_NONFSTRANS
+#define AFS_SYSCALL             230
+#define AFS_NAMEI_ENV 1
+
+/* File system entry (used if mount.h doesn't define MOUNT_AFS */
+#define AFS_MOUNT_AFS    "afs"
+
+/* Machine / Operating system information */
+#define sys_ppc_darwin_12   1
+#define sys_ppc_darwin_13   1
+#define sys_ppc_darwin_14   1
+#define sys_ppc_darwin_60   1
+#define SYS_NAME        "ppc_darwin_60"
+#define SYS_NAME_ID     SYS_NAME_ID_ppc_darwin_60
+#define AFSBIG_ENDIAN   1
+#define AFS_HAVE_FFS    1       /* Use system's ffs. */
+
+#define AFS_GCPAGS                1       /* if nonzero, garbage collect PAGs */
+#define RXK_LISTENER_ENV         1
+
+#ifdef KERNEL
+#undef MACRO_BEGIN
+#undef MACRO_END
+#include <kern/macro_help.h>
+#define AFS_GLOBAL_SUNLOCK        1
+#define AFS_VFS34       1       /* What is VFS34??? */
+#define afsio_iov       uio_iov
+#define afsio_iovcnt    uio_iovcnt
+#define afsio_offset    uio_offset
+#define afsio_seg       uio_segflg
+#define afsio_resid     uio_resid
+#define AFS_UIOSYS      UIO_SYSSPACE
+#define AFS_UIOUSER     UIO_USERSPACE
+#define AFS_CLBYTES     CLBYTES
+#define osi_GetTime(x)  microtime(x)
+#define AFS_KALLOC(x)   kalloc(x)
+#define AFS_KFREE(x,y)  kfree(x,y)
+#define v_count         v_usecount
+#define v_vfsp          v_mount
+#define vfs_bsize       mnt_stat.f_bsize
+#define vfs_fsid        mnt_stat.f_fsid
+#define va_nodeid       va_fileid
+#define vfs_vnodecovered mnt_vnodecovered
+#define direct          dirent
+#define vnode_t         struct vnode
+
+#define VN_RELE(vp)     vrele(((struct vnode *)(vp)))
+#define VN_HOLD(vp)     VREF(((struct vnode *)(vp)))
+
+#endif
+#endif /* AFS_PARAM_H */
diff --git a/src/config/param.ppc_darwin_60_usr.h b/src/config/param.ppc_darwin_60_usr.h
new file mode 100644 (file)
index 0000000..e615381
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef AFS_PARAM_H
+#define AFS_PARAM_H
+
+#define AFS_VFSINCL_ENV 1       /* NOBODY uses this.... */
+#define AFS_ENV                 1
+#define AFS_64BIT_ENV           1       /* Defines afs_int32 as int, not long. */
+#define AFS_PPC_ENV 1
+
+#include <afs/afs_sysnames.h>
+#define AFS_USERSPACE_ENV
+#define AFS_USR_DARWIN_ENV
+#define AFS_USR_DARWIN13_ENV
+#define AFS_USR_DARWIN14_ENV
+#define AFS_USR_DARWIN60_ENV
+#define AFS_NONFSTRANS 
+#define AFS_SYSCALL             230
+
+/* File system entry (used if mount.h doesn't define MOUNT_AFS */
+#define AFS_MOUNT_AFS    "afs"
+
+/* Machine / Operating system information */
+#define sys_ppc_darwin_12   1
+#define sys_ppc_darwin_13   1
+#define sys_ppc_darwin_14   1
+#define sys_ppc_darwin_60   1
+#define SYS_NAME        "ppc_darwin_60"
+#define SYS_NAME_ID     SYS_NAME_ID_ppc_darwin_60
+#define AFSBIG_ENDIAN   1
+#define AFS_HAVE_FFS    1       /* Use system's ffs. */
+
+#define AFS_UIOSYS      UIO_SYSSPACE
+#define AFS_UIOUSER     UIO_USERSPACE
+
+#define AFS_GCPAGS                0       /* if nonzero, garbage collect PAGs */
+#define RXK_LISTENER_ENV          1
+
+#define AFS_VFS34       1       /* What is VFS34??? */
+#define afsio_iov       uio_iov
+#define afsio_iovcnt    uio_iovcnt
+#define afsio_offset    uio_offset
+#define afsio_seg       uio_segflg
+#define afsio_resid     uio_resid
+#define AFS_UIOSYS      UIO_SYSSPACE
+#define AFS_UIOUSER     UIO_USERSPACE
+#define        VATTR_NULL      usr_vattr_null
+
+#define AFS_DIRENT
+#ifndef CMSERVERPREF
+#define CMSERVERPREF
+#endif
+
+#endif /* AFS_PARAM_H */
index 853f303..4828b7c 100644 (file)
@@ -34,7 +34,6 @@ RCSID("$Header$");
 #if    defined(AFS_SUN56_ENV) || defined(AFS_HPUX_ENV)
 #include "../afs/sysincludes.h"
 #endif
-#ifndef AFS_SGI64_ENV
 #if defined(AFS_FBSD_ENV)
 #include "../h/lock.h"
 #include "../vm/vm.h"
@@ -42,6 +41,7 @@ RCSID("$Header$");
 #include "../vm/pmap.h"
 #include "../vm/vm_map.h"
 #endif /* AFS_FBSD_ENV */
+#if !defined(AFS_SGI64_ENV) && !defined(AFS_DARWIN60_ENV)
 #include "../h/user.h"
 #endif /* AFS_SGI64_ENV */
 #include "../h/uio.h"
index 473b95d..f37a6c8 100644 (file)
@@ -767,7 +767,7 @@ int gator_cursesgwin_getdimensions(gwp, aparms)
     struct gator_cursesgwin *cwp;      /*Curses-specific data*/
 
     cwp = (struct gator_cursesgwin *)(gwp->w_data);
-#ifdef AFS_DARWIN_ENV
+#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV)
     aparms->maxx = cwp->wp->maxx;
     aparms->maxy = cwp->wp->maxy;
 #elif defined(AFS_NBSD_ENV)
index 7072345..be61239 100644 (file)
@@ -28,7 +28,11 @@ AFS_OS_NONFSOBJS = osi_vfsops.o
 KDEFS=
 DBUG = 
 DEFINES= -D_KERNEL -DKERNEL -DKERNEL_PRIVATE -DDIAGNOSTIC -DUSE_SELECT -DMACH_USER_API -DMACH_KERNEL
+<ppc_darwin_60>
+KOPTS=-no-cpp-precomp -static -fno-common -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float -mlong-branch 
+<ppc_darwin_14 ppc_darwin_13 ppc_darwin_12>
 KOPTS=-no-precomp -static -fno-common -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float -mlong-branch 
+<all>
 CFLAGS=-I. -I.. -I${TOP_OBJDIR}/src/config ${KINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} ${OPTMZ}
 KINCLUDES=-I${KROOT}/System/Library/Frameworks/Kernel.Framework/Headers
 
diff --git a/src/libafs/afs.ppc_darwin_60.plist.in b/src/libafs/afs.ppc_darwin_60.plist.in
new file mode 100644 (file)
index 0000000..98ab344
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>afs</string>
+       <key>CFBundleIdentifier</key>
+       <string>org.openafs.filesystems.afs</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>afs</string>
+       <key>CFBundlePackageType</key>
+       <string>KEXT</string>
+       <key>CFBundleShortVersionString</key>
+       <string>@VERSION@</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>@VERSION@</string>
+       <key>OSBundleLibraries</key>
+       <dict>
+               <key>com.apple.kernel.bsd</key>
+               <string>6.0</string>
+               <key>com.apple.kernel.mach</key>
+               <string>6.0</string>
+       </dict>
+</dict>
+</plist>
index cbc3739..aeece2d 100644 (file)
@@ -91,7 +91,9 @@ static struct stat istat, ostat;
 static int stripcalled = 0;
 
 extern int errno;
+#if !defined(AFS_DARWIN60_ENV)
 extern int sys_nerr;
+#endif
 #if !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
 extern char *sys_errlist[];
 #endif
index 98fecf6..49557e2 100644 (file)
  */
 #define CV_INIT(cv,a,b,c)
 #define CV_DESTROY(cv)
+#ifdef AFS_DARWIN14_ENV
+#define CV_WAIT(cv, lck)    { \
+                               int isGlockOwner = ISAFS_GLOCK(); \
+                               if (isGlockOwner) AFS_GUNLOCK();  \
+                               MUTEX_EXIT(lck);        \
+                               sleep(cv, PVFS);                \
+                               if (isGlockOwner) AFS_GLOCK();  \
+                               MUTEX_ENTER(lck); \
+                           }
+
+#define CV_TIMEDWAIT(cv,lck,t)  { \
+                               int isGlockOwner = ISAFS_GLOCK(); \
+                               if (isGlockOwner) AFS_GUNLOCK();  \
+                               MUTEX_EXIT(lck);        \
+                               tsleep(cv,PVFS, "afs_CV_TIMEDWAIT",t);  \
+                               if (isGlockOwner) AFS_GLOCK();  \
+                               MUTEX_ENTER(lck);       \
+                            }
+
+#define CV_SIGNAL(cv)           wakeup_one(cv)
+#define CV_BROADCAST(cv)        wakeup(cv)
+#else
 #define CV_WAIT(cv, lck)    { \
                                int isGlockOwner = ISAFS_GLOCK(); \
                                if (isGlockOwner) AFS_GUNLOCK();  \
@@ -58,6 +80,7 @@
 
 #define CV_SIGNAL(cv)           thread_wakeup_one((event_t)(cv))
 #define CV_BROADCAST(cv)        thread_wakeup((event_t)(cv))
+#endif
 
 typedef struct {
     struct lock__bsd__ lock;
index aa04db1..b19dac7 100644 (file)
@@ -364,7 +364,11 @@ void rxi_InitPeerParams(register struct rx_peer *pp)
       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
     }
 #else /* AFS_USERSPACE_IP_ADDR */
+#ifdef AFS_DARWIN60_ENV
+    struct ifaddr *ifad = (struct ifaddr *) 0;
+#else
     struct in_ifaddr *ifad = (struct in_ifaddr *) 0;
+#endif
     struct ifnet *ifn;
 
     /* At some time we need to iterate through rxi_FindIfnet() to find the
@@ -638,7 +642,25 @@ int rxi_GetIFInfo(void)
     }
    return different;
 }
+#ifdef AFS_DARWIN60_ENV
+/* Returns ifnet which best matches address */
+struct ifnet *
+rxi_FindIfnet(addr, pifad) 
+     afs_uint32 addr;
+     struct ifaddr **pifad;
+{
+  struct sockaddr_in s;
 
+  if (numMyNetAddrs == 0)
+    (void) rxi_GetIFInfo();
+
+  s.sin_family=AF_INET;
+  s.sin_addr.s_addr=addr;
+  *pifad=ifa_ifwithnet((struct sockaddr *)&s);
+ done:
+  return (*pifad ?  (*pifad)->ifa_ifp : NULL );
+}
+#else
 /* Returns ifnet which best matches address */
 struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct in_ifaddr **pifad) 
 {
@@ -700,6 +722,7 @@ struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct in_ifaddr **pifad)
  done:
   return (*pifad ?  (*pifad)->ia_ifp : NULL );
 }
+#endif
 #endif /* else AFS_USERSPACE_IP_ADDR */
 #endif /* !SUN5 && !SGI62 */
 
index 92cb944..d50ba41 100644 (file)
@@ -61,15 +61,17 @@ typedef unsigned short                  etap_event_t;
 #include "../net/route.h"
 #include "../netinet/in_systm.h"
 #include "../netinet/ip.h"
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV)
 #include "../netinet/in_pcb.h"
 #endif /* ! AFS_HPUX110_ENV && ! AFS_LINUX22_ENV */
 #ifndef AFS_LINUX22_ENV
+#if !defined(AFS_DARWIN60_ENV)
 #include "../netinet/ip_var.h"
+#endif
 #include "../netinet/ip_icmp.h"
 #endif /* AFS_LINUX22_ENV */
 #include "../netinet/udp.h"
-#if !defined(AFS_SGI62_ENV) && !defined(AFS_LINUX22_ENV)
+#if !defined(AFS_SGI62_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV)
 #include "../netinet/udp_var.h"
 #endif
 #if defined(AFS_HPUX102_ENV) || (defined(AFS_SGI62_ENV) && !defined(AFS_SGI64_ENV))
@@ -85,7 +87,7 @@ struct coda_inode_info {};
 #include "../h/file.h"
 #endif
 #include "../net/if.h"
-#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV)
+#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV)
 #include "../netinet/in_var.h"
 #endif /* ! AFS_HPUX110_ENV && ! AFS_LINUX22_ENV */
 #ifndef AFS_LINUX22_ENV
index b8e669c..d40e138 100644 (file)
@@ -98,7 +98,7 @@ int debug = 0;
 static char *cmdname;
 #ifdef AFS_SUN5_ENV
 static char CPP[] = "/usr/ccs/lib/cpp";
-#elif defined(AFS_XBSD_ENV)
+#elif defined(AFS_XBSD_ENV) || defined(AFS_DARWIN60_ENV)
 static char CPP[] = "/usr/bin/cpp";
 #elif defined(AFS_NT40_ENV)
 static char CPP[MAXCMDLINE];
index b861f3e..0aaeadc 100644 (file)
@@ -31,6 +31,9 @@ RCSID("$Header$");
 #ifdef AFS_AIX_ENV
 #include "../h/systm.h"
 #endif
+#ifdef AFS_DARWIN60_ENV
+#include "../h/kernel.h"
+#endif
 #include "../h/types.h"
 #include "../h/time.h"
 #ifndef AFS_LINUX22_ENV