+ /* Check sharing of an existing object. */
+ {
+ yaffsfs_Handle *hx;
+ int i;
+ sharedReadAllowed = 1;
+ sharedWriteAllowed = 1;
+ alreadyReading = 0;
+ alreadyWriting = 0;
+ for( i = 0; i < YAFFSFS_N_HANDLES; i++){
+ hx = &yaffsfs_handle[i];
+ if(hx->useCount > 0 &&
+ hx->inodeId >= 0 &&
+ yaffsfs_inode[hx->inodeId].iObj == obj){
+ if(!hx->shareRead)
+ sharedReadAllowed = 0;
+ if(!hx->shareWrite)
+ sharedWriteAllowed = 0;
+ if(hx->reading)
+ alreadyReading = 1;
+ if(hx->writing)
+ alreadyWriting = 0;
+ }
+ }
+
+ readRequested = (oflag & (O_RDWR | O_RDONLY)) ? 1 : 0;
+ writeRequested = (oflag & (O_RDWR | O_WRONLY)) ? 1 : 0;
+
+ if((!sharedReadAllowed && readRequested)||
+ (!shareRead && alreadyReading) ||
+ (!sharedWriteAllowed && writeRequested) ||
+ (!shareWrite && alreadyWriting)){
+ openDenied = 1;
+ yaffsfs_SetError(-EBUSY);
+ errorReported=1;
+ }
+ }
+