userlibandfileserver/fileserver/sfile/sf_file.cpp
changeset 200 73ea206103e6
parent 152 657f875b013e
child 201 43365a9b78a3
equal deleted inserted replaced
152:657f875b013e 200:73ea206103e6
   699 		else
   699 		else
   700 			{
   700 			{
   701 			// Current operation points to a local buffer
   701 			// Current operation points to a local buffer
   702 			// The request originated from the file server (e.g. file cache) with a local message handle (KLocalMessageHandle)
   702 			// The request originated from the file server (e.g. file cache) with a local message handle (KLocalMessageHandle)
   703 			TPtr8 dataDesc((TUint8*) currentOperation.iReadWriteArgs.iData + currentOperation.iReadWriteArgs.iOffset, len, len);
   703 			TPtr8 dataDesc((TUint8*) currentOperation.iReadWriteArgs.iData + currentOperation.iReadWriteArgs.iOffset, len, len);
   704 			const RLocalMessage msg;
   704 
   705 			TRAP(r,file->ReadL(pos, len, &dataDesc, msg, 0));
   705 			// save the client's RMessage2
       
   706 			const RMessage2 msgClient = aRequest->Message();
       
   707 			
       
   708 			// overwrite RMessage2 in CFsMessageRequest with RLocalMessage 
       
   709 			const RLocalMessage msgLocal;					
       
   710 			const_cast<RMessage2&> (aRequest->Message()) = msgLocal;
       
   711 
       
   712 			TRAP(r,file->ReadL(pos, len, &dataDesc, aRequest->Message(), 0));
       
   713 							
       
   714 			// restore the client's RMessage2
       
   715 			const_cast<RMessage2&> (aRequest->Message()) = msgClient;
   706 			}
   716 			}
   707 		}
   717 		}
   708 
   718 
   709 
   719 
   710 #if defined(_DEBUG) || defined(_DEBUG_RELEASE)
   720 #if defined(_DEBUG) || defined(_DEBUG_RELEASE)
  1097 			TRAP(r,file->WriteL(pos, len, (const TPtrC8*) aRequest->Message().Ptr0(), aRequest->Message(), currentOperation.iReadWriteArgs.iOffset))
  1107 			TRAP(r,file->WriteL(pos, len, (const TPtrC8*) aRequest->Message().Ptr0(), aRequest->Message(), currentOperation.iReadWriteArgs.iOffset))
  1098 			}
  1108 			}
  1099 		else
  1109 		else
  1100 			{
  1110 			{
  1101 			TPtr8 dataDesc((TUint8*) currentOperation.iReadWriteArgs.iData + currentOperation.iReadWriteArgs.iOffset, len, len);
  1111 			TPtr8 dataDesc((TUint8*) currentOperation.iReadWriteArgs.iData + currentOperation.iReadWriteArgs.iOffset, len, len);
  1102 			const RLocalMessage msg;
  1112 
  1103 			TRAP(r,file->WriteL(pos, len, &dataDesc, msg, 0));
  1113 			// save the client's RMessage2
       
  1114 			const RMessage2 msgClient = aRequest->Message();
       
  1115 			
       
  1116 			// overwrite RMessage2 in CFsMessageRequest with RLocalMessage 
       
  1117 			const RLocalMessage msgLocal;					
       
  1118 			const_cast<RMessage2&> (aRequest->Message()) = msgLocal;
       
  1119 
       
  1120 			TRAP(r,file->WriteL(pos, len, &dataDesc, aRequest->Message(), 0));
       
  1121 							
       
  1122 			// restore the client's RMessage2
       
  1123 			const_cast<RMessage2&> (aRequest->Message()) = msgClient;
  1104 			}
  1124 			}
  1105 		}
  1125 		}
  1106 
  1126 
  1107 //RDebug::Print(_L("WriteR: req %08X pos %ld\t len %d file %08X\n"), aRequest, pos, len, file);
  1127 //RDebug::Print(_L("WriteR: req %08X pos %ld\t len %d file %08X\n"), aRequest, pos, len, file);
  1108 
  1128 
  3668     }
  3688     }
  3669 
  3689 
  3670 
  3690 
  3671 
  3691 
  3672 
  3692 
  3673 
  3693 EXPORT_C TBool CFileCB::DirectIOMode(const RMessagePtr2& aMessage)
  3674 
  3694 	{
  3675 
  3695 	CFsMessageRequest* msgRequest = CFsMessageRequest::RequestFromMessage(aMessage);
  3676 
  3696 
  3677 
  3697 	TInt func = msgRequest->Operation()->Function();
  3678 
  3698 	ASSERT(func == EFsFileRead || func == EFsFileWrite || func == EFsFileWriteDirty || func == EFsReadFileSection);
  3679 
  3699 
  3680 
  3700 	CFileShare* share;
  3681 
  3701 	CFileCB* file;
  3682 
  3702 	GetFileFromScratch(msgRequest, share, file);
       
  3703 	if (share == NULL)		// no share indicates this is a request originating from the file cache
       
  3704 		return EFalse;
       
  3705 
       
  3706 	return func == EFsFileRead ? share->iMode & EFileReadDirectIO : share->iMode & EFileWriteDirectIO; 
       
  3707 	}
       
  3708 
       
  3709 
       
  3710 
       
  3711 
       
  3712 
       
  3713 
       
  3714