Voxia OS
v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
iso9660.h
Go to the documentation of this file.
1
#ifndef __FS__ISO9660_H__
2
#define __FS__ISO9660_H__
3
4
#include "
vfs/filesystem.h
"
5
#include "
vfs/vnode.h
"
6
#include <
type.h
>
7
8
typedef
struct
{
9
uint32_t
le
;
// little endian
10
uint32_t
be
;
// big endian
11
}
both_u32
;
12
13
typedef
struct
{
14
uint16_t
le
;
15
uint16_t
be
;
16
}
both_u16
;
17
18
// Struktur Primary Volume Descriptor (PVD)
19
struct
iso9660_pvd
{
20
uint8_t
type
;
// harus = 1 untuk PVD
21
char
id
[5];
// "CD001"
22
uint8_t
version
;
// harus = 1
23
uint8_t
unused1
;
24
25
char
system_id
[32];
// strA
26
char
volume_id
[32];
// strD
27
28
uint8_t
unused2
[8];
29
30
both_u32
volume_space_size
;
// jumlah logical blocks
31
32
uint8_t
unused3
[32];
33
34
both_u16
volume_set_size
;
35
both_u16
volume_sequence_number
;
36
both_u16
logical_block_size
;
37
38
both_u32
path_table_size
;
39
40
uint32_t
l_path_table_loc
;
// LBA lokasi type-L path table
41
uint32_t
opt_l_path_table_loc
;
42
uint32_t
m_path_table_loc
;
// LBA lokasi type-M path table
43
uint32_t
opt_m_path_table_loc
;
44
45
// Root directory record
46
// Struktur ini sebenarnya “Directory Record” dengan panjang tetap 34
47
// byte pada PVD
48
uint8_t
root_dir_record
[34];
49
50
char
volume_set_id
[128];
51
char
publisher_id
[128];
52
char
data_preparer_id
[128];
53
char
application_id
[128];
54
char
copyright_file_id
[37];
55
char
abstract_file_id
[37];
56
char
bibliographic_file_id
[37];
57
58
// Tanggal/waktu (dec-datetime), 17 byte tiap field
59
char
creation_date
[17];
60
char
modification_date
[17];
61
char
expiration_date
[17];
62
char
effective_date
[17];
63
64
uint8_t
file_structure_version
;
65
uint8_t
unused4
;
66
67
uint8_t
application_data
[512];
68
uint8_t
reserved
[653];
69
}
__attribute__
((packed));
70
71
// Struktur Path Table Entry
72
struct
iso9660_path_table_entry
{
73
uint8_t
dir_id_len
;
74
uint8_t
ext_attr_rec_len
;
75
uint32_t
extent_location
;
// LBA, little-endian di L-Table
76
uint16_t
parent_dir_number
;
// indeks parent directory dalam path table
77
// lalu: char dir_identifier[dir_id_len];
78
// lalu padding byte jika diperlukan agar entry genap
79
};
80
81
// Struktur Date/Time pada Directory Record
82
struct
iso9660_dir_time
{
83
uint8_t
year
;
// tahun sejak 1900
84
uint8_t
month
;
85
uint8_t
day
;
86
uint8_t
hour
;
87
uint8_t
minute
;
88
uint8_t
second
;
89
int8_t
gmt_offset
;
// offset dari GMT dalam interval 15 menit
90
};
91
92
// Struktur Directory Record (Entry direktori / file)
93
struct
iso9660_dir
{
94
uint8_t
length
;
95
uint8_t
ext_attr_length
;
96
97
uint32_t
extent_le
;
98
uint32_t
extent_be
;
99
100
uint32_t
size_le
;
101
uint32_t
size_be
;
102
103
uint8_t
date
[7];
104
105
uint8_t
flags
;
106
107
uint8_t
file_unit_size
;
108
uint8_t
interleave_gap
;
109
110
uint16_t
volume_seq_le
;
111
uint16_t
volume_seq_be
;
112
113
uint8_t
name_len
;
114
115
char
name
[];
116
}
__attribute__
((packed));
117
118
#define iOS9660_DIR_FLAG (1 << 1)
119
#define iOS9660_ASSOCIATED_FILE_FLAG (1 << 2)
120
121
fs_operations_t
*
iso9660_fs_operations
(
void
);
122
vops_file_t
*
iso9660_file_operations
(
void
);
123
vops_lnk_t
*
iso9660_lnk_operations
(
void
);
124
125
126
int
iso9660_lookup
(
struct
fs_instance
*
instance
,
char
*
path
,
dentry_ptr
parent
,
127
dentry_ptr
* out);
128
int
iso9660_read
(
vnode_t
*
vnode
,
void
* buf,
size_t
len
,
size_t
offset
);
129
int
iso9660_readlink
(
vnode_t
*
vnode
,
char
* buf,
size_t
len
);
130
131
#endif
// __FS__ISO9660_H__
instance
static AHCIModule instance
Definition
init.cpp:5
dentry_ptr
struct dentry * dentry_ptr
Definition
dentry.h:20
parent
dentry_ptr parent
Definition
dentry.h:7
filesystem.h
vnode_t
struct vnode vnode_t
Definition
filesystem.h:10
fs_operations_t
struct fs_operations fs_operations_t
iso9660_fs_operations
fs_operations_t * iso9660_fs_operations(void)
Definition
iso9660.c:437
iso9660_file_operations
vops_file_t * iso9660_file_operations(void)
Definition
iso9660.c:432
iso9660_lookup
int iso9660_lookup(struct fs_instance *instance, char *path, dentry_ptr parent, dentry_ptr *out)
Definition
iso9660.c:140
iso9660_lnk_operations
vops_lnk_t * iso9660_lnk_operations(void)
Definition
iso9660.c:442
iso9660_readlink
int iso9660_readlink(vnode_t *vnode, char *buf, size_t len)
Definition
iso9660.c:419
__attribute__
struct iso9660_path_table_entry __attribute__
iso9660_read
int iso9660_read(vnode_t *vnode, void *buf, size_t len, size_t offset)
Definition
iso9660.c:389
len
size_t len
Definition
oct2bin.h:7
both_u16
Definition
iso9660.h:13
both_u16::be
uint16_t be
Definition
iso9660.h:15
both_u16::le
uint16_t le
Definition
iso9660.h:14
both_u32
Definition
iso9660.h:8
both_u32::le
uint32_t le
Definition
iso9660.h:9
both_u32::be
uint32_t be
Definition
iso9660.h:10
fs_instance
Definition
filesystem.h:38
iso9660_dir_time
Definition
iso9660.h:82
iso9660_dir_time::minute
uint8_t minute
Definition
iso9660.h:87
iso9660_dir_time::year
uint8_t year
Definition
iso9660.h:83
iso9660_dir_time::gmt_offset
int8_t gmt_offset
Definition
iso9660.h:89
iso9660_dir_time::day
uint8_t day
Definition
iso9660.h:85
iso9660_dir_time::second
uint8_t second
Definition
iso9660.h:88
iso9660_dir_time::hour
uint8_t hour
Definition
iso9660.h:86
iso9660_dir_time::month
uint8_t month
Definition
iso9660.h:84
iso9660_dir
Definition
iso9660.h:93
iso9660_dir::name_len
uint8_t name_len
Definition
iso9660.h:113
iso9660_dir::ext_attr_length
uint8_t ext_attr_length
Definition
iso9660.h:95
iso9660_dir::date
uint8_t date[7]
Definition
iso9660.h:103
iso9660_dir::extent_le
uint32_t extent_le
Definition
iso9660.h:97
iso9660_dir::interleave_gap
uint8_t interleave_gap
Definition
iso9660.h:108
iso9660_dir::volume_seq_be
uint16_t volume_seq_be
Definition
iso9660.h:111
iso9660_dir::volume_seq_le
uint16_t volume_seq_le
Definition
iso9660.h:110
iso9660_dir::length
uint8_t length
Definition
iso9660.h:94
iso9660_dir::file_unit_size
uint8_t file_unit_size
Definition
iso9660.h:107
iso9660_dir::size_be
uint32_t size_be
Definition
iso9660.h:101
iso9660_dir::extent_be
uint32_t extent_be
Definition
iso9660.h:98
iso9660_dir::flags
uint8_t flags
Definition
iso9660.h:105
iso9660_dir::size_le
uint32_t size_le
Definition
iso9660.h:100
iso9660_dir::name
char name[]
Definition
iso9660.h:115
iso9660_path_table_entry
Definition
iso9660.h:72
iso9660_path_table_entry::parent_dir_number
uint16_t parent_dir_number
Definition
iso9660.h:76
iso9660_path_table_entry::extent_location
uint32_t extent_location
Definition
iso9660.h:75
iso9660_path_table_entry::ext_attr_rec_len
uint8_t ext_attr_rec_len
Definition
iso9660.h:74
iso9660_path_table_entry::dir_id_len
uint8_t dir_id_len
Definition
iso9660.h:73
iso9660_pvd
Definition
iso9660.h:19
iso9660_pvd::effective_date
char effective_date[17]
Definition
iso9660.h:62
iso9660_pvd::reserved
uint8_t reserved[653]
Definition
iso9660.h:68
iso9660_pvd::volume_set_id
char volume_set_id[128]
Definition
iso9660.h:50
iso9660_pvd::abstract_file_id
char abstract_file_id[37]
Definition
iso9660.h:55
iso9660_pvd::version
uint8_t version
Definition
iso9660.h:22
iso9660_pvd::unused3
uint8_t unused3[32]
Definition
iso9660.h:32
iso9660_pvd::system_id
char system_id[32]
Definition
iso9660.h:25
iso9660_pvd::volume_space_size
both_u32 volume_space_size
Definition
iso9660.h:30
iso9660_pvd::type
uint8_t type
Definition
iso9660.h:20
iso9660_pvd::modification_date
char modification_date[17]
Definition
iso9660.h:60
iso9660_pvd::copyright_file_id
char copyright_file_id[37]
Definition
iso9660.h:54
iso9660_pvd::application_data
uint8_t application_data[512]
Definition
iso9660.h:67
iso9660_pvd::opt_m_path_table_loc
uint32_t opt_m_path_table_loc
Definition
iso9660.h:43
iso9660_pvd::application_id
char application_id[128]
Definition
iso9660.h:53
iso9660_pvd::volume_id
char volume_id[32]
Definition
iso9660.h:26
iso9660_pvd::volume_sequence_number
both_u16 volume_sequence_number
Definition
iso9660.h:35
iso9660_pvd::unused4
uint8_t unused4
Definition
iso9660.h:65
iso9660_pvd::logical_block_size
both_u16 logical_block_size
Definition
iso9660.h:36
iso9660_pvd::publisher_id
char publisher_id[128]
Definition
iso9660.h:51
iso9660_pvd::path_table_size
both_u32 path_table_size
Definition
iso9660.h:38
iso9660_pvd::m_path_table_loc
uint32_t m_path_table_loc
Definition
iso9660.h:42
iso9660_pvd::data_preparer_id
char data_preparer_id[128]
Definition
iso9660.h:52
iso9660_pvd::unused1
uint8_t unused1
Definition
iso9660.h:23
iso9660_pvd::bibliographic_file_id
char bibliographic_file_id[37]
Definition
iso9660.h:56
iso9660_pvd::file_structure_version
uint8_t file_structure_version
Definition
iso9660.h:64
iso9660_pvd::l_path_table_loc
uint32_t l_path_table_loc
Definition
iso9660.h:40
iso9660_pvd::creation_date
char creation_date[17]
Definition
iso9660.h:59
iso9660_pvd::unused2
uint8_t unused2[8]
Definition
iso9660.h:28
iso9660_pvd::volume_set_size
both_u16 volume_set_size
Definition
iso9660.h:34
iso9660_pvd::expiration_date
char expiration_date[17]
Definition
iso9660.h:61
iso9660_pvd::root_dir_record
uint8_t root_dir_record[34]
Definition
iso9660.h:48
iso9660_pvd::opt_l_path_table_loc
uint32_t opt_l_path_table_loc
Definition
iso9660.h:41
vnode
Definition
vnode.h:59
vops_file_t
Definition
vnode.h:28
vops_lnk_t
Definition
vnode.h:34
type.h
uint16_t
unsigned short uint16_t
Definition
type.h:13
uint32_t
unsigned int uint32_t
Definition
type.h:19
uint8_t
unsigned char uint8_t
Definition
type.h:7
int8_t
signed char int8_t
Definition
type.h:31
offset
uint32_t offset
Definition
virtio.h:6
vnode.h
path
kstring path
Definition
voxmo.h:7
kernel
libk
fs
iso9660.h
Generated on Sat May 30 2026 11:09:57 for Voxia OS by
1.13.2