]> arthur.barton.de Git - netatalk.git/commitdiff
better error code for calls on a not existing file
authordidg <didg>
Sun, 20 Apr 2003 06:53:40 +0000 (06:53 +0000)
committerdidg <didg>
Sun, 20 Apr 2003 06:53:40 +0000 (06:53 +0000)
etc/afpd/directory.c
etc/afpd/directory.h
etc/afpd/enumerate.c
etc/afpd/file.c
etc/afpd/filedir.c

index fde61b9985abc556666f92e8b2c937b4959de6a9..a06199d1108a4a3a9e8e8f99328a29ff2e6c9024 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: directory.c,v 1.69 2003-04-20 06:13:40 didg Exp $
+ * $Id: directory.c,v 1.70 2003-04-20 06:53:40 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -1429,6 +1429,20 @@ int getdirparams(const struct vol *vol,
     return( AFP_OK );
 }
 
+/* ----------------------------- */
+int path_error(struct path *path, int error)
+{
+/* - a dir with access error
+ * - no error it's a file
+ * - file not found
+ */
+    if (path_isadir(path))
+        return afp_errno;
+    if (path->st_errno)
+        return error;
+    return AFPERR_BADTYPE ;
+}
+
 /* ----------------------------- */
 int afp_setdirparams(obj, ibuf, ibuflen, rbuf, rbuflen )
 AFPObj      *obj;
@@ -1469,9 +1483,8 @@ int               ibuflen, *rbuflen;
         return get_afp_errno(AFPERR_NOOBJ); 
     }
 
-    /* FIXME access error or not a file */
     if ( *path->m_name != '\0' ) {
-        return (path_isadir( path))? afp_errno:AFPERR_BADTYPE ;
+       return path_error(path, AFPERR_NOOBJ);
     }
 
     /*
@@ -2293,7 +2306,7 @@ int               ibuflen, *rbuflen;
     }
 
     if ( *path->m_name != '\0' ) {
-        return (path_isadir(path))? afp_errno:AFPERR_BADTYPE ;
+       return path_error(path, AFPERR_NOOBJ);
     }
 
     if ( !path->st_valid && of_stat(path ) < 0 ) {
index 429ae5c3c957d3ef1f0b4fee360d0a74e12f0345..1eed0e48a92ed9f4f35ac68e273d5e0a6c368a80 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: directory.h,v 1.12 2003-04-14 18:03:49 didg Exp $
+ * $Id: directory.h,v 1.13 2003-04-20 06:53:40 didg Exp $
  *
  * Copyright (c) 1990,1991 Regents of The University of Michigan.
  * All Rights Reserved.
@@ -199,6 +199,7 @@ extern int getdirparams __P((const struct vol *, u_int16_t, struct path *,
 extern int setdirparams __P((const struct vol *, struct path *, u_int16_t, char *));
 extern int renamedir __P((char *, char *, struct dir *,
                               struct dir *, char *, const int));
+extern int path_error __P((struct path *, int error));
 
 typedef int (*dir_loop)(struct dirent *, char *, void *);
 
index 469d1bce2540240c4c34e3286c1063177d623ce8..7faac80b947a16f479b8c39344be72b4bbfe1775 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: enumerate.c,v 1.38 2003-04-16 06:55:44 didg Exp $
+ * $Id: enumerate.c,v 1.39 2003-04-20 06:53:40 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -318,7 +318,7 @@ int     ext;
     }
     if ( *o_path->m_name != '\0') {
         /* it's a file or it's a dir and extendir() was unable to chdir in it */
-        return (path_isadir(o_path))? afp_errno:AFPERR_BADTYPE ;
+        return path_error(o_path, AFPERR_NODIR );
     }
 
     data = rbuf + 3 * sizeof( u_int16_t );
index 3c4e5a4126fedb5292f8ffb17e28708bedc79e0a..8047052ca3cada76f2f255138dc049fc67c4ab0e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: file.c,v 1.90 2003-04-20 06:13:41 didg Exp $
+ * $Id: file.c,v 1.91 2003-04-20 06:53:40 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -711,6 +711,10 @@ int                ibuflen, *rbuflen;
         return( AFPERR_BADTYPE ); /* it's a directory */
     }
 
+    if ( s_path->st_errno != 0 ) {
+        return( AFPERR_NOOBJ );
+    }
+
     if ((u_long)ibuf & 1 ) {
         ibuf++;
     }
@@ -1150,7 +1154,10 @@ int              ibuflen, *rbuflen;
         return get_afp_errno(AFPERR_NOOBJ); 
     }
     if ( *s_path->m_name != '\0' ) {
+#if 0
         return (path_isadir( s_path))? AFPERR_PARAM:AFPERR_BADTYPE ;
+#endif        
+       path_error(s_path, AFPERR_PARAM);
     }
 
     /* one of the handful of places that knows about the path type */
index db8821e2545e92632796ffe8eb95ce69698df29f..d2400262db06a3ce4ea8d83e913b9bfcef1b6036 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: filedir.c,v 1.44 2003-04-14 18:03:49 didg Exp $
+ * $Id: filedir.c,v 1.45 2003-04-20 06:53:40 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -579,7 +579,7 @@ int         ibuflen, *rbuflen;
     upath = s_path->u_name;
     if ( path_isadir( s_path) ) {
        if (*s_path->m_name != '\0') {
-           rc = AFPERR_ACCESS; 
+           rc = AFPERR_ACCESS;
        }
        else {
             rc = deletecurdir( vol, obj->oldtmp, AFPOBJ_TMPSIZ);
@@ -722,7 +722,7 @@ int         ibuflen, *rbuflen;
         return( AFPERR_NOOBJ );
     }
     if ( *path->m_name != '\0' ) {
-        return (path_isadir(path))?afp_errno:AFPERR_BADTYPE;
+        return path_error(path, AFPERR_NOOBJ);
     }
 
     /* one more place where we know about path type */