genericopenlibs/openenvcore/backend/src/corebackend/fdesc.cpp
changeset 22 ddc455616bd6
parent 0 e4d67989cc36
child 45 4b03adbd26ca
child 66 38bdaa106551
equal deleted inserted replaced
18:47c74d1534e1 22:ddc455616bd6
   115 		ret = com;
   115 		ret = com;
   116 		}
   116 		}
   117 	else //It's a special file, directory or normal file
   117 	else //It's a special file, directory or normal file
   118 		{
   118 		{
   119 		RFs& rfs = Backend()->FileSession();
   119 		RFs& rfs = Backend()->FileSession();
   120 		TSpecialFileType fileType = _SystemSpecialFileBasedFilePath(name, err, rfs);
   120         TUint attribval;
   121 		if(fileType  == EFileTypeMkFifo) //special file, FIFO
   121         TFullName fullName;
   122     		{
   122         err = GetFullFile(fullName, (const TText16*)name, rfs);
   123     		ret = CFileTable::FifoOpen(name, mode, perms, err);
   123         if(err != KErrNone)
   124     		}
   124             return NULL;
   125 		else if(fileType  == EFileTypeSymLink) //special file, symlink
   125         int ret1 = rfs.Att(fullName, attribval);
   126 			{
   126         if (ret1 == 0 && ((attribval & (KEntryAttHidden | KEntryAttSystem))== (KEntryAttHidden | KEntryAttSystem)))
   127 			ret = CFileTable::LinkOpen(name, mode, perms, err, rfs);
   127             {
   128 			}
   128             TSpecialFileType fileType = _SystemSpecialFileBasedFilePath(name, err, rfs);
       
   129             if(fileType  == EFileTypeMkFifo) //special file, FIFO
       
   130                 {
       
   131                 ret = CFileTable::FifoOpen(name, mode, perms, err);
       
   132                 }
       
   133             else if(fileType  == EFileTypeSymLink) //special file, symlink
       
   134                 {
       
   135                 ret = CFileTable::LinkOpen(name, mode, perms, err, rfs);
       
   136                 }
       
   137             }
   129 		else //normal file or directory
   138 		else //normal file or directory
   130 		    {
   139 		    {
   131 		    TFullName fullName;
   140      	    //Try opening as a file
   132 		    err = GetFullFile(fullName, (const TText16*)name, rfs);
       
   133 		    if(err != KErrNone)
       
   134 		    	return NULL;
       
   135 		    
       
   136 		    //Try opening as a file
       
   137 		    CFileDesc* file = new CFileDesc;
   141 		    CFileDesc* file = new CFileDesc;
   138 			if(file != NULL)
   142 			if(file != NULL)
   139 				{
   143 				{
   140 				err = file->Open(rfs, fullName, mode, perms);
   144 				err = file->Open(rfs, fullName, mode, perms);
   141 				if(err != KErrNone)
   145 				if(err != KErrNone)
   632 	// Replace = open a new file, zapping the existing one if necessary
   636 	// Replace = open a new file, zapping the existing one if necessary
   633 
   637 
   634 	int mapped=MapMode(mode, fMode);
   638 	int mapped=MapMode(mode, fMode);
   635 	// if the file is in \sys, use EFileShareReadersOnly not EFileShareReadersOrWriters
   639 	// if the file is in \sys, use EFileShareReadersOnly not EFileShareReadersOrWriters
   636 	TParsePtrC pars(aName);
   640 	TParsePtrC pars(aName);
   637 	if (pars.Path().FindC(_L("\\SYS\\")) == 0)
   641 	if (pars.Path().FindF(_L("\\SYS\\")) == 0)
   638 		{
   642 		{
   639 		fMode &= ~EFileShareReadersOrWriters;
   643 		fMode &= ~EFileShareReadersOrWriters;
   640 		fMode |= EFileShareReadersOnly;
   644 		fMode |= EFileShareReadersOnly;
   641 		}
   645 		}
   642 	
   646 	
   643 	// if the file is in \resource, dont use EFileShareReadersOrWriters
   647 	// if the file is in \resource, dont use EFileShareReadersOrWriters
   644 	if (pars.Path().FindC(_L("\\resource\\")) == 0)
   648 	if (pars.Path().FindF(_L("\\resource\\")) == 0)
   645 		{
   649 		{
   646 		fMode &= ~EFileShareReadersOrWriters;
   650 		fMode &= ~EFileShareReadersOrWriters;
   647 		fMode |= EFileShareReadersOnly;
   651 		fMode |= EFileShareReadersOnly;
   648 		}
   652 		}
   649 
   653