]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/enumerate.c
Merge symlink branch
[netatalk.git] / etc / afpd / enumerate.c
index c994f03c7eab1371b329f51aec4153b6851991c3..c06ef20300f3f296e4e2b0d41b2b40404a4538b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: enumerate.c,v 1.44 2009-10-02 09:32:40 franklahm Exp $
+ * $Id: enumerate.c,v 1.49 2010-02-10 14:05:37 franklahm Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -97,16 +97,16 @@ static int enumerate_loop(struct dirent *de, char *mname _U_, void *data)
 */
 char *check_dirent(const struct vol *vol, char *name)
 {
-
     if (!strcmp(name, "..") || !strcmp(name, "."))
         return NULL;
 
-    if (!vol->vfs->validupath(vol, name))
+    if (!vol->vfs->vfs_validupath(vol, name))
         return NULL;
 
     /* check for vetoed filenames */
     if (veto_file(vol->v_veto, name))
         return NULL;
+
 #if 0
     char *m_name = NULL;
 
@@ -155,16 +155,16 @@ for_each_dirent(const struct vol *vol, char *name, dir_loop fn, void *data)
 #define REPLY_PARAM_MAXLEN (4 + 104 + 1 + MACFILELEN + 4 + 2 + 255 + 1)
 
 /* ----------------------------- */
-static int enumerate(obj, ibuf, ibuflen, rbuf, rbuflen, ext )
-AFPObj       *obj _U_;
-char        *ibuf, *rbuf;
-unsigned int ibuflen _U_, *rbuflen;
-int     ext;
+static int enumerate(AFPObj *obj _U_, char *ibuf, size_t ibuflen _U_, 
+    char *rbuf, 
+    size_t *rbuflen, 
+    int ext)
 {
     static struct savedir      sd = { 0, 0, 0, NULL, NULL, 0 };
     struct vol                 *vol;
     struct dir                 *dir;
-    int                                did, ret, esz, len, first = 1;
+    int                                did, ret, len, first = 1;
+    size_t                     esz;
     char                        *data, *start;
     u_int16_t                  vid, fbitmap, dbitmap, reqcnt, actcnt = 0;
     u_int16_t                  temp16;
@@ -266,6 +266,9 @@ int     ext;
         return path_error(o_path, AFPERR_NODIR );
     }
 
+    LOG(log_debug, logtype_afpd, "enumerate(vid:%u, did:%u, name:'%s', f/d:%04x/%04x, rc:%u, i:%u, max:%u)",
+        ntohs(vid), ntohl(did), o_path->u_name, fbitmap, dbitmap, reqcnt, sindex, maxsz);
+
     data = rbuf + 3 * sizeof( u_int16_t );
     sz = 3 * sizeof( u_int16_t );      /* fbitmap, dbitmap, reqcount */
 
@@ -277,7 +280,7 @@ int     ext;
     if ( sindex == 1 || curdir->d_did != sd.sd_did || vid != sd.sd_vid ) {
         sd.sd_last = sd.sd_buf;
         /* if dir was in the cache we don't have the inode */
-        if (( !o_path->st_valid && stat( ".", &o_path->st ) < 0 ) ||
+        if (( !o_path->st_valid && lstat( ".", &o_path->st ) < 0 ) ||
               (ret = for_each_dirent(vol, ".", enumerate_loop, (void *)&sd)) < 0) 
         {
             switch (errno) {
@@ -451,28 +454,25 @@ int     ext;
 }
 
 /* ----------------------------- */
-int afp_enumerate(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj       *obj;
-char        *ibuf, *rbuf;
-unsigned int ibuflen, *rbuflen;
+int afp_enumerate(AFPObj *obj, char *ibuf, size_t ibuflen, 
+    char *rbuf, 
+    size_t *rbuflen)
 {
     return enumerate(obj, ibuf,ibuflen ,rbuf,rbuflen , 0);
 }
 
 /* ----------------------------- */
-int afp_enumerate_ext(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj       *obj;
-char        *ibuf, *rbuf;
-unsigned int ibuflen, *rbuflen;
+int afp_enumerate_ext(AFPObj *obj, char *ibuf, size_t ibuflen, 
+    char *rbuf, 
+    size_t *rbuflen)
 {
     return enumerate(obj, ibuf,ibuflen ,rbuf,rbuflen , 1);
 }
 
 /* ----------------------------- */
-int afp_enumerate_ext2(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj       *obj;
-char        *ibuf, *rbuf;
-unsigned int ibuflen, *rbuflen;
+int afp_enumerate_ext2(AFPObj *obj, char *ibuf, size_t ibuflen, 
+    char *rbuf, 
+    size_t *rbuflen)
 {
     return enumerate(obj, ibuf,ibuflen ,rbuf,rbuflen , 2);
 }