diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h index 8ea3e82fbb321e50a1f17a144296a5949fb4f52c..452d46bb66de87a963e52de47934b0e08912540e 100644 --- a/inc/lektor/commands.h +++ b/inc/lektor/commands.h @@ -18,36 +18,36 @@ bool command_currentsong(struct lkt_state *srv, size_t c); bool command_status (struct lkt_state *srv, size_t c); /* Controlling playback */ -bool command_next (sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr); -bool command_pause (sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr); -bool command_previous(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr); -bool command_play (sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_stop (sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr); +bool command_next (volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr); +bool command_pause (volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr); +bool command_previous(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr); +bool command_play (volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_stop (volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr); -bool command_set_pos(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr, int index); +bool command_set_pos(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr, int index); /* The queue */ -bool command_add (sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_addid (sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_del (sqlite3 *db, struct lkt_win *win, char *pos_range, enum mpd_idle_flag *watch_mask_ptr); -bool command_delid (sqlite3 *db, struct lkt_win *win, char *id, enum mpd_idle_flag *watch_mask_ptr); -bool command_clear (sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr); -bool command_crop (sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr); -bool command_move (sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_shuffle(sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr); -bool command_playid (sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); +bool command_add (volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_addid (volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_del (volatile sqlite3 *db, struct lkt_win *win, char *pos_range, mpd_idle_flag *watch_mask_ptr); +bool command_delid (volatile sqlite3 *db, struct lkt_win *win, char *id, mpd_idle_flag *watch_mask_ptr); +bool command_clear (volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr); +bool command_crop (volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr); +bool command_move (volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_shuffle(volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr); +bool command_playid (volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); bool command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX]); bool command_queue_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], long continuation); /* The playlists */ -bool command_plt_create(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_remove(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_clear (sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_rename(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_export(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_import(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); -bool command_plt_add (sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr); +bool command_plt_create(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_remove(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_clear (volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_rename(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_export(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_import(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); +bool command_plt_add (volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr); /* The help */ bool command_help(struct lkt_state *srv, size_t c); @@ -82,8 +82,8 @@ enum lkt_playback_option { bool command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_option opt, char *args[LKT_MESSAGE_ARGS_MAX]); /* Authentificate users */ -bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); -bool command_user_add(struct lkt_state *srv, size_t c, sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]); +bool command_user_add(struct lkt_state *srv, size_t c, volatile sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]); /* Program management control */ bool command_restart(struct lkt_state *srv, size_t c); diff --git a/inc/lektor/common.h b/inc/lektor/common.h index 3495f2519ccaadb965b05807dab896e78c3056c5..ebb7faabb2356896afd2c17fd0c5f8a8b32745e5 100644 --- a/inc/lektor/common.h +++ b/inc/lektor/common.h @@ -36,7 +36,7 @@ #define LKT_MESSAGE_MAX 2048 #define LKT_DEFAULT_LIST_SIZE 10 -enum mpd_idle_flag { +typedef volatile enum { MPD_IDLE_NONE = 0, MPD_IDLE_DATABASE = ( 1 << 1 ), @@ -57,7 +57,7 @@ enum mpd_idle_flag { MPD_IDLE_PLAYLIST | MPD_IDLE_PLAYER | MPD_IDLE_MIXER | MPD_IDLE_OUTPUT | MPD_IDLE_OPTIONS | MPD_IDLE_PARTITION | MPD_IDLE_STICKER | MPD_IDLE_SUBSCRIPTION | MPD_IDLE_MESSAGE, -}; +} mpd_idle_flag; #define LKT_BACKLOG 32 #define COMMAND_LIST_MAX 64 diff --git a/inc/lektor/config.h b/inc/lektor/config.h index 618de57c06aacfaf1cb041d704032f1e7dbe7441..323e900ba5c80c9aebe43a449fed2052e33c7bdd 100644 --- a/inc/lektor/config.h +++ b/inc/lektor/config.h @@ -50,7 +50,7 @@ static const char *const lkt_default_config_file = /* It is just an alias to the consecutive use of config_detect_file and config_new function, with the return an '&&' between the two returns of the two other functions. */ -int config_open(sqlite3 *db); +int config_open(volatile sqlite3 *db); /* Get the path to the config file that may be red, taking into account the priority between existing files. The returned path is a path to an existing @@ -60,9 +60,9 @@ int config_detect_file(char *conf, size_t conf_len); /* Create and read the configuration in the conf file and write it into lkt_conf. The type is opaque because it's a C++ class. Return 0 if the read operation was a success, a non zero value otherwise. */ -int config_new(sqlite3 *db, const char *conf); +int config_new(volatile sqlite3 *db, const char *conf); /* Load a module by its name. Also initialize the mod pointer. No check on data type is done, it is up to the user to check if the structure passed as a `void*` is the right structure. */ -int load_module_by_name(sqlite3 *db, const char *name, void *mod); +int load_module_by_name(volatile sqlite3 *db, const char *name, void *mod); diff --git a/inc/lektor/database.h b/inc/lektor/database.h index f74e2a16332743df3e584b1da30aa229c5bad011..e1bffe157531612952a744378f9b7bff822c5604 100644 --- a/inc/lektor/database.h +++ b/inc/lektor/database.h @@ -23,61 +23,61 @@ struct lkt_queue_state { }; long database_get_timestamp(volatile sqlite3 *db); -void database_stamp(volatile sqlite3 *db); -void database_updated(volatile sqlite3 *db); +void database_stamp (volatile sqlite3 *db); +void database_updated (volatile sqlite3 *db); /* Open correctly a database for lektor. */ -bool database_new (sqlite3 **db); +bool database_new (volatile sqlite3 **db); bool database_init (const char *dbpath); -bool database_open (sqlite3 *db, const char *dbpath); -bool database_attach(sqlite3 *db, const char *name, const char *dbpath); -bool database_detach(sqlite3 *db, const char *name); +bool database_open (volatile sqlite3 *db, const char *dbpath); +bool database_attach(volatile sqlite3 *db, const char *name, const char *dbpath); +bool database_detach(volatile sqlite3 *db, const char *name); /* Get information on the queue and currently playing kara. */ -bool database_queue_state (sqlite3 *db, struct lkt_queue_state *res); -bool database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id); +bool database_queue_state (volatile sqlite3 *db, struct lkt_queue_state *res); +bool database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int *id); -bool database_queue_set_paused (sqlite3 *db, bool paused); -bool database_queue_set_current_index(sqlite3 *db, int idx); -bool database_queue_get_current_file (sqlite3 *db, char filepath[PATH_MAX]); +bool database_queue_set_paused (volatile sqlite3 *db, bool paused); +bool database_queue_set_current_index(volatile sqlite3 *db, int idx); +bool database_queue_get_current_file (volatile sqlite3 *db, char filepath[PATH_MAX]); /* Mpv and database synchronisation. */ -bool database_sync_mpv_state(sqlite3 *db, mpv_handle **mpv); +bool database_sync_mpv_state(volatile sqlite3 *db, mpv_handle **mpv); /* Update the database. */ -bool database_update(volatile sqlite3 *db, const char *kara_dir); -bool database_update_add(volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail); +bool database_update (volatile sqlite3 *db, const char *kara_dir); +bool database_update_add (volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail); bool database_update_set_available(volatile sqlite3 *db, uint64_t id); /* Control the content of the queue. */ -bool database_queue_add_id (sqlite3 *db, int id, int priority); -bool database_queue_add_query (sqlite3 *db, const char *query, int priority); -bool database_queue_add_author (sqlite3 *db, const char *author, int priority); -bool database_queue_add_language(sqlite3 *db, const char *author, int priority); -bool database_queue_add_category(sqlite3 *db, const char *author, int priority); -bool database_queue_add_type (sqlite3 *db, const char *author, int priority); -bool database_queue_add_plt (sqlite3 *db, const char *plt_name, int priority); - -bool database_queue_insert_query (sqlite3 *db, const char *query, int pos); -bool database_queue_insert_id (sqlite3 *db, int id); -bool database_queue_insert_author (sqlite3 *db, const char *author); -bool database_queue_insert_language(sqlite3 *db, const char *author); -bool database_queue_insert_category(sqlite3 *db, const char *author); -bool database_queue_insert_type (sqlite3 *db, const char *author); -bool database_queue_insert_plt (sqlite3 *db, const char *plt_name); - -bool database_queue_del_id (sqlite3 *db, int id); -bool database_queue_del_pos(sqlite3 *db, int pos); -bool database_queue_clear (sqlite3 *db); -bool database_queue_crop (sqlite3 *db); -bool database_queue_move (sqlite3 *db, int from, int to); -bool database_queue_shuffle(sqlite3 *db); -bool database_queue_seekid (sqlite3 *db, int id, int *out_pos); +bool database_queue_add_id (volatile sqlite3 *db, int id, int priority); +bool database_queue_add_query (volatile sqlite3 *db, const char *query, int priority); +bool database_queue_add_author (volatile sqlite3 *db, const char *author, int priority); +bool database_queue_add_language(volatile sqlite3 *db, const char *author, int priority); +bool database_queue_add_category(volatile sqlite3 *db, const char *author, int priority); +bool database_queue_add_type (volatile sqlite3 *db, const char *author, int priority); +bool database_queue_add_plt (volatile sqlite3 *db, const char *plt_name, int priority); + +bool database_queue_insert_query (volatile sqlite3 *db, const char *query, int pos); +bool database_queue_insert_id (volatile sqlite3 *db, int id); +bool database_queue_insert_author (volatile sqlite3 *db, const char *author); +bool database_queue_insert_language(volatile sqlite3 *db, const char *author); +bool database_queue_insert_category(volatile sqlite3 *db, const char *author); +bool database_queue_insert_type (volatile sqlite3 *db, const char *author); +bool database_queue_insert_plt (volatile sqlite3 *db, const char *plt_name); + +bool database_queue_del_id (volatile sqlite3 *db, int id); +bool database_queue_del_pos(volatile sqlite3 *db, int pos); +bool database_queue_clear (volatile sqlite3 *db); +bool database_queue_crop (volatile sqlite3 *db); +bool database_queue_move (volatile sqlite3 *db, int from, int to); +bool database_queue_shuffle(volatile sqlite3 *db); +bool database_queue_seekid (volatile sqlite3 *db, int id, int *out_pos); /* Control the playing state of the queue. */ -bool database_queue_toggle_pause(sqlite3 *db); -bool database_queue_play (sqlite3 *db, int pos); -bool database_queue_stop (sqlite3 *db); +bool database_queue_toggle_pause(volatile sqlite3 *db); +bool database_queue_play (volatile sqlite3 *db, int pos); +bool database_queue_stop (volatile sqlite3 *db); /* A search callback to be called after each matched row */ struct lkt_callback { @@ -88,11 +88,11 @@ struct lkt_callback { }; /* List the content of the queue */ -bool database_queue_list(sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback); +bool database_queue_list(volatile sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback); /* Search the database */ struct lkt_search { - sqlite3 *db; + volatile sqlite3 *db; sqlite3_stmt *stmt; enum lkt_search_type { lkt_search_database, @@ -109,24 +109,24 @@ struct lkt_search { typedef bool (*lkt_search_database_func)(struct lkt_state *srv, size_t c, int id, int id_len, const char *row); -bool database_search_database_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret); -bool database_search_queue_init (sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret); +bool database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret); +bool database_search_queue_init (volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret); bool database_search_iter(struct lkt_search *item); /* Next and prev operation on the queue. */ -bool database_queue_next(sqlite3 *db, char filepath[PATH_MAX]); -bool database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]); +bool database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]); +bool database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]); /* Set a value in the config table */ -bool database_config_set (sqlite3 *db, const char *section, const char *key, const char *value); -bool database_config_get_text(sqlite3 *db, const char *section, const char *key, char *value, size_t len); -bool database_config_get_int (sqlite3 *db, const char *section, const char *key, int *value); -bool database_config_exists (sqlite3 *db, const char *section, const char *key); -bool database_config_queue (sqlite3 *db, const char *option, int value); -bool database_config_queue_default(sqlite3 *db); +bool database_config_set (volatile sqlite3 *db, const char *section, const char *key, const char *value); +bool database_config_get_text(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len); +bool database_config_get_int (volatile sqlite3 *db, const char *section, const char *key, int *value); +bool database_config_exists (volatile sqlite3 *db, const char *section, const char *key); +bool database_config_queue (volatile sqlite3 *db, const char *option, int value); +bool database_config_queue_default(volatile sqlite3 *db); /* Get a value from the config table */ -bool database_get_config(sqlite3 *db, const char *option, int *value); +bool database_get_config(volatile sqlite3 *db, const char *option, int *value); /* Playlists */ struct lkt_playlist_metadata { @@ -136,20 +136,20 @@ struct lkt_playlist_metadata { }; /* Control playlists */ -bool database_plt_create (sqlite3 *db, const char *name); -bool database_plt_remove (sqlite3 *db, const char *name); -bool database_plt_remove_pos(sqlite3 *db, const char *name, int pos); -bool database_plt_clear (sqlite3 *db, const char *name); -bool database_plt_rename (sqlite3 *db, const char *old_name, const char *new_name); +bool database_plt_create (volatile sqlite3 *db, const char *name); +bool database_plt_remove (volatile sqlite3 *db, const char *name); +bool database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos); +bool database_plt_clear (volatile sqlite3 *db, const char *name); +bool database_plt_rename (volatile sqlite3 *db, const char *old_name, const char *new_name); -bool database_plt_export(sqlite3 *db, const char *name); -bool database_plt_import(sqlite3 *db, const char *name); +bool database_plt_export(volatile sqlite3 *db, const char *name); +bool database_plt_import(volatile sqlite3 *db, const char *name); -bool database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri *uri); +bool database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri); /* User control, yeah, MPD authentification sucks. */ -bool database_user_authentificate(sqlite3 *db, const char *password); -bool database_user_add(sqlite3 *db, const char *username, const char *password); +bool database_user_authentificate(volatile sqlite3 *db, const char *password); +bool database_user_add(volatile sqlite3 *db, const char *username, const char *password); /* Stickers manipulations. */ struct sticker_callback { @@ -160,9 +160,9 @@ struct sticker_callback { bool (*call)(void *args, const char *sticker, const char *type, int uri, int value); }; -bool database_sticker_create (sqlite3 *db, const char *name); -bool database_sticker_delete (sqlite3 *db, const char *name); -bool database_sticker_delete_specify(sqlite3 *sb, const char *type, int uri, const char *name); -bool database_sticker_list (sqlite3 *db, const char *type, struct sticker_callback *call); -bool database_sticker_set (sqlite3 *db, const char *type, const char *name, int uri, int value); -bool database_sticker_get (sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call); +bool database_sticker_create (volatile sqlite3 *db, const char *name); +bool database_sticker_delete (volatile sqlite3 *db, const char *name); +bool database_sticker_delete_specify(volatile sqlite3 *sb, const char *type, int uri, const char *name); +bool database_sticker_list (volatile sqlite3 *db, const char *type, struct sticker_callback *call); +bool database_sticker_set (volatile sqlite3 *db, const char *type, const char *name, int uri, int value); +bool database_sticker_get (volatile sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call); diff --git a/inc/lektor/module/module_sdl2.h b/inc/lektor/module/module_sdl2.h index 90eacc578aa4d769643c33c59e9eff5ff847fd22..5d63ef14c6be730455829b99d3ef23444b4317c2 100644 --- a/inc/lektor/module/module_sdl2.h +++ b/inc/lektor/module/module_sdl2.h @@ -24,4 +24,4 @@ bool module_sdl2_set_volume(struct lkt_win *const win, int vol); bool module_sdl2_get_duration(struct lkt_win *const win, int *dur_sec); bool module_sdl2_get_elapsed(struct lkt_win *const win, int *elapsed_sec); -bool module_sdl2_handle_events(struct lkt_win *const win, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events); +bool module_sdl2_handle_events(struct lkt_win *const win, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events); diff --git a/inc/lektor/module/module_x11.h b/inc/lektor/module/module_x11.h index 0ea84737be6fed8b92296da2d9dc3b46483ed552..8d4dcb57eadc33ad4c5cd071583d639fe6f66774 100644 --- a/inc/lektor/module/module_x11.h +++ b/inc/lektor/module/module_x11.h @@ -24,4 +24,4 @@ bool module_x11_set_volume(struct lkt_win *const win, int vol); bool module_x11_get_duration(struct lkt_win *const win, int *dur_sec); bool module_x11_get_elapsed(struct lkt_win *const win, int *elapsed_sec); -bool module_x11_handle_events(struct lkt_win *const win, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events); +bool module_x11_handle_events(struct lkt_win *const win, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events); diff --git a/inc/lektor/module/mpv.h b/inc/lektor/module/mpv.h index ce9c63e64d5ec03fc5fdb4ad9f00dcb3366b69de..a05fdaf900d5e2ad7a42de29dfaa929551fe7f87 100644 --- a/inc/lektor/module/mpv.h +++ b/inc/lektor/module/mpv.h @@ -3,6 +3,7 @@ #include <sqlite3.h> #include <mpv/client.h> #include <lektor/net.h> +#include <lektor/common.h> void lmpv_free(mpv_handle **ctx); mpv_handle *lmpv_new(unsigned long int wid); @@ -12,5 +13,5 @@ mpv_handle *lmpv_prepare(void); int lmpv_set_volume(mpv_handle *ctx, int vol); int lmpv_load_file(mpv_handle *ctx, const char *file); int lmpv_toggle_pause(mpv_handle *ctx); -int lmpv_handle(struct lkt_win *win, mpv_handle *ctx, sqlite3 *db, enum mpd_idle_flag *mpd_idle_flag, - int *time_pos, int *time_duration); +int lmpv_handle(struct lkt_win *win, mpv_handle *ctx, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_flag, + volatile int *time_pos, volatile int *time_duration); diff --git a/inc/lektor/net.h b/inc/lektor/net.h index f6a7f4afc8349ccb53c491ee70d69697a7ffbe8c..fa721922d37e843e5d50cb0c82554779421a5950 100644 --- a/inc/lektor/net.h +++ b/inc/lektor/net.h @@ -73,7 +73,7 @@ struct lkt_state { struct lkt_repo repo; - volatile enum mpd_idle_flag mpd_idle_events; + mpd_idle_flag mpd_idle_events; struct lkt_win win; }; @@ -89,7 +89,7 @@ void lkt_set_continuation(struct lkt_state *srv, size_t c, int i); /* Get the mask to watch for events for a given client, to be used with the `idle` command. * Return a pointer to the client's mask */ -enum mpd_idle_flag *lkt_client_get_mask(struct lkt_state *srv, size_t c); +mpd_idle_flag *lkt_client_get_mask(struct lkt_state *srv, size_t c); /* Register a client as authentificated. */ bool lkt_client_auth(struct lkt_state *srv, size_t c, bool set_auth); diff --git a/inc/lektor/window.h b/inc/lektor/window.h index 624c05c8284414c2f9b00e2c9ce570d7a9a4b281..ab5f43b8b7e453874f393558029a0a6eb60e69fd 100644 --- a/inc/lektor/window.h +++ b/inc/lektor/window.h @@ -30,7 +30,7 @@ struct lkt_win { bool (*get_elapsed)(struct lkt_win *win, int *elapsed_sec); /* Handle loop event */ - bool (*handle_events)(struct lkt_win *win, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events); + bool (*handle_events)(struct lkt_win *win, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events); }; enum lkt_win_type { diff --git a/src/commands.c b/src/commands.c index 890c26d318cdbf69c6e1600c1426c2baa6b67030..cc53c0c4a97f77739c24b2d270c2a7c276f1cf6b 100644 --- a/src/commands.c +++ b/src/commands.c @@ -94,7 +94,7 @@ command_currentsong(struct lkt_state *srv, size_t c) memset(&kara, 0, sizeof(struct kara_metadata)); - if (!database_queue_current_kara((sqlite3 *) srv->db, &kara, NULL)) + if (!database_queue_current_kara(srv->db, &kara, NULL)) LOG_ERROR_SCT("COMMAND", "%s", "Failed to get information about the current kara"); out = lkt_message_new(); @@ -124,8 +124,8 @@ command_status(struct lkt_state *srv, size_t c) RETURN_UNLESS(srv, "Invalid argument", false); win = &srv->win; - RETURN_UNLESS(database_queue_state((sqlite3 *) srv->db, &queue_state), "Can't determine playback status", false); - database_queue_current_kara((sqlite3 *) srv->db, NULL, &songid); + RETURN_UNLESS(database_queue_state(srv->db, &queue_state), "Can't determine playback status", false); + database_queue_current_kara(srv->db, NULL, &songid); win->get_elapsed(win, &elapsed); win->get_duration(win, &duration); @@ -154,7 +154,7 @@ command_status(struct lkt_state *srv, size_t c) } bool -command_next(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr) +command_next(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYER; char filepath[PATH_MAX]; @@ -162,14 +162,14 @@ command_next(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_pt } bool -command_pause(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr) +command_pause(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYER; return database_queue_toggle_pause(db) && win->toggle_pause(win); } bool -command_previous(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr) +command_previous(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYER; char filepath[PATH_MAX]; @@ -177,7 +177,7 @@ command_previous(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mas } static inline bool -__play_that_file(sqlite3 *db, struct lkt_win *win, int pos) +__play_that_file(volatile sqlite3 *db, struct lkt_win *win, int pos) { char filepath[PATH_MAX]; RETURN_UNLESS(pos, "Invalid argument", false); @@ -188,8 +188,7 @@ __play_that_file(sqlite3 *db, struct lkt_win *win, int pos) } bool -command_play(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], - enum mpd_idle_flag *watch_mask_ptr) +command_play(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYER; char *endptr; @@ -210,8 +209,7 @@ command_play(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], } bool -command_playid(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], - enum mpd_idle_flag *watch_mask_ptr) +command_playid(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYER; char *endptr; @@ -236,7 +234,7 @@ command_playid(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX bool -command_stop(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr) +command_stop(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(database_queue_stop(db), "DB error", false); win->close(win); @@ -245,8 +243,7 @@ command_stop(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_pt } bool -command_add(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], - enum mpd_idle_flag *watch_mask_ptr) +command_add(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args, "Invalid argument", false); *watch_mask_ptr |= MPD_IDLE_PLAYLIST; @@ -289,8 +286,7 @@ command_add(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], } bool -command_addid(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], - enum mpd_idle_flag *watch_mask_ptr) +command_addid(volatile sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { UNUSED(win); long id; @@ -309,21 +305,21 @@ command_addid(sqlite3 *db, struct lkt_win *win, char *args[LKT_MESSAGE_ARGS_MAX] } inline bool -command_clear(sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr) +command_clear(volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYLIST; return database_queue_clear(db); } inline bool -command_crop(sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr) +command_crop(volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr) { *watch_mask_ptr |= MPD_IDLE_PLAYLIST; return database_queue_crop(db); } bool -command_delid(sqlite3 *db, struct lkt_win *win, char *id_str, enum mpd_idle_flag *watch_mask_ptr) +command_delid(volatile sqlite3 *db, struct lkt_win *win, char *id_str, mpd_idle_flag *watch_mask_ptr) { UNUSED(win); long id; @@ -346,7 +342,7 @@ command_delid(sqlite3 *db, struct lkt_win *win, char *id_str, enum mpd_idle_flag } bool -command_move(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_move(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { long from, to; char *endptr; @@ -387,7 +383,7 @@ command_help(struct lkt_state *srv, size_t c) bool command_idle(struct lkt_state *srv, size_t c, struct lkt_command *cmd) { - enum mpd_idle_flag *clt_mask = lkt_client_get_mask(srv, c); + mpd_idle_flag *clt_mask = lkt_client_get_mask(srv, c); bool once = false; for (size_t i = 0; cmd->args[i]; ++i) { @@ -432,7 +428,7 @@ command_idle(struct lkt_state *srv, size_t c, struct lkt_command *cmd) inline bool command_noidle(struct lkt_state *srv, size_t c) { - enum mpd_idle_flag *clt_mask = lkt_client_get_mask(srv, c); + mpd_idle_flag *clt_mask = lkt_client_get_mask(srv, c); *clt_mask = MPD_IDLE_NONE; return true; } @@ -470,12 +466,12 @@ static bool lkt_callback_insert_v1(struct lkt_state *srv, size_t c, int id, int id_len, const char *sql_row) { UNUSED(sql_row, id_len, c); - return database_queue_add_id((sqlite3 *) srv->db, id, 5); + return database_queue_add_id(srv->db, id, 5); } static bool __find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], long continuation, - enum lkt_find_action action, bool(*init)(sqlite3 *, char *, char *, struct lkt_search *)) + enum lkt_find_action action, bool(*init)(volatile sqlite3 *, char *, char *, struct lkt_search *)) { char rgx[PATH_MAX], *col_name, *mpd_tag; int count; @@ -547,7 +543,7 @@ __find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], lo /* Make the search langand do the right action */ - RETURN_UNLESS(init((sqlite3 *) srv->db, col_name, rgx, &search), "Failed to init search", false); + RETURN_UNLESS(init(srv->db, col_name, rgx, &search), "Failed to init search", false); for (count = 0; database_search_iter(&search); ++count) continue; @@ -599,19 +595,19 @@ command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_o switch (opt) { case lkt_playback_option_random: - ret = database_config_queue((sqlite3 *) srv->db, "random", val); + ret = database_config_queue(srv->db, "random", val); break; case lkt_playback_option_single: - ret = database_config_queue((sqlite3 *) srv->db, "single", val); + ret = database_config_queue(srv->db, "single", val); break; case lkt_playback_option_consume: - ret = database_config_queue((sqlite3 *) srv->db, "consume", val); + ret = database_config_queue(srv->db, "consume", val); break; case lkt_playback_option_repeat: - ret = database_config_queue((sqlite3 *) srv->db, "repeat", val); + ret = database_config_queue(srv->db, "repeat", val); break; case lkt_playback_option_volume: - ret = database_config_queue((sqlite3 *) srv->db, "volume", val); + ret = database_config_queue(srv->db, "volume", val); LOG_INFO_SCT("COMMAND", "Set volume to %ld", val); ret &= win->set_volume(win, val); srv->mpd_idle_events |= MPD_IDLE_MIXER; @@ -628,17 +624,17 @@ command_set_playback_option(struct lkt_state *srv, size_t c, enum lkt_playback_o } bool -command_set_pos(sqlite3 *db, struct lkt_win *win, enum mpd_idle_flag *watch_mask_ptr, int index) +command_set_pos(volatile sqlite3 *db, struct lkt_win *win, mpd_idle_flag *watch_mask_ptr, int index) { char filepath[PATH_MAX]; *watch_mask_ptr |= MPD_IDLE_PLAYER; - RETURN_UNLESS(database_queue_set_current_index((sqlite3 *)db, index), "Failed to set position in queue", false); - RETURN_UNLESS(database_queue_get_current_file((sqlite3 *)db, filepath), "Failed to get filename", false); + RETURN_UNLESS(database_queue_set_current_index(db, index), "Failed to set position in queue", false); + RETURN_UNLESS(database_queue_get_current_file(db, filepath), "Failed to get filename", false); return win->load_file(win, filepath); } bool -command_plt_add(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_add(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0], "Invalid argument", false); @@ -671,7 +667,7 @@ end_plt_add_uri: } bool -command_plt_remove(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_remove(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { char *endptr; long pos; @@ -693,7 +689,7 @@ command_plt_remove(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_ } bool -command_plt_clear(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_clear(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0], "Invalid argument", false); RETURN_UNLESS(database_plt_clear(db, args[0]), "Failed to clear playlist", false); @@ -702,7 +698,7 @@ command_plt_clear(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_f } bool -command_plt_rename(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_rename(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false); RETURN_UNLESS(database_plt_rename(db, args[0], args[1]), "Failed to rename playlist", false); @@ -711,7 +707,7 @@ command_plt_rename(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_ } bool -command_plt_export(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_export(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false); RETURN_UNLESS(database_attach(db, args[0], args[1]), "Failed to attach database", false); @@ -723,7 +719,7 @@ command_plt_export(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_ } bool -command_plt_import(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_import(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false); RETURN_UNLESS(database_attach(db, args[0], args[1]), "Failed to attach database", false); @@ -735,7 +731,7 @@ command_plt_import(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_ } bool -command_plt_add_uri(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle_flag *watch_mask_ptr) +command_plt_add_uri(volatile sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(args && args[0] && args[1], "Invalid argument", false); struct lkt_uri uri; @@ -748,7 +744,7 @@ command_plt_add_uri(sqlite3 *db, char *args[LKT_MESSAGE_ARGS_MAX], enum mpd_idle } bool -command_shuffle(sqlite3 *db, enum mpd_idle_flag *watch_mask_ptr) +command_shuffle(volatile sqlite3 *db, mpd_idle_flag *watch_mask_ptr) { RETURN_UNLESS(database_queue_shuffle(db), "Failed to shuffle", false); *watch_mask_ptr |= MPD_IDLE_PLAYER; @@ -809,17 +805,17 @@ command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_ /* The command is used in its relative forme, display elements from the current one. */ only_one: - return database_queue_list((sqlite3 *) srv->db, from, from, &callback); + return database_queue_list(srv->db, from, from, &callback); /* The command is used with a range specifier. */ is_a_range: if (to - from + 1 < lkt_remaining_msg(srv, c) - 2) { lkt_set_continuation(srv, c, 0); - return database_queue_list((sqlite3 *) srv->db, from, to, &callback); + return database_queue_list(srv->db, from, to, &callback); } else { to = from + lkt_remaining_msg(srv, c) - 3; lkt_set_continuation(srv, c, to + 1); - return database_queue_list((sqlite3 *) srv->db, from, to, &callback); + return database_queue_list(srv->db, from, to, &callback); } } @@ -827,13 +823,13 @@ bool command_password(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(argv[0], "Invalid argument", false); - RETURN_UNLESS(database_user_authentificate((sqlite3 *) srv->db, argv[0]), "Failed to authentificate user", false); + RETURN_UNLESS(database_user_authentificate(srv->db, argv[0]), "Failed to authentificate user", false); lkt_client_auth(srv, c, true); return true; } bool -command_user_add(struct lkt_state *srv, size_t c, sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]) +command_user_add(struct lkt_state *srv, size_t c, volatile sqlite3 *db, char *argv[LKT_MESSAGE_ARGS_MAX]) { RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false); RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); @@ -933,7 +929,7 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS .c = c, .call = sticker_send_one_value, }; - RETURN_UNLESS(database_sticker_get((sqlite3 *) srv->db, argv[0], argv[2], uri, &cb), "Failed to get sticker", + RETURN_UNLESS(database_sticker_get(srv->db, argv[0], argv[2], uri, &cb), "Failed to get sticker", false); return true; } @@ -945,7 +941,7 @@ command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS RETURN_UNLESS(argv[0] && argv[1] && argv[2] && argv[3] && !argv[4], "Invalid argument", false); int uri = atoi(argv[1]); /* FIXME: Use strtol. */ int value = atoi(argv[4]); /* FIXME: Use strtol. */ - RETURN_UNLESS(database_sticker_set((sqlite3 *) srv->db, argv[0], argv[2], uri, value), "Failed to get sticker", false); + RETURN_UNLESS(database_sticker_set(srv->db, argv[0], argv[2], uri, value), "Failed to get sticker", false); srv->mpd_idle_events |= MPD_IDLE_STICKER; return true; } @@ -982,18 +978,18 @@ command_sticker_list(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARG just_list_all: callback.call = sticker_send_all; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); simple_list_command: callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.call = sticker_send_check_uri; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); list_stickers_in_uri: callback.uri = atoi(argv[1]); /* FIXME: Use strtol. */ callback.name = argv[2]; callback.call = sticker_send_value_check_uri_name; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); return false; list_stickers_check_value: @@ -1003,13 +999,13 @@ list_stickers_check_value: switch (argv[3][0]) { case '=': callback.call = sticker_check_is_present_eq; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); case '<': callback.call = sticker_check_is_present_lt; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); case '>': callback.call = sticker_check_is_present_gt; - return database_sticker_list((sqlite3 *) srv->db, argv[0], &callback); + return database_sticker_list(srv->db, argv[0], &callback); default: return 0; } @@ -1026,5 +1022,5 @@ command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_A RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false); int uri = atoi(argv[1]); srv->mpd_idle_events |= MPD_IDLE_STICKER; - return database_sticker_delete_specify((sqlite3 *) srv->db, argv[0], uri, argv[2]); + return database_sticker_delete_specify(srv->db, argv[0], uri, argv[2]); } diff --git a/src/config.c b/src/config.c index 7f1b3ada29f604d5212325d8e3343933aefe045b..e9348887180bb8790c50fc7664f06de2dd608e80 100644 --- a/src/config.c +++ b/src/config.c @@ -44,7 +44,7 @@ load_so(const char *const mod_path, const char *const mod_init, void *mod) } inline int -load_module_by_name(sqlite3 *db, const char *name, void *mod) +load_module_by_name(volatile sqlite3 *db, const char *name, void *mod) { char mod_path[PATH_MAX], mod_load[INI_MAX_LINE]; @@ -58,7 +58,7 @@ load_module_by_name(sqlite3 *db, const char *name, void *mod) } inline static int -validate_conf(sqlite3 *db) +validate_conf(volatile sqlite3 *db) { #define CHK_OPTION(section, name) \ if (!database_config_exists(db, section, name)) { \ @@ -164,9 +164,9 @@ found: } int -config_new(sqlite3 *db, const char *conf) +config_new(volatile sqlite3 *db, const char *conf) { - if (ini_parse(conf, handler, db)) { + if (ini_parse(conf, handler, (void *) db)) { LOG_ERROR("Failed to parse file %s", conf); return 1; } @@ -180,7 +180,7 @@ config_new(sqlite3 *db, const char *conf) } int -config_open(sqlite3 *db) +config_open(volatile sqlite3 *db) { char conf_file[PATH_MAX]; int ret = 1; diff --git a/src/database/config.c b/src/database/config.c index 60c59427d60ebee07a688a36882d9f37cfb6c279..c2802ffdc9ae32a7d2179d26c27013c3ebc11ab5 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -8,7 +8,7 @@ #include <string.h> bool -database_config_set(sqlite3 *db, const char *section, const char *key, const char *value) +database_config_set(volatile sqlite3 *db, const char *section, const char *key, const char *value) { static const char *SQL_STMT = "INSERT OR REPLACE INTO" @@ -26,7 +26,7 @@ database_config_set(sqlite3 *db, const char *section, const char *key, const cha code = sqlite3_step(stmt); if (code != SQLITE_OK && code != SQLITE_DONE) { - LOG_ERROR_SCT("DB", "Failed to insert or replace: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to insert or replace: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -37,7 +37,7 @@ error: } bool -database_config_get_text(sqlite3 *db, const char *section, const char *key, char *value, size_t len) +database_config_get_text(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len) { static const char *SQL_STMT = "SELECT value" @@ -62,7 +62,7 @@ error: } bool -database_config_exists(sqlite3 *db, const char *section, const char *key) +database_config_exists(volatile sqlite3 *db, const char *section, const char *key) { static const char *SQL_STMT = "SELECT value" @@ -83,7 +83,7 @@ error: } bool -database_config_get_int(sqlite3 *db, const char *section, const char *key, int *value) +database_config_get_int(volatile sqlite3 *db, const char *section, const char *key, int *value) { static const char *SQL_STMT = "SELECT CAST(value AS INTEGER)" @@ -106,7 +106,7 @@ error: } bool -database_config_queue(sqlite3 *db, const char *option, int value) +database_config_queue(volatile sqlite3 *db, const char *option, int value) { static const char *SQL_STMT_TMP = "UPDATE queue_state SET %s = ? WHERE id = 42;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; @@ -136,7 +136,7 @@ error: } bool -database_config_queue_default(sqlite3 *db) +database_config_queue_default(volatile sqlite3 *db) { static const char *SQL_DEFAULT = "UPDATE queue_state SET" @@ -155,7 +155,7 @@ error: } bool -database_get_config(sqlite3 *db, const char *option, int *value) +database_get_config(volatile sqlite3 *db, const char *option, int *value) { static const char *SQL_STMT_TMP = "SELECT %s FROM queue_state WHERE id = 42;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; diff --git a/src/database/find.c b/src/database/find.c index e801b631e548c0ed88c097fa3928b848e32cfbc7..ffc4b43706745737dbf21e8289763ac18fdae11c 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -8,7 +8,7 @@ #include <string.h> bool -database_search_database_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret) +database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); static const char *SQL_STMT_TEMPLATE = @@ -34,7 +34,7 @@ error: bool -database_search_queue_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret) +database_search_queue_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); static const char *SQL_STMT_TEMPLATE = @@ -89,7 +89,7 @@ database_search_iter(struct lkt_search *item) } error: - LOG_ERROR_SCT("DB", "sqlite3_step failed: %s", sqlite3_errmsg(item->db)); + LOG_ERROR_SCT("DB", "sqlite3_step failed: %s", sqlite3_errmsg((sqlite3 *) item->db)); error_or_done: sqlite3_finalize(item->stmt); return false; diff --git a/src/database/open.c b/src/database/open.c index 61414c90395852fbf6838cd4428b46f8a7428688..dfc470ee46d78c0fdea3151cc90342f8621e0862 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -54,7 +54,7 @@ is_sql_str_invalid(const char *str) } bool -database_new(sqlite3 **db) +database_new(volatile sqlite3 **db) { static int flags = SQLITE_OPEN_READWRITE | /* Open in RW mode */ SQLITE_OPEN_SHAREDCACHE | /* hHared cache for databases */ @@ -63,7 +63,7 @@ database_new(sqlite3 **db) RETURN_IF(SQLITE_OK != sqlite3_enable_shared_cache(1), "Failed to enable shared cache", false); RETURN_IF(sqlite3_soft_heap_limit64(HEAP_LIMIT_SOFT) < 0, "Failed to set soft heap limit", false); RETURN_IF(sqlite3_hard_heap_limit64(HEAP_LIMIT_HARD) < 0, "Failed to set soft heap limit", false); - RETURN_IF(SQLITE_OK != sqlite3_open_v2(":memory:", db, flags, NULL), "Failed to open :memory:", false); + RETURN_IF(SQLITE_OK != sqlite3_open_v2(":memory:", (sqlite3 **) db, flags, NULL), "Failed to open :memory:", false); SQLITE_EXEC(*db, SQL_MEM_SCHEM, err_not_init); return true; err_not_init: @@ -72,7 +72,7 @@ err_not_init: } static inline bool -__attach(sqlite3 *db, const char *name, const char *path) +__attach(volatile sqlite3 *db, const char *name, const char *path) { static const char SQL_ATTACH_TEMPLATE[] = "ATTACH '%s' AS '%s';"; char SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT]; @@ -88,7 +88,7 @@ err_no_attach: } static inline bool -__detach(sqlite3 *db, const char *name) +__detach(volatile sqlite3 *db, const char *name) { static const char SQL_DETACH_TEMPLATE[] = "DETACH '%s';\n"; char SQL_DETACH[LKT_MAX_SQLITE_STATEMENT]; @@ -104,7 +104,7 @@ err_no_detach: } static inline bool -__is_attached(sqlite3 *db, const char *name) +__is_attached(volatile sqlite3 *db, const char *name) { static const char *SQL_STMT = "SELECT name FROM pragma_database_list WHERE name = ?;\n"; sqlite3_stmt *stmt = 0; @@ -120,7 +120,7 @@ error: } bool -database_open(sqlite3 *db, const char *dbpath) +database_open(volatile sqlite3 *db, const char *dbpath) { if (is_sql_str_invalid(dbpath)) { LOG_ERROR("The database path '%s' is invalid", dbpath); @@ -130,7 +130,7 @@ database_open(sqlite3 *db, const char *dbpath) } bool -database_attach(sqlite3 *db, const char *name, const char *dbpath) +database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) { RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database "PROTECTED_DATABASE " is protected, can't attach a database with the same name", false); @@ -155,7 +155,7 @@ database_attach(sqlite3 *db, const char *name, const char *dbpath) } bool -database_detach(sqlite3 *db, const char *name) +database_detach(volatile sqlite3 *db, const char *name) { RETURN_UNLESS(strcasecmp(PROTECTED_DATABASE, name), " The database "PROTECTED_DATABASE " is protected, can't detach it", false); diff --git a/src/database/playlist.c b/src/database/playlist.c index 086f580bd911e19526e4bb4ad3b248e918995323..0dbb4ac59036762122a1fa11bf38f90e1b430624 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -11,7 +11,7 @@ extern int is_sql_str_invalid(const char *str); bool -database_plt_create(sqlite3 *db, const char *name) +database_plt_create(volatile sqlite3 *db, const char *name) { static const char *SQL_STMT = "INSERT INTO playlist (name, last_update) VALUES (?, strftime('%s', 'now'));"; @@ -27,7 +27,7 @@ error: } bool -database_plt_remove(sqlite3 *db, const char *name) +database_plt_remove(volatile sqlite3 *db, const char *name) { static const char *SQL_STMT = "DELETE FROM playlist WHERE name = ?;"; sqlite3_stmt *stmt = NULL; @@ -42,7 +42,7 @@ error: } bool -database_plt_remove_pos(sqlite3 *db, const char *name, int pos) +database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos) { static const char *SQL_STMT = "DELETE FROM kara_playlist " @@ -60,7 +60,7 @@ error: } bool -database_plt_clear(sqlite3 *db, const char *name) +database_plt_clear(volatile sqlite3 *db, const char *name) { static const char *SQL_STMT = "DELETE FROM kara_playlist WHERE playlist_id = (SELECT id FROM playlist WHERE name = ?);"; @@ -76,7 +76,7 @@ error: } bool -database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name) +database_plt_rename(volatile sqlite3 *db, const char *old_name, const char *new_name) { static const char *SQL_STMT = "UPDATE playlist SET name = ? WHERE name = ?;"; sqlite3_stmt *stmt = NULL; @@ -92,7 +92,7 @@ error: } bool -database_plt_export(sqlite3 *db, const char *name) +database_plt_export(volatile sqlite3 *db, const char *name) { static const char *SQL_SCHEM = "CREATE TABLE IF NOT EXISTS %s.content" @@ -115,7 +115,7 @@ database_plt_export(sqlite3 *db, const char *name) code = sqlite3_step(stmt); if (code != SQLITE_DONE && code != SQLITE_OK) { - LOG_ERROR_SCT("DB", "Failed to create schema: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to create schema: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -126,7 +126,7 @@ error: } bool -database_plt_import(sqlite3 *db, const char *name) +database_plt_import(volatile sqlite3 *db, const char *name) { static const char *SQL_SCHEM = "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" @@ -151,7 +151,7 @@ error: } bool -database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri *uri) +database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri) { static const char *SQL = "WITH plt_id(id) AS (SELECT playlist.id AS id FROM playlist WHERE name COLLATE nocase = ?) " diff --git a/src/database/queue.c b/src/database/queue.c index 341455f016c363839f23ba996643ef70a84ef045..7adbac37caf29a97d7c426ef2ca4af91bf2c7cc2 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -11,7 +11,7 @@ extern int is_sql_str_invalid(const char *); bool -database_queue_state(sqlite3 *db, struct lkt_queue_state *res) +database_queue_state(volatile sqlite3 *db, struct lkt_queue_state *res) { static const char *SQL_STMT = "SELECT" @@ -49,7 +49,7 @@ error: } bool -database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id) +database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int *id) { static const char *SQL_STMT = "SELECT song_name, source_name, category, language, author_name, song_type, song_number, kara_id" @@ -66,12 +66,12 @@ database_queue_current_kara(sqlite3 *db, struct kara_metadata *res, int *id) Most of the time it won't be NULL. */ if (!res) goto no_metadata; - strncpy(res->song_name, (const char *) sqlite3_column_text(stmt, 0), LEKTOR_TAG_MAX - 1); + strncpy(res->song_name, (const char *) sqlite3_column_text(stmt, 0), LEKTOR_TAG_MAX - 1); strncpy(res->source_name, (const char *) sqlite3_column_text(stmt, 1), LEKTOR_TAG_MAX - 1); - strncpy(res->category, (const char *) sqlite3_column_text(stmt, 2), LEKTOR_TAG_MAX - 1); - strncpy(res->language, (const char *) sqlite3_column_text(stmt, 3), LEKTOR_TAG_MAX - 1); + strncpy(res->category, (const char *) sqlite3_column_text(stmt, 2), LEKTOR_TAG_MAX - 1); + strncpy(res->language, (const char *) sqlite3_column_text(stmt, 3), LEKTOR_TAG_MAX - 1); strncpy(res->author_name, (const char *) sqlite3_column_text(stmt, 4), LEKTOR_TAG_MAX - 1); - strncpy(res->song_type, (const char *) sqlite3_column_text(stmt, 5), LEKTOR_TAG_MAX - 1); + strncpy(res->song_type, (const char *) sqlite3_column_text(stmt, 5), LEKTOR_TAG_MAX - 1); res->song_number = sqlite3_column_int(stmt, 6); no_metadata: /* Most of the time this will be NULL. */ @@ -85,7 +85,7 @@ error: } static bool -queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int priority) +queue_add_with_col_like_str(volatile sqlite3 *db, const char *col, const char *val, int priority) { RETURN_IF(is_sql_str_invalid(col), "Column name is invalid", false); @@ -112,7 +112,7 @@ error: } static bool -queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, int pos) +queue_insert_with_col_like_str(volatile sqlite3 *db, const char *col, const char *val, int pos) { RETURN_IF(is_sql_str_invalid(col), "Column name is invalid", false); @@ -156,7 +156,7 @@ error: } bool -database_queue_insert_query(sqlite3 *db, const char *query, int pos) +database_queue_insert_query(volatile sqlite3 *db, const char *query, int pos) { bool status = queue_insert_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, pos); LOG_INFO("%s '%s' at %d", status ? "Successfull add query" : "Failed add query", query, pos); @@ -164,7 +164,7 @@ database_queue_insert_query(sqlite3 *db, const char *query, int pos) } bool -database_queue_add_plt(sqlite3 *db, const char *plt_name, int priority) +database_queue_add_plt(volatile sqlite3 *db, const char *plt_name, int priority) { static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) " @@ -187,7 +187,7 @@ error: } bool -database_queue_add_query(sqlite3 *db, const char *query, int priority) +database_queue_add_query(volatile sqlite3 *db, const char *query, int priority) { bool status = queue_add_with_col_like_str(db, LKT_DATABASE_KARA_ALL, query, priority); LOG_INFO("%s '%s' with prio %d", status ? "Successfull add query" : "Failed add query", query, priority); @@ -195,7 +195,7 @@ database_queue_add_query(sqlite3 *db, const char *query, int priority) } bool -database_queue_add_author(sqlite3 *db, const char *author, int priority) +database_queue_add_author(volatile sqlite3 *db, const char *author, int priority) { bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KAUTHOR, author, priority); LOG_INFO("%s '%s'", status ? "Successfull add author" : "Failed add author", author); @@ -203,7 +203,7 @@ database_queue_add_author(sqlite3 *db, const char *author, int priority) } bool -database_queue_add_language(sqlite3 *db, const char *language, int priority) +database_queue_add_language(volatile sqlite3 *db, const char *language, int priority) { bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KLANG, language, priority); LOG_INFO("%s '%s'", status ? "Successfull add language" : "Failed add language", language); @@ -211,7 +211,7 @@ database_queue_add_language(sqlite3 *db, const char *language, int priority) } bool -database_queue_add_category(sqlite3 *db, const char *cat, int priority) +database_queue_add_category(volatile sqlite3 *db, const char *cat, int priority) { bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KCAT, cat, priority); LOG_INFO("%s '%s'", status ? "Successfull add category" : "Failed add category", cat); @@ -219,7 +219,7 @@ database_queue_add_category(sqlite3 *db, const char *cat, int priority) } bool -database_queue_add_type(sqlite3 *db, const char *type, int priority) +database_queue_add_type(volatile sqlite3 *db, const char *type, int priority) { bool status = queue_add_with_col_like_str(db, LKT_DATABASE_NAME_KTYPE, type, priority); LOG_INFO("%s '%s'", status ? "Successfull add type" : "Failed add type", type); @@ -227,7 +227,7 @@ database_queue_add_type(sqlite3 *db, const char *type, int priority) } bool -database_queue_add_id(sqlite3 *db, int id, int priority) +database_queue_add_id(volatile sqlite3 *db, int id, int priority) { static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) VALUES (?,?);"; bool status = false; @@ -243,7 +243,7 @@ error: } bool -database_queue_del_id(sqlite3 *db, int id) +database_queue_del_id(volatile sqlite3 *db, int id) { static const char *SQL_TEMPLATE = "BEGIN TRANSACTION;" @@ -264,7 +264,7 @@ error: } bool -database_queue_next(sqlite3 *db, char filepath[PATH_MAX]) +database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path, position, RANDOM()" @@ -305,7 +305,7 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX]) } else { - LOG_ERROR_SCT("DB", "Failed to fetch next kara: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to fetch next kara: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -317,7 +317,7 @@ error: } bool -database_queue_toggle_pause(sqlite3 *db) +database_queue_toggle_pause(volatile sqlite3 *db) { static const char *SQL_STMT = "UPDATE queue_state SET paused = 1 - paused"; SQLITE_EXEC(db, SQL_STMT, error); @@ -327,7 +327,7 @@ error: } bool -database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]) +database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path, position " @@ -365,7 +365,7 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]) } else { - LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -377,7 +377,7 @@ error: } bool -database_queue_clear(sqlite3 *db) +database_queue_clear(volatile sqlite3 *db) { static const char *SQL_STMT = "BEGIN TRANSACTION;" @@ -392,7 +392,7 @@ error: } bool -database_queue_crop(sqlite3 *db) +database_queue_crop(volatile sqlite3 *db) { static const char *SQL_STMT = "DELETE FROM queue WHERE queue.kara_id <> (SELECT current FROM queue_state LIMIT 1);"; @@ -403,7 +403,7 @@ error: } bool -database_queue_move(sqlite3 *db, int from, int to) +database_queue_move(volatile sqlite3 *db, int from, int to) { /* stmt arguments in order: * 1. to @@ -438,7 +438,7 @@ error: } bool -database_queue_play(sqlite3 *db, int pos) +database_queue_play(volatile sqlite3 *db, int pos) { static const char *SQL_STMT = "UPDATE queue_state SET current = ?, paused = 0" @@ -453,7 +453,7 @@ database_queue_play(sqlite3 *db, int pos) code = sqlite3_step(stmt); if (code != SQLITE_OK && code != SQLITE_DONE) { - LOG_ERROR_SCT("DB", "Failed to update queue_state: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to update queue_state: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -463,7 +463,7 @@ error: } bool -database_queue_stop(sqlite3 *db) +database_queue_stop(volatile sqlite3 *db) { static const char *SQL_STMT = "UPDATE queue_state SET current = NULL;"; SQLITE_EXEC(db, SQL_STMT, error); @@ -473,7 +473,7 @@ error: } bool -database_queue_set_current_index(sqlite3 *db, int idx) +database_queue_set_current_index(volatile sqlite3 *db, int idx) { static const char *SQL_GET_TEMPLATE = "UPDATE queue_state SET current = %d;"; char SQL_GET[LKT_MAX_SQLITE_STATEMENT]; @@ -493,7 +493,7 @@ error: } bool -database_queue_get_current_file(sqlite3 *db, char filepath[PATH_MAX]) +database_queue_get_current_file(volatile sqlite3 *db, char filepath[PATH_MAX]) { static const char *SQL_STMT = "SELECT file_path" @@ -514,7 +514,7 @@ database_queue_get_current_file(sqlite3 *db, char filepath[PATH_MAX]) strncpy(filepath, (const char *) sqlite3_column_text(stmt, 0), PATH_MAX); else { - LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg(db)); + LOG_ERROR_SCT("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *) db)); goto error; } @@ -525,7 +525,7 @@ error: } bool -database_queue_set_paused(sqlite3 *db, bool paused) +database_queue_set_paused(volatile sqlite3 *db, bool paused) { const char *SQL = paused ? "UPDATE queue_state SET paused = 1;" : "UPDATE queue_state SET paused = 0;"; SQLITE_EXEC(db, SQL, error); @@ -535,7 +535,7 @@ error: } bool -database_queue_shuffle(sqlite3 *db) +database_queue_shuffle(volatile sqlite3 *db) { const char *SQL = "BEGIN TRANSACTION;" @@ -591,7 +591,7 @@ error: } bool -database_queue_list(sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback) +database_queue_list(volatile sqlite3 *db, size_t from, size_t to, struct lkt_callback *callback) { const char *SQL_STMT = "WITH content AS (" @@ -640,7 +640,7 @@ error: } bool -database_queue_seekid(sqlite3 *db, int id, int *out_pos) +database_queue_seekid(volatile sqlite3 *db, int id, int *out_pos) { static const char *SQL_STMT = "SELECT position FROM queue_ WHERE kara_id = ? LIMIT 1"; int ret; diff --git a/src/database/stickers.c b/src/database/stickers.c index 1b4c023b00baf88ff10bbe0f93e4a7fd1332c435..e2fc96ee246307692c49f3f56c9c3f4c4c522ce3 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -8,7 +8,7 @@ #include <stdio.h> bool -database_sticker_create(sqlite3 *db, const char *name) +database_sticker_create(volatile sqlite3 *db, const char *name) { static const char *INSERT = "WITH id_max (id) AS (SELECT MAX(id) FROM 'stickers')" @@ -30,7 +30,7 @@ error: } bool -database_sticker_delete(sqlite3 *db, const char *name) +database_sticker_delete(volatile sqlite3 *db, const char *name) { static const char *INSERT = "DELETE FROM 'stickers' WHERE name = ?;"; sqlite3_stmt *stmt; @@ -46,7 +46,7 @@ error: } bool -database_sticker_list(sqlite3 *db, const char *type, struct sticker_callback *call) +database_sticker_list(volatile sqlite3 *db, const char *type, struct sticker_callback *call) { const char *SQL = NULL; int ret = false, uri, value; @@ -106,7 +106,7 @@ error: } bool -database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value) +database_sticker_set(volatile sqlite3 *db, const char *type, const char *name, int uri, int value) { const char *SQL = NULL; sqlite3_stmt *stmt; @@ -147,7 +147,7 @@ error: } bool -database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call) +database_sticker_get(volatile sqlite3 *db, const char *type, const char *name, int uri, struct sticker_callback *call) { const char *SQL = NULL; sqlite3_stmt *stmt; @@ -199,7 +199,7 @@ error: } bool -database_sticker_delete_specify(sqlite3 *db, const char *type, int uri, const char *name) +database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri, const char *name) { char SQL[LKT_MAX_SQLITE_STATEMENT]; sqlite3_stmt *stmt; diff --git a/src/database/user.c b/src/database/user.c index 11936d7492527e567ad371ad362987e18f093161..ab347f401611a764df89a91429c9ecd3cca6ba7b 100644 --- a/src/database/user.c +++ b/src/database/user.c @@ -5,7 +5,7 @@ #include <stdio.h> bool -database_user_authentificate(sqlite3 *db, const char *password) +database_user_authentificate(volatile sqlite3 *db, const char *password) { static const char *SQL_STMT = "SELECT username FROM users WHERE password = ?"; sqlite3_stmt *stmt = 0; @@ -21,7 +21,7 @@ error: } bool -database_user_add(sqlite3 *db, const char *username, const char *password) +database_user_add(volatile sqlite3 *db, const char *username, const char *password) { static const char *SQL_STMT = "INSERT INTO users (username, password) VALUES (?, ?)"; sqlite3_stmt *stmt = 0; diff --git a/src/main/lktadm.c b/src/main/lktadm.c index 352d21ed5ecb5a572a712216dec9d5b13264bc3f..84a2de4a56232a28e5539cbbafdbd489ba5ac3ee 100644 --- a/src/main/lktadm.c +++ b/src/main/lktadm.c @@ -41,7 +41,7 @@ static char kara_dir[PATH_MAX], db_path[PATH_MAX], mkvpropedit[PATH_MAX], sqlite void open_db(void) { - if (!database_new(&db)) + if (!database_new((volatile sqlite3 **) &db)) fail("Failed to init memory db"); if (config_open(db)) diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 2432ca9d591188348e67630ebf577fe0cb9b634a..bce1e3b6477a10186a90fa27d08bbe84a9bcdb8c 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -39,7 +39,7 @@ struct module_sdl2_window { /* Things from the server */ volatile sqlite3 *db; - volatile enum mpd_idle_flag *mpd_idle_events; + mpd_idle_flag *mpd_idle_events; }; /* Private functions. */ @@ -188,9 +188,8 @@ loop: } if (event.type == wakeup_on_mpv_events) - lmpv_handle((struct lkt_win *) win, (mpv_handle *) sdl2->mpv, (sqlite3 *) sdl2->db, - (enum mpd_idle_flag *) &sdl2->mpd_idle_events, (int *) &sdl2->mpv_time_pos, - (int *) &sdl2->mpv_duration); + lmpv_handle((struct lkt_win *) win, (mpv_handle *) sdl2->mpv, sdl2->db, + sdl2->mpd_idle_events, &sdl2->mpv_time_pos, &sdl2->mpv_duration); } if (redraw) { @@ -346,7 +345,7 @@ module_sdl2_attach(struct lkt_win *const win, void *server) } bool -module_sdl2_handle_events(struct lkt_win *const win, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events) +module_sdl2_handle_events(struct lkt_win *const win, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events) { UNUSED(win, db, mpd_idle_events); return true; diff --git a/src/module/module_x11.c b/src/module/module_x11.c index bec80557594f741c7df43ad4f07fa5230d75afec..8fd16618577280c9f22cdb50e4e6714c8702bebf 100644 --- a/src/module/module_x11.c +++ b/src/module/module_x11.c @@ -265,11 +265,10 @@ module_x11_get_elapsed(struct lkt_win *const win, int *elapsed_sec) } bool -module_x11_handle_events(struct lkt_win *const win, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events) +module_x11_handle_events(struct lkt_win *const win, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events) { RETURN_UNLESS(win && win->window, "Invalid arguments", false); struct module_x11_window *xwin = win->window; return lx11_handle(xwin) && - ! lmpv_handle(win, xwin->mpv, db, mpd_idle_events, (int *) &xwin->mpv_time_pos, - (int *) &xwin->mpv_duration); + ! lmpv_handle(win, xwin->mpv, db, mpd_idle_events, &xwin->mpv_time_pos, &xwin->mpv_duration); } diff --git a/src/module/mpv.c b/src/module/mpv.c index 735ba8d91509a97efeef61f41e4e9a62c0b9fc46..2fc401d0166cf1898fc1dd121d341fa5072e7956 100644 --- a/src/module/mpv.c +++ b/src/module/mpv.c @@ -126,8 +126,8 @@ lmpv_toggle_pause(mpv_handle *ctx) } int -lmpv_handle(struct lkt_win *win, mpv_handle *ctx, sqlite3 *db, enum mpd_idle_flag *mpd_idle_events, - int *time_pos, int *time_duration) +lmpv_handle(struct lkt_win *win, mpv_handle *ctx, volatile sqlite3 *db, mpd_idle_flag *mpd_idle_events, + volatile int *time_pos, volatile int *time_duration) { int ao_volume; struct lkt_queue_state state; diff --git a/src/net/listen.c b/src/net/listen.c index 690c1844c6111d77864a47a7a01d5fd648c59a14..35aa74ed7eef616239504b80e3e1788f73e9f021 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -41,7 +41,7 @@ struct lkt_client { size_t command_list_len; enum lkt_command_list_mode command_list_mode; - enum mpd_idle_flag mpd_idle_watch; + mpd_idle_flag mpd_idle_watch; bool request_close; bool authentificated; @@ -175,26 +175,25 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = 0; else if (!strcmp(cmd.name, "next")) - err = !command_next((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_next((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "pause")) - err = !command_pause((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_pause((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "previous")) - err = !command_previous((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_previous((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "play")) - err = ! command_play((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_play((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playid")) - err = ! command_playid((sqlite3 *) srv->db, &srv->win, cmd.args, - (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_playid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "stop")) - err = !command_stop((sqlite3 *) srv->db, &srv->win, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_stop((sqlite3 *) srv->db, &srv->win, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "clear")) - err = !command_clear((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_clear((sqlite3 *) srv->db, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "crop")) - err = !command_crop((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_crop((sqlite3 *) srv->db, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "moveid")) - err = !command_move((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_move((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "shuffle")) - err = !command_shuffle((sqlite3 *) srv->db, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_shuffle((sqlite3 *) srv->db, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlist") || !strcmp(cmd.name, "playlistinfo")) err = !command_queue_list(srv, c, cmd.args); @@ -216,27 +215,27 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) err = !command_help(srv, c); else if (!strcmp(cmd.name, "add")) - err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_add((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "addid")) - err = !command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = !command_addid((sqlite3 *) srv->db, &srv->win, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "deleteid")) err = ! (cmd.args[0] != NULL && - command_delid((sqlite3 *) srv->db, &srv->win, cmd.args[0], (enum mpd_idle_flag *) &srv->mpd_idle_events)); + command_delid((sqlite3 *) srv->db, &srv->win, cmd.args[0], &srv->mpd_idle_events)); else if (!strcmp(cmd.name, "playlistclear")) - err = ! command_plt_clear((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_clear((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "rename")) - err = ! command_plt_rename((sqlite3 * ) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_rename((sqlite3 * ) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlistdelete")) - err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "playlistadd")) - err = ! command_plt_add((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_add((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL) - err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_remove((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "save")) - err = ! command_plt_export((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_export((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "__import")) - err = ! command_plt_import((sqlite3 *) srv->db, cmd.args, (enum mpd_idle_flag *) &srv->mpd_idle_events); + err = ! command_plt_import((sqlite3 *) srv->db, cmd.args, &srv->mpd_idle_events); else if (!strcmp(cmd.name, "random")) err = !command_set_playback_option(srv, c, lkt_playback_option_random, cmd.args); @@ -611,7 +610,7 @@ handle_idle_events(struct lkt_state *srv) { struct lkt_client *current_client; struct lkt_message *msg; - enum mpd_idle_flag common_mask; + mpd_idle_flag common_mask; bool once = false; // No new events @@ -674,8 +673,9 @@ handle_idle_events(struct lkt_state *srv) return 0; } -enum mpd_idle_flag * -lkt_client_get_mask(struct lkt_state *srv, size_t c) { +mpd_idle_flag * +lkt_client_get_mask(struct lkt_state *srv, size_t c) +{ return &(srv->clients[c - 1].mpd_idle_watch); } @@ -702,26 +702,26 @@ lkt_listen(void) memset(&srv, 0, sizeof(struct lkt_state)); /* Initialize the system. */ - RETURN_UNLESS(database_new((sqlite3 **) &srv.db), "Failed to initialize the memory database", 1); + RETURN_UNLESS(database_new(&srv.db), "Failed to initialize the memory database", 1); RETURN_IF(config_detect_file(conf_file, PATH_MAX), "Failed to find a config file", 1); - RETURN_IF(config_new((sqlite3 *) srv.db, conf_file), "Failed to read configuration file", 1); + RETURN_IF(config_new(srv.db, conf_file), "Failed to read configuration file", 1); /* Finish to initialize. */ - RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2); - RETURN_UNLESS(database_open((sqlite3 *) srv.db, db_path), "Can't open database", 1); + RETURN_UNLESS(database_config_get_text(srv.db, "database", "db_path", db_path, PATH_MAX), "Cfg error", 2); + RETURN_UNLESS(database_open(srv.db, db_path), "Can't open database", 1); /* Read the configuration. */ - RETURN_UNLESS(database_config_get_int( (sqlite3 *) srv.db, "player", "autoclear", &autoclear), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "database", "kara_dir", kara_dir, PATH_MAX), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server", "host", host, HOST_NAME_MAX), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "server", "port", port, 5), "Cfg error", 2); - RETURN_UNLESS(database_config_get_text((sqlite3 *) srv.db, "player", "module", player_mod, INI_MAX_LINE), "Cfg error", 2); + RETURN_UNLESS(database_config_get_int (srv.db, "player", "autoclear", &autoclear), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text(srv.db, "database", "kara_dir", kara_dir, PATH_MAX), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text(srv.db, "server", "host", host, HOST_NAME_MAX), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text(srv.db, "server", "port", port, 5), "Cfg error", 2); + RETURN_UNLESS(database_config_get_text(srv.db, "player", "module", player_mod, INI_MAX_LINE), "Cfg error", 2); if (kara_dir[strlen(kara_dir) - 1] != '/') strncat(kara_dir, "/", PATH_MAX - 1); srv.kara_prefix = kara_dir; - database_config_queue_default((sqlite3 *) srv.db); + database_config_queue_default(srv.db); srv.fds_max = 16; srv.fds = calloc(srv.fds_max, sizeof(struct pollfd)); @@ -735,9 +735,9 @@ lkt_listen(void) srv.fds_len = 1; if (autoclear) - database_queue_clear((sqlite3 *) srv.db); + database_queue_clear(srv.db); - RETURN_UNLESS(load_module_by_name((sqlite3 *) srv.db, player_mod, &srv.win), "Can't load module", 3); + RETURN_UNLESS(load_module_by_name(srv.db, player_mod, &srv.win), "Can't load module", 3); RETURN_UNLESS(srv.win.new(&srv.win), "Can't create window", 3); srv.win.attach(&srv.win, &srv); RETURN_IF(repo_new(&srv.repo, "kurisu", "https://kurisu.iiens.net", srv.db), "Failed to create repo", 4); @@ -747,7 +747,7 @@ lkt_listen(void) break; if (handle_idle_events(&srv) < 0) break; - srv.win.handle_events(&srv.win, (sqlite3 *) srv.db, (enum mpd_idle_flag *) &srv.mpd_idle_events); + srv.win.handle_events(&srv.win, srv.db, &srv.mpd_idle_events); } srv.win.free(&srv.win);