Пример #1
0
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;
}
Пример #2
0
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);
}