- /* try opening in read-only mode */
- ret = AFPERR_NOOBJ;
- if (ad_open(ofork->of_ad, upath, adflags | ADFLAGS_RDONLY | ADFLAGS_SETSHRMD) < 0) {
- switch ( errno ) {
- case EROFS:
- ret = AFPERR_VLOCK;
- goto openfork_err;
- case EACCES:
- goto openfork_err;
- case ENOENT:
- /* see if client asked for a read only data fork */
- if (fork == OPENFORK_DATA) {
- if (ad_open(ofork->of_ad, upath, ADFLAGS_DF | ADFLAGS_RDONLY | ADFLAGS_SETSHRMD) < 0) {
- goto openfork_err;
- }
- adflags = ADFLAGS_DF;
- }
- /* else we don't set AFPFORK_META because there's no ressource fork file
- * We need to check AFPFORK_META in afp_closefork(). eg fork open read-only
- * then create in open read-write.
- * FIXME , it doesn't play well with byte locking example:
- * ressource fork open read only
- * locking set on it (no effect, there's no file!)
- * ressource fork open read write now
- */
- break;
- case EMFILE :
- case ENFILE :
- ret = AFPERR_NFILE;
- goto openfork_err;
- case EISDIR :
- ret = AFPERR_BADTYPE;
- goto openfork_err;
- default:
- LOG(log_error, logtype_afpd, "afp_openfork(\"%s\"): %s",
- fullpathname(s_path->m_name), strerror(errno) );
- goto openfork_err;
- }
- } else {
- ofork->of_flags |= AFPFORK_META;
+ switch (errno) {
+ case EACCES:
+ case ENOENT:
+ /* no metadata? We don't care! */
+ break;
+ case EROFS:
+ ret = AFPERR_VLOCK;
+ case EMFILE :
+ case ENFILE :
+ ret = AFPERR_NFILE;
+ goto openfork_err;
+ case EISDIR :
+ ret = AFPERR_BADTYPE;
+ goto openfork_err;
+ default:
+ LOG(log_error, logtype_afpd, "afp_openfork(%s): ad_open: %s", s_path->m_name, strerror(errno) );
+ ret = AFPERR_PARAM;
+ goto openfork_err;