Line data Source code
1 : #include "clusterautoconfig.h"
2 :
3 : #include <inttypes.h>
4 : #include <unistd.h>
5 : #include <stdio.h>
6 : #include <stdint.h>
7 : #include <stdlib.h>
8 : #include <string.h>
9 : #include <errno.h>
10 :
11 : #include "fsck.h"
12 :
13 4 : void special_free(struct special_blocks *blist)
14 : {
15 : struct special_blocks *f;
16 :
17 4 : while(!osi_list_empty(&blist->list)) {
18 0 : f = osi_list_entry(blist->list.next, struct special_blocks,
19 : list);
20 0 : osi_list_del(&f->list);
21 0 : free(f);
22 : }
23 4 : }
24 :
25 4152432 : struct special_blocks *blockfind(struct special_blocks *blist, uint64_t num)
26 : {
27 4152432 : osi_list_t *head = &blist->list;
28 : osi_list_t *tmp;
29 : struct special_blocks *b;
30 :
31 4152432 : for (tmp = head->next; tmp != head; tmp = tmp->next) {
32 0 : b = osi_list_entry(tmp, struct special_blocks, list);
33 0 : if (b->block == num)
34 0 : return b;
35 : }
36 4152432 : return NULL;
37 : }
38 :
39 0 : static void special_add(struct special_blocks *blocklist, uint64_t block)
40 : {
41 : struct special_blocks *b;
42 :
43 0 : b = malloc(sizeof(struct special_blocks));
44 0 : if (b) {
45 0 : memset(b, 0, sizeof(*b));
46 0 : b->block = block;
47 0 : osi_list_add_prev(&b->list, &blocklist->list);
48 : }
49 0 : }
50 :
51 0 : void special_set(struct special_blocks *blocklist, uint64_t block)
52 : {
53 0 : if (blockfind(blocklist, block))
54 0 : return;
55 0 : special_add(blocklist, block);
56 : }
|