client: Do not leak buffer tree node on exit.
[paraslash.git] / aft.c
diff --git a/aft.c b/aft.c
index 9911b7fbadd7e3d58a25ceedd79ec0e1ce419f31..a27e67eeb7b438546573c254d76c4ed15cdf3750 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -7,7 +7,6 @@
 /** \file aft.c Audio file table functions. */
 
 #include <regex.h>
 /** \file aft.c Audio file table functions. */
 
 #include <regex.h>
-#include <dirent.h> /* readdir() */
 #include <sys/mman.h>
 #include <fnmatch.h>
 #include <sys/shm.h>
 #include <sys/mman.h>
 #include <fnmatch.h>
 #include <sys/shm.h>
@@ -19,7 +18,6 @@
 #include "string.h"
 #include "afh.h"
 #include "afs.h"
 #include "string.h"
 #include "afh.h"
 #include "afs.h"
-#include "net.h"
 #include "fd.h"
 #include "ipc.h"
 #include "portable_io.h"
 #include "fd.h"
 #include "ipc.h"
 #include "portable_io.h"
@@ -238,7 +236,7 @@ enum audio_file_table_columns {
  */
 static int aft_hash_compare(const struct osl_object *obj1, const struct osl_object *obj2)
 {
  */
 static int aft_hash_compare(const struct osl_object *obj1, const struct osl_object *obj2)
 {
-       return hash_compare((HASH_TYPE *)obj1->data, (HASH_TYPE *)obj2->data);
+       return hash_compare((unsigned char *)obj1->data, (unsigned char *)obj2->data);
 }
 
 static struct osl_column_description aft_cols[] = {
 }
 
 static struct osl_column_description aft_cols[] = {
@@ -485,7 +483,7 @@ int aft_get_row_of_path(const char *path, struct osl_row **row)
  *
  * \return Standard.
  */
  *
  * \return Standard.
  */
-static int aft_get_row_of_hash(HASH_TYPE *hash, struct osl_row **row)
+static int aft_get_row_of_hash(unsigned char *hash, struct osl_row **row)
 {
        const struct osl_object obj = {.data = hash, .size = HASH_SIZE};
        return osl(osl_get_row(audio_file_table, AFTCOL_HASH, &obj, row));
 {
        const struct osl_object obj = {.data = hash, .size = HASH_SIZE};
        return osl(osl_get_row(audio_file_table, AFTCOL_HASH, &obj, row));
@@ -605,7 +603,7 @@ static int get_hash_object_of_aft_row(const struct osl_row *row,
  * \return The return value of the underlying call to
  * get_hash_object_of_aft_row().
  */
  * \return The return value of the underlying call to
  * get_hash_object_of_aft_row().
  */
-static int get_hash_of_row(const struct osl_row *row, HASH_TYPE **hash)
+static int get_hash_of_row(const struct osl_row *row, unsigned char **hash)
 {
        struct osl_object obj;
        int ret = get_hash_object_of_aft_row(row, &obj);
 {
        struct osl_object obj;
        int ret = get_hash_object_of_aft_row(row, &obj);
@@ -724,7 +722,7 @@ static int get_local_time(uint64_t *seconds, char *buf, size_t size,
                } \
        }
 
                } \
        }
 
-static short unsigned get_duration_width(int seconds)
+__a_const static short unsigned get_duration_width(int seconds)
 {
        short unsigned width;
        unsigned hours = seconds / 3600, mins = (seconds % 3600) / 60;
 {
        short unsigned width;
        unsigned hours = seconds / 3600, mins = (seconds % 3600) / 60;
@@ -1026,7 +1024,7 @@ out:
 
 static int make_status_items(struct audio_file_data *afd,
                struct afs_info *afsi, char *path, long score,
 
 static int make_status_items(struct audio_file_data *afd,
                struct afs_info *afsi, char *path, long score,
-               HASH_TYPE *hash)
+               unsigned char *hash)
 {
        struct ls_data d = {
                .afhi = afd->afhi,
 {
        struct ls_data d = {
                .afhi = afd->afhi,
@@ -1079,7 +1077,7 @@ static int make_status_items(struct audio_file_data *afd,
 int open_and_update_audio_file(struct osl_row *aft_row, long score,
        struct audio_file_data *afd)
 {
 int open_and_update_audio_file(struct osl_row *aft_row, long score,
        struct audio_file_data *afd)
 {
-       HASH_TYPE *aft_hash, file_hash[HASH_SIZE];
+       unsigned char *aft_hash, file_hash[HASH_SIZE];
        struct osl_object afsi_obj;
        struct afs_info old_afsi, new_afsi;
        int ret = get_hash_of_row(aft_row, &aft_hash);
        struct osl_object afsi_obj;
        struct afs_info old_afsi, new_afsi;
        int ret = get_hash_of_row(aft_row, &aft_hash);
@@ -1526,7 +1524,7 @@ int audio_file_loop(void *private_data, osl_rbtree_loop_func *func)
                func));
 }
 
                func));
 }
 
-static struct osl_row *find_hash_sister(HASH_TYPE *hash)
+static struct osl_row *find_hash_sister(unsigned char *hash)
 {
        const struct osl_object obj = {.data = hash, .size = HASH_SIZE};
        struct osl_row *row;
 {
        const struct osl_object obj = {.data = hash, .size = HASH_SIZE};
        struct osl_row *row;
@@ -1558,7 +1556,7 @@ enum com_add_buffer_offsets {
  * It's OK to call this with afhi == NULL. In this case, the audio format
  * handler info won't be stored in the buffer.
  */
  * It's OK to call this with afhi == NULL. In this case, the audio format
  * handler info won't be stored in the buffer.
  */
-static void save_add_callback_buffer(HASH_TYPE *hash, const char *path,
+static void save_add_callback_buffer(unsigned char *hash, const char *path,
                struct afh_info *afhi, uint32_t flags,
                uint8_t audio_format_num, struct osl_object *obj)
 {
                struct afh_info *afhi, uint32_t flags,
                uint8_t audio_format_num, struct osl_object *obj)
 {
@@ -1661,7 +1659,7 @@ static void com_add_callback(int fd, const struct osl_object *query)
        struct osl_row *pb, *aft_row;
        struct osl_row *hs;
        struct osl_object objs[NUM_AFT_COLUMNS];
        struct osl_row *pb, *aft_row;
        struct osl_row *hs;
        struct osl_object objs[NUM_AFT_COLUMNS];
-       HASH_TYPE *hash;
+       unsigned char *hash;
        char asc[2 * HASH_SIZE + 1];
        int ret;
        char afsi_buf[AFSI_SIZE];
        char asc[2 * HASH_SIZE + 1];
        int ret;
        char afsi_buf[AFSI_SIZE];
@@ -1671,7 +1669,7 @@ static void com_add_callback(int fd, const struct osl_object *query)
                .max_size_handler = pass_buffer_as_shm, .private_data = &fd};
        uint16_t afhi_offset, chunks_offset;
 
                .max_size_handler = pass_buffer_as_shm, .private_data = &fd};
        uint16_t afhi_offset, chunks_offset;
 
-       hash = (HASH_TYPE *)buf + CAB_HASH_OFFSET;
+       hash = (unsigned char *)buf + CAB_HASH_OFFSET;
        hash_to_asc(hash, asc);;
        objs[AFTCOL_HASH].data = buf + CAB_HASH_OFFSET;
        objs[AFTCOL_HASH].size = HASH_SIZE;
        hash_to_asc(hash, asc);;
        objs[AFTCOL_HASH].data = buf + CAB_HASH_OFFSET;
        objs[AFTCOL_HASH].size = HASH_SIZE;
@@ -1736,7 +1734,7 @@ static void com_add_callback(int fd, const struct osl_object *query)
        objs[AFTCOL_CHUNKS].size = query->size - chunks_offset;
        if (pb && !hs) { /* update pb's hash */
                char old_asc[2 * HASH_SIZE + 1];
        objs[AFTCOL_CHUNKS].size = query->size - chunks_offset;
        if (pb && !hs) { /* update pb's hash */
                char old_asc[2 * HASH_SIZE + 1];
-               HASH_TYPE *old_hash;
+               unsigned char *old_hash;
                ret = get_hash_of_row(pb, &old_hash);
                if (ret < 0)
                        goto out;
                ret = get_hash_of_row(pb, &old_hash);
                if (ret < 0)
                        goto out;
@@ -1813,7 +1811,7 @@ static void path_brother_callback(int fd, const struct osl_object *query)
 
 static void hash_sister_callback(int fd, const struct osl_object *query)
 {
 
 static void hash_sister_callback(int fd, const struct osl_object *query)
 {
-       HASH_TYPE *hash = query->data;
+       unsigned char *hash = query->data;
        struct osl_row *hash_sister;
 
        hash_sister = find_hash_sister(hash);
        struct osl_row *hash_sister;
 
        hash_sister = find_hash_sister(hash);
@@ -1837,7 +1835,7 @@ static int add_one_audio_file(const char *path, void *private_data)
        struct afh_info afhi, *afhi_ptr = NULL;
        struct osl_row *pb = NULL, *hs = NULL; /* path brother/hash sister */
        struct osl_object map, obj = {.data = NULL}, query;
        struct afh_info afhi, *afhi_ptr = NULL;
        struct osl_row *pb = NULL, *hs = NULL; /* path brother/hash sister */
        struct osl_object map, obj = {.data = NULL}, query;
-       HASH_TYPE hash[HASH_SIZE];
+       unsigned char hash[HASH_SIZE];
 
        ret = guess_audio_format(path);
        if (ret < 0 && !(pad->flags & ADD_FLAG_ALL))
 
        ret = guess_audio_format(path);
        if (ret < 0 && !(pad->flags & ADD_FLAG_ALL))
@@ -2570,10 +2568,6 @@ static void aft_close(void)
 {
        osl_close_table(audio_file_table, OSL_MARK_CLEAN);
        audio_file_table = NULL;
 {
        osl_close_table(audio_file_table, OSL_MARK_CLEAN);
        audio_file_table = NULL;
-       free(status_items);
-       status_items = NULL;
-       free(parser_friendly_status_items);
-       parser_friendly_status_items = NULL;
 }
 
 /**
 }
 
 /**