#endif
#include <errno.h>
-#include <sys/stat.h>
#include <sys/types.h>
-#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include "database.h"
-
typedef struct simple_data {
char *filename;
char *tmp_filename;
pa_hashmap *map;
- pa_bool_t read_only;
+ bool read_only;
} simple_data;
typedef struct entry {
pa_datum data;
void *d = NULL;
ssize_t l = 0;
- pa_bool_t append = FALSE;
+ bool append = false;
enum { FIELD_KEY = 0, FIELD_DATA } field = FIELD_KEY;
pa_assert(db);
case FIELD_DATA:
data.data = d;
data.size = l;
- append = TRUE;
+ append = true;
break;
}
e->data.data = data.data;
e->data.size = data.size;
pa_hashmap_put(db->map, &e->key, e);
- append = FALSE;
+ append = false;
field = FIELD_KEY;
}
}
return pa_hashmap_size(db->map);
}
-pa_database* pa_database_open(const char *fn, pa_bool_t for_write) {
+pa_database* pa_database_open(const char *fn, bool for_write) {
FILE *f;
char *path;
simple_data *db;
path = pa_sprintf_malloc("%s."CANONICAL_HOST".simple", fn);
errno = 0;
- f = fopen(path, "r");
+ f = pa_fopen_cloexec(path, "r");
if (f || errno == ENOENT) { /* file not found is ok */
db = pa_xnew0(simple_data, 1);
pa_assert(db);
pa_database_sync(database);
- pa_database_clear(database);
pa_xfree(db->filename);
pa_xfree(db->tmp_filename);
- pa_hashmap_free(db->map, NULL, NULL);
+ pa_hashmap_free(db->map, (pa_free_cb_t) free_entry);
pa_xfree(db);
}
return data;
}
-int pa_database_set(pa_database *database, const pa_datum *key, const pa_datum* data, pa_bool_t overwrite) {
+int pa_database_set(pa_database *database, const pa_datum *key, const pa_datum* data, bool overwrite) {
simple_data *db = (simple_data*)database;
entry *e;
int ret = 0;
r = pa_hashmap_remove(db->map, key);
pa_hashmap_put(db->map, &e->key, e);
} else {
- /* wont't overwrite, so clean new entry */
+ /* won't overwrite, so clean new entry */
r = e;
ret = -1;
}
int pa_database_clear(pa_database *database) {
simple_data *db = (simple_data*)database;
- entry *e;
pa_assert(db);
- while ((e = pa_hashmap_steal_first(db->map)))
- free_entry(e);
+ pa_hashmap_remove_all(db->map, (pa_free_cb_t) free_entry);
return 0;
}
entry *e;
entry *search;
void *state;
- pa_bool_t pick_now;
+ bool pick_now;
pa_assert(db);
pa_assert(next);
search = pa_hashmap_get(db->map, key);
state = NULL;
- pick_now = FALSE;
+ pick_now = false;
while ((e = pa_hashmap_iterate(db->map, &state, NULL))) {
if (pick_now)
break;
if (search == e)
- pick_now = TRUE;
+ pick_now = true;
}
if (!pick_now || !e)
errno = 0;
for (i = 0; i < 4; i++)
- values[i] = (num >> (i*8)) & 0xFF;
+ values[i] = (num >> (i*8)) & 0xFF;
items = fwrite(&values, sizeof(values), sizeof(uint8_t), f);
errno = 0;
- f = fopen(db->tmp_filename, "w");
+ f = pa_fopen_cloexec(db->tmp_filename, "w");
if (!f)
goto fail;