embox

Форк
0
/
iso9660_dvfs.c 
73 строки · 1.6 Кб
1
/**
2
 * @file
3
 * @brief
4
 *
5
 * @date 10.02.2024
6
 * @author Anton Bondarev
7
 */
8

9
#include <stddef.h>
10
#include <string.h>
11
#include <assert.h>
12
#include <errno.h>
13
#include <sys/stat.h>
14

15
#include <fs/inode.h>
16
#include <fs/super_block.h>
17
#include <fs/dentry.h>
18

19
#include <fs/iso9660.h>
20

21
extern struct idesc *dvfs_file_open_idesc(struct lookup *lookup, int __oflag);
22
extern int cdfs_destroy_inode(struct inode *inode);
23
extern int cdfs_find_in_dir(struct cdfs_fs_info *cdfs, int dir, char *name,
24
								int len, iso_directory_record_t **dirrec);
25
extern int cdfs_find_dir(struct cdfs_fs_info *cdfs, char *name, int len);
26
extern int cdfs_alloc_inode_priv(struct inode* node);
27
extern int cdfs_fill_node(struct inode* node, char *name, 
28
					struct cdfs_fs_info *cdfs, iso_directory_record_t *rec);
29

30
struct inode *cdfs_ilookup(struct inode *node, char const *name, struct inode const *dir) {
31
	struct super_block *sb;
32
	struct cdfs_fs_info *fsi;
33
	iso_directory_record_t *rec;
34
	int res;
35
	int n;
36
	char *dir_name;
37

38
	assert(name);
39
	assert(S_ISDIR(dir->i_mode));
40

41
	sb = dir->i_sb;
42
	fsi = sb->sb_data;
43

44
	if (dir == dir->i_sb->sb_root) {
45
		dir_name = "";
46
	} else {
47
		dir_name = inode_name((struct inode *)dir);
48
	}
49

50
	n = cdfs_find_dir(fsi, dir_name, strlen(dir_name));
51

52
	res = cdfs_find_in_dir(fsi, n, (char *)name, strlen(name), &rec);
53
	if (res) {
54
		return NULL;
55
	}
56

57
	res = cdfs_alloc_inode_priv(node);
58
	if (res) {
59
		return NULL;
60
	}
61

62
	res = cdfs_fill_node(node, (char *)name, fsi, rec);
63
	if (res) {
64
		return NULL;
65
	}
66

67
	return node;
68
}
69

70
struct super_block_operations cdfs_sbops = {
71
	.open_idesc    = dvfs_file_open_idesc,
72
	.destroy_inode = cdfs_destroy_inode,
73
};
74

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.