ringfs
 All Data Structures Files Functions Variables Enumerations Enumerator Macros Groups Pages
ringfs.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2014 Kosma Moczek <kosma@cloudyourcar.com>
3  * This program is free software. It comes without any warranty, to the extent
4  * permitted by applicable law. You can redistribute it and/or modify it under
5  * the terms of the Do What The Fuck You Want To Public License, Version 2, as
6  * published by Sam Hocevar. See the COPYING file for more details.
7  */
8 
9 #ifndef RINGFS_H
10 #define RINGFS_H
11 
17 #include <stdint.h>
18 #include <unistd.h>
19 
24 {
34  int (*sector_erase)(int address);
42  ssize_t (*program)(int address, const void *data, size_t size);
50  ssize_t (*read)(int address, void *data, size_t size);
51 };
52 
54 struct ringfs_loc {
55  int sector;
56  int slot;
57 };
58 
63 struct ringfs {
64  /* Constant values, set once at ringfs_init(). */
66  uint32_t version;
68  /* Cached values. */
70 
71  /* Read/write pointers. Modified as needed. */
72  struct ringfs_loc read;
73  struct ringfs_loc write;
74  struct ringfs_loc cursor;
75 };
76 
88 int ringfs_init(struct ringfs *fs, const struct ringfs_flash_partition *flash, uint32_t version, int object_size);
89 
96 int ringfs_format(struct ringfs *fs);
97 
104 int ringfs_scan(struct ringfs *fs);
105 
112 int ringfs_capacity(struct ringfs *fs);
113 
121 int ringfs_count_estimate(struct ringfs *fs);
122 
130 int ringfs_count_exact(struct ringfs *fs);
131 
139 int ringfs_append(struct ringfs *fs, const void *object);
140 
148 int ringfs_fetch(struct ringfs *fs, void *object);
149 
156 int ringfs_discard(struct ringfs *fs);
157 
164 int ringfs_rewind(struct ringfs *fs);
165 
170 #endif
171 
172 /* vim: set ts=4 sw=4 et: */
int ringfs_count_exact(struct ringfs *fs)
Calculate exact object count.
Definition: ringfs.c:291
int sector_size
Sector size, in bytes.
Definition: ringfs.h:25
struct ringfs_loc write
Definition: ringfs.h:73
int sector_count
Partition size, in sectors.
Definition: ringfs.h:27
int ringfs_rewind(struct ringfs *fs)
Rewind the read cursor back to the oldest object.
Definition: ringfs.c:394
Flash memory+parition descriptor.
Definition: ringfs.h:23
int ringfs_discard(struct ringfs *fs)
Discard all fetched objects up to the read cursor.
Definition: ringfs.c:384
int object_size
Definition: ringfs.h:67
int ringfs_format(struct ringfs *fs)
Format the flash memory.
Definition: ringfs.c:153
int ringfs_append(struct ringfs *fs, const void *object)
Append an object at the end of the ring.
Definition: ringfs.c:310
ssize_t(* program)(int address, const void *data, size_t size)
Program flash memory bits by toggling them from 1 to 0.
Definition: ringfs.h:42
struct ringfs_loc cursor
Definition: ringfs.h:74
int slots_per_sector
Definition: ringfs.h:69
ssize_t(* read)(int address, void *data, size_t size)
Read flash memory.
Definition: ringfs.h:50
int ringfs_capacity(struct ringfs *fs)
Calculate maximum RingFS capacity.
Definition: ringfs.c:278
RingFS instance.
Definition: ringfs.h:63
uint32_t version
Definition: ringfs.h:66
int ringfs_scan(struct ringfs *fs)
Scan the flash memory for a valid filesystem.
Definition: ringfs.c:174
struct ringfs_loc read
Definition: ringfs.h:72
int sector_offset
Partition offset, in sectors.
Definition: ringfs.h:26
static const struct ringfs_flash_partition flash
Definition: tests.c:81
int ringfs_fetch(struct ringfs *fs, void *object)
Fetch next object from the ring, oldest-first.
Definition: ringfs.c:363
int ringfs_count_estimate(struct ringfs *fs)
Calculate approximate object count.
Definition: ringfs.c:283
int(* sector_erase)(int address)
Erase a sector.
Definition: ringfs.h:34
const struct ringfs_flash_partition * flash
Definition: ringfs.h:65
int ringfs_init(struct ringfs *fs, const struct ringfs_flash_partition *flash, uint32_t version, int object_size)
Initialize a RingFS instance.
Definition: ringfs.c:139