+/* -------------------
+ system rmdir with afp error code.
+ ENOENT is not an error.
+ */
+static int netatalk_rmdir(const char *name)
+{
+ if (rmdir(name) < 0) {
+ switch ( errno ) {
+ case ENOENT :
+ break;
+ case ENOTEMPTY :
+ return AFPERR_DIRNEMPT;
+ case EPERM:
+ case EACCES :
+ return AFPERR_ACCESS;
+ case EROFS:
+ return AFPERR_VLOCK;
+ default :
+ return AFPERR_PARAM;
+ }
+ }
+ return AFP_OK;
+}
+
+/* -------------------------
+ appledouble mkdir afp error code.
+*/
+static int netatalk_mkdir(const char *name)
+{
+ if (ad_mkdir(name, DIRBITS | 0777) < 0) {
+ switch ( errno ) {
+ case ENOENT :
+ return( AFPERR_NOOBJ );
+ case EROFS :
+ return( AFPERR_VLOCK );
+ case EPERM:
+ case EACCES :
+ return( AFPERR_ACCESS );
+ case EEXIST :
+ return( AFPERR_EXIST );
+ case ENOSPC :
+ case EDQUOT :
+ return( AFPERR_DFULL );
+ default :
+ return( AFPERR_PARAM );
+ }
+ }
+ return AFP_OK;
+}
+
+/* -------------------
+ system unlink with afp error code.
+ ENOENT is not an error.
+ */
+int netatalk_unlink(const char *name)
+{
+ if (unlink(name) < 0) {
+ switch (errno) {
+ case ENOENT :
+ break;
+ case EROFS:
+ return AFPERR_VLOCK;
+ case EPERM:
+ case EACCES :
+ return AFPERR_ACCESS;
+ default :
+ return AFPERR_PARAM;
+ }
+ }
+ return AFP_OK;
+}
+
+/* ------------------- */