patch-2.2.15 linux/fs/ncpfs/dir.c
Next file: linux/fs/ncpfs/file.c
Previous file: linux/fs/isofs/inode.c
Back to the patch index
Back to the overall index
- Lines: 46
- Date:
Fri Apr 21 12:46:44 2000
- Orig file:
v2.2.14/fs/ncpfs/dir.c
- Orig date:
Sat Aug 14 02:27:37 1999
diff -u --new-file --recursive --exclude-from ../../exclude v2.2.14/fs/ncpfs/dir.c linux/fs/ncpfs/dir.c
@@ -868,7 +868,9 @@
int ncp_create_new(struct inode *dir, struct dentry *dentry, int mode,
int attributes)
{
+ struct ncp_server *server = NCP_SERVER(dir);
int error, result;
+ int opmode;
struct ncpfs_inode_info finfo;
__u8 _name[dentry->d_name.len + 1];
@@ -886,18 +888,25 @@
io2vol(NCP_SERVER(dir), _name, !ncp_preserve_case(dir));
error = -EACCES;
- result = ncp_open_create_file_or_subdir(NCP_SERVER(dir), dir, _name,
+ result = ncp_open_create_file_or_subdir(server, dir, _name,
OC_MODE_CREATE | OC_MODE_OPEN | OC_MODE_REPLACE,
attributes, AR_READ | AR_WRITE, &finfo.nw_info);
- if (!result) {
- finfo.nw_info.access = O_RDWR;
- error = ncp_instantiate(dir, dentry, &finfo);
- } else {
- if (result == 0x87) error = -ENAMETOOLONG;
- DPRINTK(KERN_DEBUG "ncp_create: %s/%s failed\n",
- dentry->d_parent->d_name.name, dentry->d_name.name);
- }
-
+ opmode = O_RDWR;
+ if (result) {
+ result = ncp_open_create_file_or_subdir(server, dir, _name,
+ OC_MODE_CREATE | OC_MODE_OPEN | OC_MODE_REPLACE,
+ attributes, AR_WRITE, &finfo.nw_info);
+ if (result) {
+ if (result == 0x87)
+ error = -ENAMETOOLONG;
+ DPRINTK("ncp_create: %s/%s failed\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name);
+ goto out;
+ }
+ opmode = O_WRONLY;
+ }
+ finfo.nw_info.access = opmode;
+ error = ncp_instantiate(dir, dentry, &finfo);
out:
return error;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)