函数逻辑报告 |
Source Code:fs\namei.c |
Create Date:2022-07-29 10:35:13 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| 首页 | 函数Tree |
| 注解内核,赢得工具 | 下载SCCT | English |
函数名称:do_renameat2
函数原型:static int do_renameat2(int olddfd, const char __user *oldname, int newdfd, const char __user *newname, unsigned int flags)
返回类型:int
参数:
| 类型 | 参数 | 名称 |
|---|---|---|
| int | olddfd | |
| const char __user * | oldname | |
| int | newdfd | |
| const char __user * | newname | |
| unsigned int | flags |
| 4467 | struct inode * delegated_inode = NULL |
| 4471 | bool should_retry = false |
| 4474 | 如果flags按位与Don't overwrite target 按位或Exchange source and dest 按位或Whiteout source 的值的反则返回:负EINVAL |
| 4477 | 如果flags按位与Don't overwrite target 按位或Whiteout source 的值且flags按位与Exchange source and dest 则返回:负EINVAL |
| 4481 | 如果flags按位与Whiteout source 且非操作权限检查则返回:负EPERM |
| 4484 | 如果flags按位与Exchange source and dest 则target_flags等于0 |
| 4487 | retry : |
| 4488 | from等于filename_parentat(olddfd, getname(oldname), lookup_flags, & old_path, & old_last, & old_type) |
| 4490 | 如果是错误则 |
| 4495 | to等于filename_parentat(newdfd, getname(newname), lookup_flags, & new_path, & new_last, & new_type) |
| 4497 | 如果是错误则 |
| 4510 | 如果flags按位与Don't overwrite target 则error等于负EEXIST |
| 4515 | error等于mnt_want_write(mnt) |
| 4519 | retry_deleg : |
| 4528 | 如果d_is_negative(old_dentry)则转到:exit4 |
| 4535 | 如果flags按位与Don't overwrite target 且d_is_positive(new_dentry)则转到:exit5 |
| 4537 | 如果flags按位与Exchange source and dest 则 |
| 4539 | 如果d_is_negative(new_dentry)则转到:exit5 |
| 4542 | 如果非d_is_dir(new_dentry)则 |
| 4549 | 如果非d_is_dir(old_dentry)则 |
| 4553 | 如果非flags按位与Exchange source and dest 的值且name[len]则转到:exit5 |
| 4558 | 如果old_dentry恒等于trap则转到:exit5 |
| 4561 | 如果非flags按位与Exchange source and dest 的值则error等于负ENOTEMPTY |
| 4563 | 如果new_dentry恒等于trap则转到:exit5 |
| 4566 | error等于security_path_rename( & old_path, old_dentry, & new_path, new_dentry, flags) |
| 4573 | exit5 : |
| 4574 | dput(new_dentry) |
| 4575 | exit4 : |
| 4576 | dput(old_dentry) |
| 4577 | exit3 : |
| 4578 | unlock_rename(dentry, dentry) |
| 4579 | 如果delegated_inode则 |
| 4580 | error等于break_deleg_wait( & delegated_inode) |
| 4581 | 如果非error则转到:retry_deleg |
| 4584 | mnt_drop_write(mnt) |
| 4585 | exit2 : |
| 4590 | exit1 : |
| 4593 | 如果should_retry则 |
| 4598 | exit : |
| 4599 | 返回:error |
| 源代码转换工具 开放的插件接口 | X |
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |