embox

Форк
0
/
fat_fops.c 
61 строка · 1.2 Кб
1
/**
2
 * @file
3
 *
4
 * @date Dec 12, 2019
5
 * @author Anton Bondarev
6
 */
7
#include <stddef.h>
8
#include <fcntl.h>
9

10
#include <fs/file_desc.h>
11
#include <fs/inode.h>
12
#include <fs/super_block.h>
13

14
#include "fat.h"
15

16
static size_t fat_read(struct file_desc *desc, void *buf, size_t size) {
17
	size_t rezult;
18
	uint32_t bytecount;
19
	struct fat_file_info *fi;
20

21
	fi = file_get_inode_data(desc);
22
	fi->pointer = file_get_pos(desc);
23

24
	rezult = fat_read_file(fi, fat_sector_buff, buf, &bytecount, size);
25
	if (DFS_OK == rezult) {
26
		return bytecount;
27
	}
28
	return 0;
29
}
30

31
static size_t fat_write(struct file_desc *desc, void *buf, size_t size) {
32
	size_t rezult;
33
	uint32_t bytecount;
34
	struct fat_file_info *fi;
35
	size_t new_sz;
36
	int old_pos = file_get_pos(desc);
37

38
	fi = file_get_inode_data(desc);
39
	fi->pointer = old_pos;
40
	new_sz = file_get_size(desc);
41
	fi->mode = O_RDWR; /* XXX */
42

43
	rezult = fat_write_file(fi, fat_sector_buff, (uint8_t *)buf,
44
			&bytecount, size, &new_sz);
45

46
	if (DFS_OK == rezult || DFS_EOF == rezult) {
47
		if (old_pos + bytecount > file_get_size(desc)) {
48
			file_set_size(desc, old_pos + bytecount);
49
			fi->filelen = old_pos + bytecount;
50
		}
51

52
		return bytecount;
53
	}
54

55
	return 0;
56
}
57

58
struct file_operations fat_fops = {
59
	.read = fat_read,
60
	.write = fat_write,
61
};
62

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

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

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

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