Index: file.cxx =================================================================== RCS file: /cvs/porting/sal/osl/unx/file.cxx,v --- file.cxx 28 Apr 2008 13:46:10 -0000 1.20 +++ file.cxx 28 Jul 2008 19:36:24 -0000 @@ -290,6 +290,11 @@ { flags &= ~O_EXLOCK; flags |= O_SHLOCK; + } + else + { + /* Needed flags to allow opening a webdav file */ + flags &= ~( O_EXLOCK | O_SHLOCK ); } } @@ -689,7 +694,17 @@ aflock.l_type = 0; /* lock the file if flock.l_type is set */ +#ifdef MACOSX + bLocked = ( F_WRLCK != aflock.l_type ); + if (!bLocked) + { + /* Mac OSX returns ENOTSUP for webdav drives. We should try read lock */ + if ( 0 == flock( fd, LOCK_EX | LOCK_NB ) || errno == ENOTSUP ) + bLocked = ( errno != ENOTSUP ) || ( 0 == flock( fd, LOCK_SH | LOCK_NB ) || errno == ENOTSUP ); + } +#else /* MACOSX */ bLocked = ( F_WRLCK != aflock.l_type || -1 != fcntl( fd, F_SETLK, &aflock ) ); +#endif /* MACOSX */ } if ( !bNeedsLock || bLocked ) @@ -756,7 +771,12 @@ /* FIXME: check if file is really locked ? */ /* release the file share lock on this file */ +#ifdef MACOSX + /* Mac OSX will return ENOTSUP for webdav drives. We should ignore the error */ + if ( 0 != flock( pHandleImpl->fd, LOCK_UN | LOCK_NB ) && errno != ENOTSUP ) +#else /* MACOSX */ if( -1 == fcntl( pHandleImpl->fd, F_SETLK, &aflock ) ) +#endif /* MACOSX */ { PERROR( "osl_closeFile", "unlock failed" ); } Index: profile.c =================================================================== RCS file: /cvs/porting/sal/osl/unx/profile.c,v --- profile.c 10 Apr 2008 11:11:19 -0000 1.19 +++ profile.c 28 Jul 2008 19:36:25 -0000 @@ -1207,7 +1207,12 @@ break; } +#ifndef MACOSX // not MAC OSX if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 ) +#else + /* Mac OSX will return ENOTSUP for webdav drives so we should ignore it */ + if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 && errno != ENOTSUP ) +#endif /* MACOSX */ { OSL_TRACE("fcntl returned -1 (%s)\n",strerror(errno)); #ifdef TRACE_OSL_PROFILE