blob: cc66b4c07c7d6a0d6cb310afb588af4a62649b75 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
// driver for the read-only ramfs
// see makefs.c for details
#include <stdint.h>
#include "ramfs.h"
static int strcmp(char const *str1, char const *str2)
{
while (1)
{
int c1 = (unsigned char) *str1, c2 = (unsigned char) *str2;
if (!c1 && !c2)
return 0;
if (c1 != c2)
return c1 - c2;
str1++; str2++;
}
}
static uint32_t strlen(char const *str1)
{
uint32_t len = 0;
while (str1[len])
len++;
return len;
}
static inline char *align4(char *addr)
{
return (char*) (((uint32_t) addr - 1) & ~0b11) + 4;
}
int find_file(void *ramfs, char *filename, struct ramfile *buf)
{
char *fs_file = ramfs;
while (*fs_file)
{
uint32_t *fs_file_size = (uint32_t*)
align4(fs_file + strlen(fs_file) + 1);
char *fs_file_contents = (char*) (fs_file_size + 1);
if (!strcmp(fs_file, filename))
{
buf->file_size = *fs_file_size;
buf->file_name = fs_file;
buf->file_contents = fs_file_contents;
return 0;
}
// move to the next file in ramfs
fs_file = align4(fs_file_contents + *fs_file_size);
}
return -1; // reached end of ramfs; file not found
}
|