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 TPtrC16 filename1 = (const TText16*)name; |
122 { |
122 int ret1 = rfs.Att(filename1, attribval); |
123 ret = CFileTable::FifoOpen(name, mode, perms, err); |
123 if (ret1 == 0 && ((attribval & (KEntryAttHidden | KEntryAttSystem))== (KEntryAttHidden | KEntryAttSystem))) |
124 } |
124 { |
125 else if(fileType == EFileTypeSymLink) //special file, symlink |
125 TSpecialFileType fileType = _SystemSpecialFileBasedFilePath(name, err, rfs); |
126 { |
126 if(fileType == EFileTypeMkFifo) //special file, FIFO |
127 ret = CFileTable::LinkOpen(name, mode, perms, err, rfs); |
127 { |
128 } |
128 ret = CFileTable::FifoOpen(name, mode, perms, err); |
|
129 } |
|
130 else if(fileType == EFileTypeSymLink) //special file, symlink |
|
131 { |
|
132 ret = CFileTable::LinkOpen(name, mode, perms, err, rfs); |
|
133 } |
|
134 } |
129 else //normal file or directory |
135 else //normal file or directory |
130 { |
136 { |
131 TFullName fullName; |
137 TFullName fullName; |
132 err = GetFullFile(fullName, (const TText16*)name, rfs); |
138 err = GetFullFile(fullName, (const TText16*)name, rfs); |
133 if(err != KErrNone) |
139 if(err != KErrNone) |
632 // Replace = open a new file, zapping the existing one if necessary |
638 // Replace = open a new file, zapping the existing one if necessary |
633 |
639 |
634 int mapped=MapMode(mode, fMode); |
640 int mapped=MapMode(mode, fMode); |
635 // if the file is in \sys, use EFileShareReadersOnly not EFileShareReadersOrWriters |
641 // if the file is in \sys, use EFileShareReadersOnly not EFileShareReadersOrWriters |
636 TParsePtrC pars(aName); |
642 TParsePtrC pars(aName); |
637 if (pars.Path().FindC(_L("\\SYS\\")) == 0) |
643 if (pars.Path().FindF(_L("\\SYS\\")) == 0) |
638 { |
644 { |
639 fMode &= ~EFileShareReadersOrWriters; |
645 fMode &= ~EFileShareReadersOrWriters; |
640 fMode |= EFileShareReadersOnly; |
646 fMode |= EFileShareReadersOnly; |
641 } |
647 } |
642 |
648 |
643 // if the file is in \resource, dont use EFileShareReadersOrWriters |
649 // if the file is in \resource, dont use EFileShareReadersOrWriters |
644 if (pars.Path().FindC(_L("\\resource\\")) == 0) |
650 if (pars.Path().FindF(_L("\\resource\\")) == 0) |
645 { |
651 { |
646 fMode &= ~EFileShareReadersOrWriters; |
652 fMode &= ~EFileShareReadersOrWriters; |
647 fMode |= EFileShareReadersOnly; |
653 fMode |= EFileShareReadersOnly; |
648 } |
654 } |
649 |
655 |