int vfs_link(char *old_path, char *new_path) { int ret; char *new_name; struct inode *old_node, *new_dir; if ((ret = vfs_lookup(old_path, &old_node)) != 0) { return ret; } if ((ret = vfs_lookup_parent(new_path, &new_dir, &new_name)) != 0) { vop_ref_dec(old_node); return ret; } if (old_node->in_fs == NULL || old_node->in_fs != new_dir->in_fs) { ret = -E_XDEV; } else { ret = vop_link(new_dir, new_name, old_node); } vop_ref_dec(old_node); vop_ref_dec(new_dir); return ret; }
void dev_init(void) { init_device(null); init_device(stdin); init_device(stdout); init_device(disk0); /* for Nand flash */ init_device(disk1); init_device(tty); //init_device(ashmem); // link such as stdout int ret; char *new_name; struct inode *old_node, *new_dir; if ((ret = vfs_lookup("stdout:", &old_node)) != 0) { kprintf("erho"); return;// ret; } if ((ret = vfs_lookup_parent("/dev", &new_dir, &new_name)) != 0) { vop_ref_dec(old_node); return;// ret; } // if (old_node->in_fs == NULL || old_node->in_fs != new_dir->in_fs) { // ret = -E_XDEV; // } // else { ret = vop_link(new_dir, new_name, old_node); kprintf("odife%d\n", ret); // } vop_ref_dec(old_node); vop_ref_dec(new_dir); }