#else
struct min_direct { /* miniature direct structure */
/* If struct direct changes, this must too */
-#ifdef AFS_DARWIN_ENV
+#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
afs_uint32 d_fileno;
u_short d_reclen;
u_char d_type;
#endif /* AFS_SUN56_ENV */
#endif /* AFS_HPUX100_ENV */
+#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+int afs_readdir_type(avc, ade)
+struct DirEntry * ade;
+struct vcache * avc;
+{
+ struct VenusFid tfid;
+ struct vcache *tvc;
+ int vtype;
+ tfid.Cell=avc->fid.Cell;
+ tfid.Fid.Volume=avc->fid.Fid.Volume;
+ tfid.Fid.Vnode=ntohl(ade->fid.vnode);
+ tfid.Fid.Unique=ntohl(ade->fid.vunique);
+ if ((avc->states & CForeign) == 0 &&
+ (ntohl(ade->fid.vnode) & 1)) {
+ return DT_DIR;
+ } else if ((tvc=afs_FindVCache(&tfid,0,0,0,0))) {
+ if (tvc->mvstat) {
+ afs_PutVCache(tvc, WRITE_LOCK);
+ return DT_DIR;
+ } else if (((tvc->states) & (CStatd|CTruth))) {
+ /* CTruth will be set if the object has
+ *ever* been statd */
+ vtype=vType(tvc);
+ afs_PutVCache(tvc, WRITE_LOCK);
+ if (vtype == VDIR)
+ return DT_DIR;
+ else if (vtype == VREG)
+ return DT_REG;
+ /* Don't do this until we're sure it can't be a mtpt */
+ /* else if (vtype == VLNK)
+ type=DT_LNK; */
+ /* what other types does AFS support? */
+ } else
+ afs_PutVCache(tvc, WRITE_LOCK);
+ }
+ return DT_UNKNOWN;
+}
+#endif
+
#ifdef AFS_AIX41_ENV
#define AFS_MOVE_LOCK() AFS_GLOCK()
#define AFS_MOVE_UNLOCK() AFS_GUNLOCK()
#define AFS_MOVE_LOCK()
#define AFS_MOVE_UNLOCK()
#endif
-
char bufofzeros[64]; /* gotta fill with something */
afs_readdir_move (de, vc, auio, slen, rlen, off)
struct DirEntry * de;
#if defined(AFS_SUN_ENV) || defined(AFS_AIX32_ENV) || defined(AFS_SGI_ENV)
sdirEntry.d_off = off;
#endif
-#if defined(AFS_DARWIN_ENV)
- sdirEntry.d_type=DT_UNKNOWN;
+#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+ sdirEntry.d_type=afs_readdir_type(vc, de);
#endif
#if defined(AFS_SGI_ENV)
* It has to do with 'offset' (seek locations).
*/
-#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV)
+#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
afs_readdir(OSI_VC_ARG(avc), auio, acred, eofp)
int *eofp;
#else
#endif /* AFS_SGI61_ENV */
#endif /* defined(AFS_SGI53_ENV) */
-#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV)
+#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
/* Not really used by the callee so we ignore it for now */
if (eofp) *eofp = 0;
#endif
} else {
/* nothin to hand over */
}
-#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV)
+#if defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
if (eofp) *eofp = 1; /* Set it properly */
#endif
if (ode) DRelease(ode, 0);