aboutsummaryrefslogtreecommitdiff
path: root/src/messenger/gnunet-service-messenger_list_messages.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/messenger/gnunet-service-messenger_list_messages.c')
-rw-r--r--src/messenger/gnunet-service-messenger_list_messages.c75
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 @@
29void 29void
30init_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) 30init_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
38void 39void
39clear_list_messages (struct GNUNET_MESSENGER_ListMessages *messages) 40clear_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
55void 57void
56add_to_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, 58add_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
68void 72void
69copy_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, 73copy_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
80void 85void
81remove_from_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, 86remove_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
97void 103void
98load_list_messages (struct GNUNET_MESSENGER_ListMessages *messages, 104load_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
132void 140void
133save_list_messages (const struct GNUNET_MESSENGER_ListMessages *messages, 141save_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}