diff options
Diffstat (limited to 'src/messenger/gnunet-service-messenger_list_messages.c')
-rw-r--r-- | src/messenger/gnunet-service-messenger_list_messages.c | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/src/messenger/gnunet-service-messenger_list_messages.c b/src/messenger/gnunet-service-messenger_list_messages.c index 5bab52806..063e1ebfc 100644 --- a/src/messenger/gnunet-service-messenger_list_messages.c +++ b/src/messenger/gnunet-service-messenger_list_messages.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | Copyright (C) 2020--2021 GNUnet e.V. | 3 | Copyright (C) 2020--2023 GNUnet e.V. |
4 | 4 | ||
5 | GNUnet is free software: you can redistribute it and/or modify it | 5 | GNUnet is free software: you can redistribute it and/or modify it |
6 | under the terms of the GNU Affero General Public License as published | 6 | under the terms of the GNU Affero General Public License as published |
@@ -29,47 +29,51 @@ | |||
29 | void | 29 | void |
30 | init_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) | 30 | init_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) |
31 | { | 31 | { |
32 | GNUNET_assert(messages); | 32 | GNUNET_assert (messages); |
33 | 33 | ||
34 | messages->head = NULL; | 34 | messages->head = NULL; |
35 | messages->tail = NULL; | 35 | messages->tail = NULL; |
36 | } | 36 | } |
37 | 37 | ||
38 | |||
38 | void | 39 | void |
39 | clear_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) | 40 | clear_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) |
40 | { | 41 | { |
41 | GNUNET_assert(messages); | 42 | GNUNET_assert (messages); |
42 | 43 | ||
43 | while (messages->head) | 44 | while (messages->head) |
44 | { | 45 | { |
45 | struct GNUNET_MESSENGER_ListMessage *element = messages->head; | 46 | struct GNUNET_MESSENGER_ListMessage *element = messages->head; |
46 | 47 | ||
47 | GNUNET_CONTAINER_DLL_remove(messages->head, messages->tail, element); | 48 | GNUNET_CONTAINER_DLL_remove (messages->head, messages->tail, element); |
48 | GNUNET_free(element); | 49 | GNUNET_free (element); |
49 | } | 50 | } |
50 | 51 | ||
51 | messages->head = NULL; | 52 | messages->head = NULL; |
52 | messages->tail = NULL; | 53 | messages->tail = NULL; |
53 | } | 54 | } |
54 | 55 | ||
56 | |||
55 | void | 57 | void |
56 | add_to_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, | 58 | add_to_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, |
57 | const struct GNUNET_HashCode *hash) | 59 | const struct GNUNET_HashCode *hash) |
58 | { | 60 | { |
59 | GNUNET_assert((messages) && (hash)); | 61 | GNUNET_assert ((messages) && (hash)); |
60 | 62 | ||
61 | struct GNUNET_MESSENGER_ListMessage *element = GNUNET_new(struct GNUNET_MESSENGER_ListMessage); | 63 | struct GNUNET_MESSENGER_ListMessage *element = GNUNET_new (struct |
64 | GNUNET_MESSENGER_ListMessage); | ||
62 | 65 | ||
63 | GNUNET_memcpy(&(element->hash), hash, sizeof(struct GNUNET_HashCode)); | 66 | GNUNET_memcpy (&(element->hash), hash, sizeof(struct GNUNET_HashCode)); |
64 | 67 | ||
65 | GNUNET_CONTAINER_DLL_insert_tail(messages->head, messages->tail, element); | 68 | GNUNET_CONTAINER_DLL_insert_tail (messages->head, messages->tail, element); |
66 | } | 69 | } |
67 | 70 | ||
71 | |||
68 | void | 72 | void |
69 | copy_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, | 73 | copy_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, |
70 | const struct GNUNET_MESSENGER_ListMessages *origin) | 74 | const struct GNUNET_MESSENGER_ListMessages *origin) |
71 | { | 75 | { |
72 | GNUNET_assert((messages) && (origin)); | 76 | GNUNET_assert ((messages) && (origin)); |
73 | 77 | ||
74 | struct GNUNET_MESSENGER_ListMessage *element; | 78 | struct GNUNET_MESSENGER_ListMessage *element; |
75 | 79 | ||
@@ -77,80 +81,85 @@ copy_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, | |||
77 | add_to_list_messages (messages, &(element->hash)); | 81 | add_to_list_messages (messages, &(element->hash)); |
78 | } | 82 | } |
79 | 83 | ||
84 | |||
80 | void | 85 | void |
81 | remove_from_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, | 86 | remove_from_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, |
82 | const struct GNUNET_HashCode *hash) | 87 | const struct GNUNET_HashCode *hash) |
83 | { | 88 | { |
84 | GNUNET_assert((messages) && (hash)); | 89 | GNUNET_assert ((messages) && (hash)); |
85 | 90 | ||
86 | struct GNUNET_MESSENGER_ListMessage *element; | 91 | struct GNUNET_MESSENGER_ListMessage *element; |
87 | 92 | ||
88 | for (element = messages->head; element; element = element->next) | 93 | for (element = messages->head; element; element = element->next) |
89 | if (0 == GNUNET_CRYPTO_hash_cmp (&(element->hash), hash)) | 94 | if (0 == GNUNET_CRYPTO_hash_cmp (&(element->hash), hash)) |
90 | { | 95 | { |
91 | GNUNET_CONTAINER_DLL_remove(messages->head, messages->tail, element); | 96 | GNUNET_CONTAINER_DLL_remove (messages->head, messages->tail, element); |
92 | GNUNET_free(element); | 97 | GNUNET_free (element); |
93 | break; | 98 | break; |
94 | } | 99 | } |
95 | } | 100 | } |
96 | 101 | ||
102 | |||
97 | void | 103 | void |
98 | load_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, | 104 | load_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, |
99 | const char *path) | 105 | const char *path) |
100 | { | 106 | { |
101 | GNUNET_assert((messages) && (path)); | 107 | GNUNET_assert ((messages) && (path)); |
102 | 108 | ||
103 | if (GNUNET_YES != GNUNET_DISK_file_test (path)) | 109 | if (GNUNET_YES != GNUNET_DISK_file_test (path)) |
104 | return; | 110 | return; |
105 | 111 | ||
106 | enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); | 112 | enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ |
113 | | GNUNET_DISK_PERM_USER_WRITE); | ||
107 | 114 | ||
108 | struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open( | 115 | struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open ( |
109 | path, GNUNET_DISK_OPEN_READ, permission | 116 | path, GNUNET_DISK_OPEN_READ, permission |
110 | ); | 117 | ); |
111 | 118 | ||
112 | if (!handle) | 119 | if (! handle) |
113 | return; | 120 | return; |
114 | 121 | ||
115 | GNUNET_DISK_file_seek(handle, 0, GNUNET_DISK_SEEK_SET); | 122 | GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET); |
116 | 123 | ||
117 | struct GNUNET_HashCode hash; | 124 | struct GNUNET_HashCode hash; |
118 | ssize_t len; | 125 | ssize_t len; |
119 | 126 | ||
120 | do { | 127 | do { |
121 | len = GNUNET_DISK_file_read(handle, &hash, sizeof(hash)); | 128 | len = GNUNET_DISK_file_read (handle, &hash, sizeof(hash)); |
122 | 129 | ||
123 | if (len != sizeof(hash)) | 130 | if (len != sizeof(hash)) |
124 | break; | 131 | break; |
125 | 132 | ||
126 | add_to_list_messages(messages, &hash); | 133 | add_to_list_messages (messages, &hash); |
127 | } while (len == sizeof(hash)); | 134 | } while (len == sizeof(hash)); |
128 | 135 | ||
129 | GNUNET_DISK_file_close(handle); | 136 | GNUNET_DISK_file_close (handle); |
130 | } | 137 | } |
131 | 138 | ||
139 | |||
132 | void | 140 | void |
133 | save_list_messages (const struct GNUNET_MESSENGER_ListMessages *messages, | 141 | save_list_messages (const struct GNUNET_MESSENGER_ListMessages *messages, |
134 | const char *path) | 142 | const char *path) |
135 | { | 143 | { |
136 | GNUNET_assert((messages) && (path)); | 144 | GNUNET_assert ((messages) && (path)); |
137 | 145 | ||
138 | enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); | 146 | enum GNUNET_DISK_AccessPermissions permission = (GNUNET_DISK_PERM_USER_READ |
147 | | GNUNET_DISK_PERM_USER_WRITE); | ||
139 | 148 | ||
140 | struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open( | 149 | struct GNUNET_DISK_FileHandle *handle = GNUNET_DISK_file_open ( |
141 | path, GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE, permission | 150 | path, GNUNET_DISK_OPEN_CREATE | GNUNET_DISK_OPEN_WRITE, permission |
142 | ); | 151 | ); |
143 | 152 | ||
144 | if (!handle) | 153 | if (! handle) |
145 | return; | 154 | return; |
146 | 155 | ||
147 | GNUNET_DISK_file_seek(handle, 0, GNUNET_DISK_SEEK_SET); | 156 | GNUNET_DISK_file_seek (handle, 0, GNUNET_DISK_SEEK_SET); |
148 | 157 | ||
149 | struct GNUNET_MESSENGER_ListMessage *element; | 158 | struct GNUNET_MESSENGER_ListMessage *element; |
150 | 159 | ||
151 | for (element = messages->head; element; element = element->next) | 160 | for (element = messages->head; element; element = element->next) |
152 | GNUNET_DISK_file_write(handle, &(element->hash), sizeof(element->hash)); | 161 | GNUNET_DISK_file_write (handle, &(element->hash), sizeof(element->hash)); |
153 | 162 | ||
154 | GNUNET_DISK_file_sync(handle); | 163 | GNUNET_DISK_file_sync (handle); |
155 | GNUNET_DISK_file_close(handle); | 164 | GNUNET_DISK_file_close (handle); |
156 | } | 165 | } |