Go to the source code of this file.
◆ inode_allow_write()
| void inode_allow_write |
( |
struct inode * |
inode | ) |
|
303 {
307}
#define ASSERT(CONDITION)
Definition: debug.h:30
int deny_write_cnt
Definition: inode.c:35
int open_cnt
Definition: inode.c:33
◆ inode_close()
| void inode_close |
( |
struct inode * |
inode | ) |
|
150 {
151
153 return;
154
155
157
159
160
165 }
166
168 }
169}
void free_map_release(disk_sector_t sector, size_t cnt)
Definition: free-map.c:41
static size_t bytes_to_sectors(off_t size)
Definition: inode.c:25
struct list_elem * list_remove(struct list_elem *)
Definition: list.c:241
void free(void *)
Definition: malloc.c:202
#define NULL
Definition: stddef.h:4
off_t length
Definition: inode.c:17
disk_sector_t start
Definition: inode.c:16
struct list_elem elem
Definition: inode.c:31
struct inode_disk data
Definition: inode.c:36
disk_sector_t sector
Definition: inode.c:32
bool removed
Definition: inode.c:34
◆ inode_create()
68 {
70 bool success = false;
71
73
74
75
77
78 disk_inode =
calloc (1,
sizeof *disk_inode);
79 if (disk_inode !=
NULL) {
85 if (sectors > 0) {
87 size_t i;
88
89 for (i = 0; i < sectors; i++)
91 }
92 success = true;
93 }
95 }
96 return success;
97}
void disk_write(struct disk *d, disk_sector_t sec_no, const void *buffer)
Definition: disk.c:235
#define DISK_SECTOR_SIZE
Definition: disk.h:8
struct disk * filesys_disk
Definition: filesys.c:12
bool free_map_allocate(size_t cnt, disk_sector_t *sectorp)
Definition: free-map.c:26
#define INODE_MAGIC
Definition: inode.c:11
void * calloc(size_t, size_t) __attribute__((malloc))
Definition: malloc.c:149
unsigned magic
Definition: inode.c:18
◆ inode_deny_write()
| void inode_deny_write |
( |
struct inode * |
inode | ) |
|
◆ inode_get_inumber()
◆ inode_init()
58 {
60}
static struct list open_inodes
Definition: inode.c:54
void list_init(struct list *)
Definition: list.c:58
◆ inode_length()
◆ inode_open()
103 {
106
107
114 }
115 }
116
117
121
122
130}
void disk_read(struct disk *d, disk_sector_t sec_no, void *buffer)
Definition: disk.c:211
struct inode * inode_reopen(struct inode *inode)
Definition: inode.c:134
struct list_elem * list_begin(struct list *)
Definition: list.c:68
struct list_elem * list_next(struct list_elem *)
Definition: list.c:77
void list_push_front(struct list *, struct list_elem *)
Definition: list.c:195
struct list_elem * list_end(struct list *)
Definition: list.c:88
#define list_entry(LIST_ELEM, STRUCT, MEMBER)
Definition: list.h:103
void * malloc(size_t) __attribute__((malloc))
Definition: malloc.c:85
◆ inode_read_at()
183 {
185 off_t bytes_read = 0;
187
189
192
193
196 int min_left = inode_left < sector_left ? inode_left : sector_left;
197
198
199 int chunk_size =
size < min_left ?
size : min_left;
200 if (chunk_size <= 0)
201 break;
202
204
206 } else {
207
208
209 if (bounce ==
NULL) {
212 break;
213 }
215 memcpy (
buffer + bytes_read, bounce + sector_ofs, chunk_size);
216 }
217
218
220 offset += chunk_size;
221 bytes_read += chunk_size;
222 }
224
225 return bytes_read;
226}
uint32_t disk_sector_t
Definition: disk.h:12
off_t inode_length(const struct inode *inode)
Definition: inode.c:311
static disk_sector_t byte_to_sector(const struct inode *inode, off_t pos)
Definition: inode.c:44
uint16_t size
Definition: mmu.h:0
int32_t off_t
Definition: off_t.h:9
unsigned char uint8_t
Definition: stdint.h:20
void * memcpy(void *, const void *, size_t)
Definition: string.c:7
◆ inode_remove()
| void inode_remove |
( |
struct inode * |
inode | ) |
|
◆ inode_reopen()
| struct inode * inode_reopen |
( |
struct inode * |
inode | ) |
|
◆ inode_write_at()
235 {
237 off_t bytes_written = 0;
239
241 return 0;
242
244
247
248
251 int min_left = inode_left < sector_left ? inode_left : sector_left;
252
253
254 int chunk_size =
size < min_left ?
size : min_left;
255 if (chunk_size <= 0)
256 break;
257
259
261 } else {
262
263 if (bounce ==
NULL) {
266 break;
267 }
268
269
270
271
272 if (sector_ofs > 0 || chunk_size < sector_left)
274 else
276 memcpy (bounce + sector_ofs,
buffer + bytes_written, chunk_size);
278 }
279
280
282 offset += chunk_size;
283 bytes_written += chunk_size;
284 }
286
287 return bytes_written;
288}
void * memset(void *, int, size_t)
Definition: string.c:258