diff --git a/.clang-format b/.clang-format index 39f8e65703751e057f5e48f230ca727c006f1f4a..4fe88025ebe9447b117635031f2a7bfe5a7a89ed 100644 --- a/.clang-format +++ b/.clang-format @@ -1,148 +1,112 @@ --- -Language: Cpp -AccessModifierOffset: -4 -AlignAfterOpenBracket: Align -AlignConsecutiveMacros: true -AlignConsecutiveAssignments: true -AlignConsecutiveBitFields: true -AlignConsecutiveDeclarations: true -AlignEscapedNewlines: Right -AlignOperands: Align -AlignTrailingComments: true -AllowAllArgumentsOnNextLine: true -AllowAllConstructorInitializersOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortEnumsOnASingleLine: true -AllowShortBlocksOnASingleLine: Never -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: All -AllowShortLambdasOnASingleLine: All -AllowShortIfStatementsOnASingleLine: Never -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: MultiLine -BinPackArguments: true -BinPackParameters: true +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveBitFields: true +AlignConsecutiveDeclarations: false +AlignConsecutiveMacros: true +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: TopLevel +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true BraceWrapping: - AfterCaseLabel: false - AfterClass: false - AfterControlStatement: Never - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: false - BeforeLambdaBody: false - BeforeWhile: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach -BreakBeforeInheritanceComma: false -BreakInheritanceList: BeforeColon -BreakBeforeTernaryOperators: true + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon +BreakConstructorInitializers: BeforeComma BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: true +BreakStringLiterals: false +ColumnLimit: 120 +CompactNamespaces: true ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DeriveLineEnding: true -DerivePointerAlignment: false -DisableFormat: false +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: true +FixNamespaceComments: false +CommentPragmas: '^ KEEP pragma:' + ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeBlocks: Preserve + - 'for_each' + + IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - SortPriority: 0 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - SortPriority: 0 - - Regex: '.*' - Priority: 1 - SortPriority: 0 + - Regex: '.*' + Priority: 1 + IncludeIsMainRegex: '(Test)?$' -IncludeIsMainSourceRegex: '' -IndentCaseLabels: false -IndentCaseBlocks: false -IndentGotoLabels: true +IndentCaseLabels: false IndentPPDirectives: None -IndentExternBlock: AfterExternBlock -IndentWidth: 4 +IndentWidth: 4 IndentWrappedFunctionNames: false -InsertTrailingCommas: None -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBinPackProtocolList: Auto -ObjCBlockIndentWidth: 4 -ObjCBreakBeforeNestedBlockParam: true -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true -PenaltyBreakAssignment: 4 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyBreakTemplateDeclaration: 10 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Right -ReflowComments: true -SortIncludes: false -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true -SpaceBeforeParens: ControlStatements -SpaceBeforeRangeBasedForLoopColon: true -SpaceInEmptyBlock: false -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInConditionalStatement: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -SpaceBeforeSquareBrackets: false -Standard: Latest -StatementMacros: - - Q_UNUSED - - QT_REQUIRE_VERSION -TabWidth: 4 -UseCRLF: false -UseTab: Never +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None + +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Latest +TabWidth: 4 +UseTab: Never +UseCRLF: false + WhitespaceSensitiveMacros: - STRINGIZE - PP_STRINGIZE - BOOST_PP_STRINGIZE ... - diff --git a/src/base/bufferfd.c b/src/base/bufferfd.c index aa9c7a6ee93a524b03b4e318aca2ae726eab4c00..129942c5fe43328645071464b8c0929588988983 100644 --- a/src/base/bufferfd.c +++ b/src/base/bufferfd.c @@ -13,7 +13,7 @@ __fill(struct bufferfd *bf) if (n < 0) return -1; - bf->len = (size_t) n; + bf->len = (size_t)n; bf->pos = 0; } @@ -25,7 +25,7 @@ bufferfd_bytes(struct bufferfd *bf, size_t n, uint8_t *res) { ssize_t r = __fill(bf); /* TODO repeat until n is reached */ - if (r < (ssize_t) n) + if (r < (ssize_t)n) return -1; memcpy(res, bf->buffer + bf->pos, n); diff --git a/src/base/cmd.c b/src/base/cmd.c index 9e7d729c51476e68c1c79e1fac4999e0fe007a8b..aa8daadab76f03ba9dc9de0ebb9551ae2534ba4f 100644 --- a/src/base/cmd.c +++ b/src/base/cmd.c @@ -18,7 +18,7 @@ print_help(void) if (!executable_name) exit(EXIT_FAILURE); const char *const args[] = { LKT_MAN_BINARY, executable_name, NULL }; - execv(args[0], (char *const *) args); + execv(args[0], (char *const *)args); exit(EXIT_FAILURE); } @@ -26,16 +26,16 @@ noreturn void cmd_parse(struct cmd_opt *opts, int argc, const char **argv) { int count = 0, is_ok, offset = 0; - struct cmd_opt *it = opts; + struct cmd_opt *it = opts; cmd_callback call[2] = { NULL, NULL }; - if (argc == 0 || *argv == NULL || ! strcasecmp(argv[0], "help") || - ! strcasecmp(argv[0], "--help") || ! strcasecmp(argv[0], "-help")) + if (argc == 0 || *argv == NULL || !strcasecmp(argv[0], "help") || !strcasecmp(argv[0], "--help") || + !strcasecmp(argv[0], "-help")) goto help; /* Find the command */ while (it && it->name) { - is_ok = (! strncasecmp(argv[0], it->name, strlen(argv[0]))); + is_ok = (!strncasecmp(argv[0], it->name, strlen(argv[0]))); call[is_ok] = it->call; count += is_ok; it = opts + (++offset); @@ -50,7 +50,7 @@ cmd_parse(struct cmd_opt *opts, int argc, const char **argv) struct cmd_args arguments = { .argc = argc - 1, - .argv = (const char **) & (argv[1]), + .argv = (const char **)&(argv[1]), }; /* This call should exit. */ @@ -62,7 +62,7 @@ not_found: if (!it->name && it->call) { struct cmd_args arguments = { .argc = argc, - .argv = (const char **) argv, + .argv = (const char **)argv, }; it->call(&arguments); } @@ -74,7 +74,6 @@ help: print_help(); not_exclusive: - LOG_ERROR("COMMAND", "Failed to determine option, '%s' not exclusive", - argv[0]); + LOG_ERROR("COMMAND", "Failed to determine option, '%s' not exclusive", argv[0]); exit(EXIT_FAILURE); } diff --git a/src/base/commands.c b/src/base/commands.c index 9c4b799190a9307789d599ca0dad7b19404b0cf4..9ecef0681911d5a94da94e79a89ca0fcb938e557 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -41,8 +41,7 @@ command_restart(struct lkt_state *srv, size_t c, char UNUSED *__argv[LKT_MESSAGE env_set(LKT_ENV_CURRENT, pos); free(pos); } else - LOG_WARN("GENERAL", "Failed to malloc, don't set %s to %d", - LKT_ENV_CURRENT, sta.current); + LOG_WARN("GENERAL", "Failed to malloc, don't set %s to %d", LKT_ENV_CURRENT, sta.current); } else env_set(LKT_ENV_CURRENT, "NULL"); database_close_all(); @@ -51,7 +50,7 @@ command_restart(struct lkt_state *srv, size_t c, char UNUSED *__argv[LKT_MESSAGE free(srv->fds); free(srv->clients); - execv(executable_name, (char *const *) argv); + execv(executable_name, (char *const *)argv); LOG_ERROR("GENERAL", "Failed to exec lektor or OS not supported"); exit(EXIT_FAILURE); } @@ -62,7 +61,7 @@ command_update(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_AR RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); srv->mpd_idle_events |= MPD_IDLE_UPDATE; srv->mpd_idle_events |= MPD_IDLE_DATABASE; - return ! MOD_PROC(srv->repo_mod, "update"); + return !MOD_PROC(srv->repo_mod, "update"); } bool @@ -71,17 +70,16 @@ command_import(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_AR RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); srv->mpd_idle_events |= MPD_IDLE_UPDATE; srv->mpd_idle_events |= MPD_IDLE_DATABASE; - return ! MOD_PROC(srv->repo_mod, "import"); + return !MOD_PROC(srv->repo_mod, "import"); } bool -command_rescan(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX], - int UNUSED forced) +command_rescan(struct lkt_state *srv, size_t c, char UNUSED *argv[LKT_MESSAGE_ARGS_MAX], int UNUSED forced) { RETURN_UNLESS(lkt_client_auth(srv, c, false), "Failed to authentificate user", false); srv->mpd_idle_events |= MPD_IDLE_UPDATE; srv->mpd_idle_events |= MPD_IDLE_DATABASE; - return ! MOD_PROC(srv->repo_mod, "rescan"); + return !MOD_PROC(srv->repo_mod, "rescan"); } bool @@ -122,16 +120,16 @@ command_currentsong(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSA if (!database_queue_current_kara(srv->db, &kara, NULL)) LOG_ERROR("COMMAND", "Failed to get information about the current kara"); - out = lkt_message_new(); - idx = safe_snprintf(out->data, LKT_MESSAGE_MAX, + out = lkt_message_new(); + idx = safe_snprintf(out->data, LKT_MESSAGE_MAX, "Title: %s\n" "Author: %s\n" "Source: %s\n" "Type: %s%d\n" "Category: %s\n" "Language: %s\n", - kara.song_name, kara.author_name, kara.source_name, kara.song_type, - kara.song_number, kara.category, kara.language); + kara.song_name, kara.author_name, kara.source_name, kara.song_type, kara.song_number, + kara.category, kara.language); out->data_len = idx; lkt_state_send(srv, c, out); @@ -143,7 +141,7 @@ command_stats(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARG { struct lkt_message *out = lkt_message_new(); int artists = 0, albums = 0, songs = 0; - long ts_update = 0; + long ts_update = 0; database_get_update(srv->db, &ts_update, NULL, NULL); database_stats(srv->db, &artists, &albums, &songs); @@ -158,12 +156,11 @@ command_stats(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARG "__update_progress: %ld:%ld\n" "db_update: %ld\n" "uptime: %ld\n" - "artists: %d\n" /* Number of authors */ - "albums: %d\n" /* Number of source names */ - "songs: %d\n", /* Number of songs */ - srv->is_updating, srv->update_current, srv->update_total, - (uint64_t) ts_update, (uint64_t) (time(NULL) - srv->start_date), - artists, albums, songs); + "artists: %d\n" /* Number of authors */ + "albums: %d\n" /* Number of source names */ + "songs: %d\n", /* Number of songs */ + srv->is_updating, srv->update_current, srv->update_total, (uint64_t)ts_update, + (uint64_t)(time(NULL) - srv->start_date), artists, albums, songs); lkt_state_send(srv, c, out); return true; } @@ -180,31 +177,29 @@ command_status(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_AR RETURN_UNLESS(srv, "Invalid argument", false); RETURN_UNLESS(database_queue_state(srv->db, &queue_state), "Can't get playback status", false); database_queue_current_kara(srv->db, NULL, &songid); - MOD_CALL(srv->window_mod, "get_elapsed", &elapsed); + MOD_CALL(srv->window_mod, "get_elapsed", &elapsed); MOD_CALL(srv->window_mod, "get_duration", &duration); database_get_update(srv->db, NULL, &update_job, NULL); - out = lkt_message_new(); - play_state = queue_state.current <= 0 - ? "stop" - : (queue_state.paused ? "pause" : "play"); - out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, - "volume: %d\n" - "repeat: %d\n" - "random: %d\n" - "single: %d\n" - "consume: %d\n" - "state: %s\n" - "song: %d\n" - "playlistlength: %d\n" - "elapsed: %d\n" - "duration: %d\n" - "updating_db: %d\n" - "songid: %d\n", - queue_state.volume, queue_state.repeat, queue_state.random, - queue_state.single, queue_state.consume, play_state, - queue_state.current < 0 ? -1 : queue_state.current - 1, - queue_state.length, elapsed, duration, update_job, songid); + out = lkt_message_new(); + play_state = queue_state.current <= 0 ? "stop" : (queue_state.paused ? "pause" : "play"); + out->data_len = + safe_snprintf(out->data, LKT_MESSAGE_MAX, + "volume: %d\n" + "repeat: %d\n" + "random: %d\n" + "single: %d\n" + "consume: %d\n" + "state: %s\n" + "song: %d\n" + "playlistlength: %d\n" + "elapsed: %d\n" + "duration: %d\n" + "updating_db: %d\n" + "songid: %d\n", + queue_state.volume, queue_state.repeat, queue_state.random, queue_state.single, + queue_state.consume, play_state, queue_state.current < 0 ? -1 : queue_state.current - 1, + queue_state.length, elapsed, duration, update_job, songid); lkt_state_send(srv, c, out); return true; } @@ -232,11 +227,11 @@ bool command_pause(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) { /* The simple toggle version */ - if ((! args) || (args && ! args[0])) { + if ((!args) || (args && !args[0])) { toggle_anyway: srv->mpd_idle_events |= MPD_IDLE_PLAYER; RETURN_UNLESS(database_queue_toggle_pause(srv->db), "Failed to toggle pause in db", false); - return ! MOD_PROC(srv->window_mod, "toggle"); + return !MOD_PROC(srv->window_mod, "toggle"); } /* Set the 'pause' state */ @@ -258,10 +253,9 @@ command_pause(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) /* Set play/unpause or the pause */ else if (queue.paused != state) { - RETURN_UNLESS(database_queue_set_paused(srv->db, state), - "Oupsi, can't get queue state", false); + RETURN_UNLESS(database_queue_set_paused(srv->db, state), "Oupsi, can't get queue state", false); srv->mpd_idle_events |= MPD_IDLE_PLAYER; - return ! MOD_PROC(srv->window_mod, "toggle"); + return !MOD_PROC(srv->window_mod, "toggle"); } /* Nop */ @@ -359,7 +353,7 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) database_queue_stop(srv->db); srv->mpd_idle_events |= MPD_IDLE_PLAYER; RETURN_IF(MOD_CALL(srv->window_mod, "new", &srv->queue, srv->db), "Can't create window", false); - database_queue_seekid(srv->db, (int) id, &pos); + database_queue_seekid(srv->db, (int)id, &pos); /* Hooks */ if (__play_that_file(srv, pos)) { @@ -370,7 +364,6 @@ command_playid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) return false; } - bool command_stop(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX]) { @@ -401,18 +394,17 @@ command_addid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) RETURN_UNLESS(args, "Invalid argument", false); errno = 0; int i, id; - for (i = 0, id = strtol(args[i], NULL, 0); id != 0 && ! errno; ++i, id = strtol(args[i], NULL, 0)) + for (i = 0, id = strtol(args[i], NULL, 0); id != 0 && !errno; ++i, id = strtol(args[i], NULL, 0)) errno |= database_queue_add_id(srv->db, id, 1); srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; - return ! errno; + return !errno; } inline bool command_clear(struct lkt_state *srv, char UNUSED *args[LKT_MESSAGE_ARGS_MAX]) { srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; - return command_stop(srv, args) && - database_queue_clear(srv->db); + return command_stop(srv, args) && database_queue_clear(srv->db); } inline bool @@ -456,7 +448,7 @@ bool command_del(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) { struct lkt_queue_state queue = { .current = -2 /* Really need this field only */ }; - long pos = -1; + long pos = -1; char *endptr = NULL, err = 0; RETURN_UNLESS(args && args[0], "No position provided", false); @@ -465,8 +457,7 @@ command_del(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) database_queue_state(srv->db, &queue); /* At worst, -1 != -2 */ - RETURN_IF(pos == (long) queue.current && !__skip_current(srv), - "Failed to skip current kara", false); + RETURN_IF(pos == (long)queue.current && !__skip_current(srv), "Failed to skip current kara", false); srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; return database_queue_del_pos(srv->db, pos); @@ -484,7 +475,7 @@ command_delid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) RETURN_IF(err, "STRTOL failed", false); database_queue_current_kara(srv->db, NULL, &uri); - RETURN_IF(id == (long) uri && !__skip_current(srv), "Failed to skip current kara", false); + RETURN_IF(id == (long)uri && !__skip_current(srv), "Failed to skip current kara", false); srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; return database_queue_del_id(srv->db, id); @@ -518,9 +509,7 @@ __swap_positions(struct lkt_state *srv, int from, int to) struct lkt_queue_state queue = { .current = -1 }; database_queue_state(srv->db, &queue); - int new_current = (((long) queue.current) == to) ? from - : (((long) queue.current) == from) ? to - : -1; + int new_current = (((long)queue.current) == to) ? from : (((long)queue.current) == from) ? to : -1; srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; bool sta = database_queue_swap(srv->db, from, to); @@ -569,7 +558,7 @@ bool command_help(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX]) { struct lkt_message *out; - out = lkt_message_new(); + out = lkt_message_new(); out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "HELP\n"); lkt_state_send(srv, c, out); return true; @@ -629,11 +618,10 @@ command_noidle(struct lkt_state *srv, size_t c) bool lkt_callback_send_row_v1(void *_args, int pos_len, int pos, int id, int id_len, const char *sql_row) { - struct lkt_callback *args = (struct lkt_callback *) _args; + struct lkt_callback *args = (struct lkt_callback *)_args; struct lkt_message *out; - out = lkt_message_new(); - out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "%*d: %*d %s\n", - pos_len, pos, id_len, id, sql_row); + out = lkt_message_new(); + out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "%*d: %*d %s\n", pos_len, pos, id_len, id, sql_row); lkt_state_send(args->srv, args->c, out); return true; } @@ -642,7 +630,7 @@ bool lkt_callback_send_row_v2(struct lkt_state *srv, size_t c, int id, int id_len, const char *sql_row) { struct lkt_message *out = lkt_message_new(); - out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "%*d %s\n", id_len, id, sql_row); + out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "%*d %s\n", id_len, id, sql_row); lkt_state_send(srv, c, out); return true; } @@ -662,8 +650,8 @@ command_findid(struct lkt_state *srv, size_t c, char *id_str) { double duration; struct kara_metadata kara = {}; - char filepath[PATH_MAX] = {0}; - long id = strtol(id_str, NULL, 0); /* XXX: Must be valid here */ + char filepath[PATH_MAX] = { 0 }; + long id = strtol(id_str, NULL, 0); /* XXX: Must be valid here */ if (!database_kara_by_id(srv->db, id, &kara, filepath)) { LOG_ERROR("COMMAND", "Can't get a kara with id %ld", id); return false; @@ -672,13 +660,13 @@ command_findid(struct lkt_state *srv, size_t c, char *id_str) LOG_WARN("COMMAND", "Can't get duration of kara %ld", id); duration = 0.; } - int s = duration * 10e-10; - int h = s / 3600; - s = s % 3600; - int m = s / 60; - s = s % 60; + int s = duration * 10e-10; + int h = s / 3600; + s = s % 3600; + int m = s / 60; + s = s % 60; struct lkt_message *out = lkt_message_new(); - out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, + out->data_len = safe_snprintf(out->data, LKT_MESSAGE_MAX, "Title: %s\n" "Author: %s\n" "Source: %s\n" @@ -686,10 +674,8 @@ command_findid(struct lkt_state *srv, size_t c, char *id_str) "Category: %s\n" "Language: %s\n" "Duration: %d:%02d:%02d\n", - kara.song_name, kara.author_name, - kara.source_name, kara.song_type, - kara.song_number, kara.category, - kara.language, h, m, s); + kara.song_name, kara.author_name, kara.source_name, kara.song_type, kara.song_number, + kara.category, kara.language, h, m, s); lkt_state_send(srv, c, out); return true; } @@ -709,19 +695,19 @@ __iter_search(struct lkt_search *search) } bool -command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], - long continuation, bool(*init)(volatile sqlite3 *, struct lkt_search *)) +command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], long continuation, + bool (*init)(volatile sqlite3 *, struct lkt_search *)) { int count; struct lkt_search search = { - .srv = srv, - .c = c, + .srv = srv, + .c = c, .continuation = continuation, /* Reserve slots for OK/ACK and continue: */ .msg_count = lkt_remaining_msg(srv, c) - 3, - .call = (void(*)(void)) lkt_callback_send_row_v2, - .ka_uri = {0}, - .plt_name = args[0], /* In case of playlist searchs */ + .call = (void (*)(void))lkt_callback_send_row_v2, + .ka_uri = { 0 }, + .plt_name = args[0], /* In case of playlist searchs */ }; RETURN_UNLESS(args[0], "Invalid argument", false); @@ -733,10 +719,11 @@ command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], /* With an URI */ if (!lkt_uri_from(&search.ka_uri, args)) { /* Try from idx 1, in case of playlust searches */ - LOG_DEBUG("COMMAND", "URI may not starts at idx 0, may be because " - "of playlist search. At idx 0, value was '%s'", args[0]); - RETURN_UNLESS(lkt_uri_from(&search.ka_uri, &args[1]), - "Failed to create the uri", false); + LOG_DEBUG("COMMAND", + "URI may not starts at idx 0, may be because " + "of playlist search. At idx 0, value was '%s'", + args[0]); + RETURN_UNLESS(lkt_uri_from(&search.ka_uri, &args[1]), "Failed to create the uri", false); } RETURN_UNLESS(init(srv->db, &search), "Failed to init search", false); @@ -744,15 +731,14 @@ command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], } bool -command_plt_list(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX], - int cont) +command_plt_list(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ARGS_MAX], int cont) { struct lkt_search search = { .srv = srv, .c = c, .continuation = cont, .msg_count = lkt_remaining_msg(srv, c) - 3, /* Slots for OK/ACK and continuation */ - .call = (void(*)(void)) lkt_callback_send_list_plts, + .call = (void (*)(void))lkt_callback_send_list_plts, }; RETURN_UNLESS(database_search_listplaylist_init(srv->db, &search), "Failed to init search", false); @@ -760,15 +746,14 @@ command_plt_list(struct lkt_state *srv, size_t c, char UNUSED *args[LKT_MESSAGE_ } bool -command_plt_ctx(struct lkt_state *srv, size_t c, - char *args[LKT_MESSAGE_ARGS_MAX], int cont) +command_plt_ctx(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], int cont) { struct lkt_search search = { .srv = srv, .c = c, .continuation = cont, .msg_count = lkt_remaining_msg(srv, c) - 3, - .call = (void(*)(void)) lkt_callback_send_row_v2, + .call = (void (*)(void))lkt_callback_send_row_v2, .plt_name = args[0], .ka_uri = { .type = uri_null }, }; @@ -814,7 +799,7 @@ command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, enum lkt_pla case lkt_playback_option_volume: ret = database_config_queue(srv->db, "volume", val); LOG_INFO("COMMAND", "Set volume to %ld", val); - ret &= ! MOD_CALL(srv->window_mod, "set_volume", val); + ret &= !MOD_CALL(srv->window_mod, "set_volume", val); srv->mpd_idle_events |= MPD_IDLE_MIXER; break; case lkt_playback_option_none: @@ -825,7 +810,7 @@ command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, enum lkt_pla if (ret) srv->mpd_idle_events |= MPD_IDLE_OPTIONS; - return ! ret; + return !ret; } bool @@ -833,11 +818,9 @@ command_set_pos(struct lkt_state *srv, int index) { char filepath[PATH_MAX]; srv->mpd_idle_events |= MPD_IDLE_PLAYLIST; - RETURN_UNLESS(database_queue_set_current_index(srv->db, index), - "Failed to set position in queue", false); - RETURN_UNLESS(database_queue_get_current_file(srv->db, filepath), - "Failed to get filename", false); - return ! MOD_CALL(srv->window_mod, "load", filepath); + RETURN_UNLESS(database_queue_set_current_index(srv->db, index), "Failed to set position in queue", false); + RETURN_UNLESS(database_queue_get_current_file(srv->db, filepath), "Failed to get filename", false); + return !MOD_CALL(srv->window_mod, "load", filepath); } bool @@ -855,7 +838,7 @@ command_seek(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) RETURN_UNLESS(command_set_pos(srv, pos), "Failed to get to the right file", false); srv->mpd_idle_events |= MPD_IDLE_PLAYER; - return ! MOD_CALL(srv->window_mod, "set_position", seconds); + return !MOD_CALL(srv->window_mod, "set_position", seconds); } bool @@ -871,12 +854,11 @@ command_seekid(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) STRTOL(seconds, args[1], endptr, err_flag); RETURN_IF(err_flag, "Failed to get a number!", false); - RETURN_UNLESS(database_get_kara_position(srv->db, id, &position), - "Can't find kara in queue", false); + RETURN_UNLESS(database_get_kara_position(srv->db, id, &position), "Can't find kara in queue", false); srv->mpd_idle_events |= MPD_IDLE_PLAYER; RETURN_UNLESS(command_set_pos(srv, position), "Failed to set position to right kara", false); - return ! MOD_CALL(srv->window_mod, "set_position", seconds); + return !MOD_CALL(srv->window_mod, "set_position", seconds); } bool @@ -890,7 +872,7 @@ command_seekcur(struct lkt_state *srv, char *args[LKT_MESSAGE_ARGS_MAX]) RETURN_IF(err_flag, "Failed to get a number!", false); srv->mpd_idle_events |= MPD_IDLE_PLAYER; - return ! MOD_CALL(srv->window_mod, "set_position", seconds); + return !MOD_CALL(srv->window_mod, "set_position", seconds); } bool @@ -1012,8 +994,7 @@ command_queue_listid(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARG { RETURN_UNLESS(args && args[0], "Invalid arguments", false); long id = strtol(args[0], NULL, 0); - return database_queue_probe_id(srv->db, id) && - command_findid(srv, c, args[0]); + return database_queue_probe_id(srv->db, id) && command_findid(srv, c, args[0]); } bool @@ -1024,8 +1005,8 @@ command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_ char *endptr, err, *str; struct lkt_callback callback = { .call = lkt_callback_send_row_v1, - .srv = srv, - .c = c, + .srv = srv, + .c = c, }; RETURN_UNLESS(args && args[0] && strlen(args[0]), "Invalid argument", false); @@ -1049,8 +1030,8 @@ command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_ if (to < from) { tmp_switch = to; - to = from; - from = tmp_switch; + to = from; + from = tmp_switch; LOG_INFO("COMMAND", "Switch range values wrong order, now %d:%d", from, to); } @@ -1099,11 +1080,10 @@ command_user_add(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MA /* Stickers */ static bool -sticker_send(struct lkt_state *srv, size_t c, char *name, char UNUSED *type, - int id, int value) +sticker_send(struct lkt_state *srv, size_t c, char *name, char UNUSED *type, int id, int value) { struct lkt_message *msg = lkt_message_new(); - msg->data_len = safe_snprintf(msg->data, LKT_MESSAGE_ARGS_MAX, "%d: %s -> %d\n", id, name, value); + msg->data_len = safe_snprintf(msg->data, LKT_MESSAGE_ARGS_MAX, "%d: %s -> %d\n", id, name, value); lkt_state_send(srv, c, msg); return true; } @@ -1131,8 +1111,7 @@ command_sticker_set(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS STRTOL(value, argv[3], endptr, err2); RETURN_IF(err1 || err2, "STRTOL failed", false); LOG_INFO("COMMAND", "Client %ld is using the sticker set command", c); - RETURN_UNLESS(database_sticker_set(srv->db, argv[0], argv[2], uri, value), - "Can't get sticker", false); + RETURN_UNLESS(database_sticker_set(srv->db, argv[0], argv[2], uri, value), "Can't get sticker", false); srv->mpd_idle_events |= MPD_IDLE_STICKER; return true; } @@ -1142,9 +1121,9 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS { LOG_INFO("COMMAND", "Client %ld is using the sticker get command", c); struct lkt_search callback = { - .srv = srv, - .c = c, - .call = (void(*)(void)) sticker_send, + .srv = srv, + .c = c, + .call = (void (*)(void))sticker_send, .st_type = argv[0], }; @@ -1156,8 +1135,7 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS } /* list {type} {uri} {name} command */ - else if (argv[0] != NULL && argv[1] != NULL && - argv[2] != NULL && argv[3] == NULL) { + else if (argv[0] != NULL && argv[1] != NULL && argv[2] != NULL && argv[3] == NULL) { callback.st_name = argv[2]; callback.st_uri = atoi(argv[1]); if (!database_search_sticker_init(srv->db, &callback)) @@ -1165,9 +1143,8 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS } /* list {type} {uri} {name} `op` {value} command */ - else if (argv[0] != NULL && argv[1] != NULL && - argv[2] != NULL && argv[3] != NULL && - argv[4] != NULL && argv[5] == NULL) { + else if (argv[0] != NULL && argv[1] != NULL && argv[2] != NULL && argv[3] != NULL && argv[4] != NULL && + argv[5] == NULL) { callback.st_name = argv[2]; callback.st_uri = atoi(argv[1]); callback.st_op = argv[3][0]; @@ -1177,7 +1154,7 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS } /* Just list all stickers */ - else if ( (argv[0] != NULL && argv[1] == NULL) || argv[0] == NULL ) { + else if ((argv[0] != NULL && argv[1] == NULL) || argv[0] == NULL) { if (!database_search_sticker_init(srv->db, &callback)) return false; } diff --git a/src/base/common.c b/src/base/common.c index db6664bb78f1d4d469f1b562780ad61b9d9c31db..128f2e3a8009c7dae94ba228f4c60f065f4d65c5 100644 --- a/src/base/common.c +++ b/src/base/common.c @@ -17,8 +17,8 @@ void __lkt_abort(void) { LOG_ERROR("ABORT", "Got aborted, I will provoque a segv to try to display the backtrace..."); - int *segv = (int *) - 1; - *segv = 1; + int *segv = (int *)-1; + *segv = 1; } /* Assert function */ @@ -42,7 +42,7 @@ CONSTRUCTOR_FUNCTION static void __set_assert(void) { const char *no_assert = getenv(LKT_ENV_SET_ASSERT); - __lkt_assert = (NULL == no_assert || strlen(no_assert) == 0) ? __yes_assert : __no_assert; + __lkt_assert = (NULL == no_assert || strlen(no_assert) == 0) ? __yes_assert : __no_assert; } /* Log functions */ @@ -50,13 +50,13 @@ __set_assert(void) enum log_level __log_level = __LAST_UNUSED_LOG_LEVEL; /* All by default */ void -__lkt_log(enum log_level level, const char *section, const char *func, const char *file, - uint64_t line_number, const char *format, ...) +__lkt_log(enum log_level level, const char *section, const char *func, const char *file, uint64_t line_number, + const char *format, ...) { char line[LKT_MESSAGE_MAX]; va_list ap; int hour = 0, min = 0, sec = 0; - time_t rawtime = time(NULL); + time_t rawtime = time(NULL); struct tm *timeval = localtime(&rawtime); if (timeval != NULL) { hour = timeval->tm_hour; @@ -74,10 +74,8 @@ __lkt_log(enum log_level level, const char *section, const char *func, const cha return; char c_level = level == ERROR ? '!' : level == WARN ? '*' : level == INFO ? '.' : ' '; - ssize_t count = safe_snprintf(line, LKT_MESSAGE_MAX, - " %c [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", - c_level, hour, min, sec, section, func, file, - line_number, format); + ssize_t count = safe_snprintf(line, LKT_MESSAGE_MAX, " %c [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", c_level, hour, + min, sec, section, func, file, line_number, format); /* Check for overflow */ if (count >= LKT_MESSAGE_MAX - 1) { line[LKT_MESSAGE_MAX - 1] = '\0'; @@ -119,7 +117,7 @@ be_uint64_t(const uint8_t bytes[], size_t n) { uint64_t res = 0; for (size_t i = 0; i < n; i++) { -#if defined (LKT_ENDIANES_LITTLE) && (LKT_ENDIANES_LITTLE == 1) +#if defined(LKT_ENDIANES_LITTLE) && (LKT_ENDIANES_LITTLE == 1) res = (res << 8u) | bytes[i]; #else /* BIG_ENDIAN */ res = res | (bytes[i] << 8u); @@ -144,7 +142,7 @@ be_uint32_t(const uint8_t bytes[], size_t n) { uint32_t res = 0; for (size_t i = 0; i < n; i++) { -#if defined (LKT_ENDIANES_LITTLE) && (LKT_ENDIANES_LITTLE == 1) +#if defined(LKT_ENDIANES_LITTLE) && (LKT_ENDIANES_LITTLE == 1) res = (res << 8u) | bytes[i]; #else /* BIG_ENDIAN */ res = res | (bytes[i] << 8u); @@ -158,7 +156,7 @@ be_uint32_t(const uint8_t bytes[], size_t n) char * trim(char *str, size_t len, char c) { - char *res = (char *) str; + char *res = (char *)str; char *end; for (; len != 0 && *res == c; ++str, --len) @@ -188,45 +186,34 @@ is_utf8(const char *string) const unsigned char *bytes = (const unsigned char *)string; while (*bytes) { /* ASCII */ - if (bytes[0] == 0x09 || bytes[0] == 0x0A || - bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) { + if (bytes[0] == 0x09 || bytes[0] == 0x0A || bytes[0] == 0x0D || (0x20 <= bytes[0] && bytes[0] <= 0x7E)) { bytes += 1; continue; } /* non-overlong 2-byte */ - if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF)) { + if ((0xC2 <= bytes[0] && bytes[0] <= 0xDF) && (0x80 <= bytes[1] && bytes[1] <= 0xBF)) { bytes += 2; continue; } - if ( (bytes[0] == 0xE0 && - (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || /* excluding overlongs */ - (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || - bytes[0] == 0xEE || bytes[0] == 0xEF) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || /* straight 3-byte */ - (bytes[0] == 0xED && - (0x80 <= bytes[1] && bytes[1] <= 0x9F) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF))) { /* excluding surrogates */ + if ((bytes[0] == 0xE0 && (0xA0 <= bytes[1] && bytes[1] <= 0xBF) && + (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || /* excluding overlongs */ + (((0xE1 <= bytes[0] && bytes[0] <= 0xEC) || bytes[0] == 0xEE || bytes[0] == 0xEF) && + (0x80 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF)) || /* straight 3-byte */ + (bytes[0] == 0xED && (0x80 <= bytes[1] && bytes[1] <= 0x9F) && + (0x80 <= bytes[2] && bytes[2] <= 0xBF))) { /* excluding surrogates */ bytes += 3; continue; } - if ( (bytes[0] == 0xF0 && /* planes 1-3 */ - (0x90 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || - ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && - (0x80 <= bytes[1] && bytes[1] <= 0xBF) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || /* planes 4-15 */ - (bytes[0] == 0xF4 && - (0x80 <= bytes[1] && bytes[1] <= 0x8F) && - (0x80 <= bytes[2] && bytes[2] <= 0xBF) && - (0x80 <= bytes[3] && bytes[3] <= 0xBF))) { /* plane 16 */ + if ((bytes[0] == 0xF0 && /* planes 1-3 */ + (0x90 <= bytes[1] && bytes[1] <= 0xBF) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && + (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || + ((0xF1 <= bytes[0] && bytes[0] <= 0xF3) && (0x80 <= bytes[1] && bytes[1] <= 0xBF) && + (0x80 <= bytes[2] && bytes[2] <= 0xBF) && (0x80 <= bytes[3] && bytes[3] <= 0xBF)) || /* planes 4-15 */ + (bytes[0] == 0xF4 && (0x80 <= bytes[1] && bytes[1] <= 0x8F) && (0x80 <= bytes[2] && bytes[2] <= 0xBF) && + (0x80 <= bytes[3] && bytes[3] <= 0xBF))) { /* plane 16 */ bytes += 4; continue; } @@ -251,20 +238,19 @@ get_stdin_line(const char *prompt, char *buf, size_t len) inline long get_mtime(const char *path) { - struct stat statbuf = {0}; + struct stat statbuf = { 0 }; return (stat(path, &statbuf) == -1) ? 0 : statbuf.st_mtime; } void * safe_malloc(size_t size) { - void *tmp; - tmp = malloc(size); + void *tmp = malloc(size); if (!tmp) { - LOG_ERROR("GENERAL", "Out of memory, can't alloc " - "'%ld' Bytes", size); + LOG_ERROR("GENERAL", "Out of memory, can't alloc '%ld' Bytes", size); exit(1); } + memset(tmp, 0, size); return tmp; } @@ -279,9 +265,9 @@ safe_zero_malloc(size_t size) int read_self_exe(char *path, size_t len) { - return ! ((readlink(SELF_EXECUTABLE_LINUX, path, len - 1) > 0) - || (readlink(SELF_EXECUTABLE_FREEBSD, path, len - 1) > 0) - || (readlink(SELF_EXECUTABLE_SOLARIS, path, len - 1) > 0)); + return !((readlink(SELF_EXECUTABLE_LINUX, path, len - 1) > 0) || + (readlink(SELF_EXECUTABLE_FREEBSD, path, len - 1) > 0) || + (readlink(SELF_EXECUTABLE_SOLARIS, path, len - 1) > 0)); } int @@ -289,7 +275,7 @@ safe_snprintf(char *dest, const size_t max_len, const char *format, ...) { va_list ap; va_start(ap, format); - int ret = vsnprintf(dest, max_len, format, ap); + int ret = vsnprintf(dest, max_len, format, ap); dest[max_len - 1] = '\0'; va_end(ap); return ret; @@ -309,7 +295,7 @@ long_length(long integer) char * safe_strncpy(char *dest, const char *src, size_t n) { - char *ret = strncpy(dest, src, n); + char *ret = strncpy(dest, src, n); dest[n - 1] = '\0'; return ret; } diff --git a/src/base/config.c b/src/base/config.c index 3dd1b39d5661c9e9ced8ffa3dea485f78bbcec90..1db7389e54335bb722f9425dc257db27dbf0a81d 100644 --- a/src/base/config.c +++ b/src/base/config.c @@ -37,13 +37,10 @@ skip(char *s) } static int -handler(volatile sqlite3 *user, const char *section, const char *name, - const char *value) +handler(volatile sqlite3 *user, const char *section, const char *name, const char *value) { - RETURN_UNLESS(section && name && value, - "I can't complete the database with incomplete lines", 1); - RETURN_UNLESS(database_config_set(user, section, name, value), - "Failed to update the database", 1); + RETURN_UNLESS(section && name && value, "I can't complete the database with incomplete lines", 1); + RETURN_UNLESS(database_config_set(user, section, name, value), "Failed to update the database", 1); return 0; } @@ -105,16 +102,15 @@ ini_parse(const char *path, volatile sqlite3 *db) end = &start[1 + strcspn(start + 1, "]")]; if (end[0] == ']') { end[0] = '\0'; - len = strlen(&start[1]); - len = MIN(len + 1, LKT_LINE_MAX); + len = strlen(&start[1]); + len = MIN(len + 1, LKT_LINE_MAX); memcpy(section, &start[1], len); section[LKT_LINE_MAX - 1] = '\0'; } else { error = 1; - LOG_ERROR("PARSER", "Invalid section name at line '%d'", - linenum); + LOG_ERROR("PARSER", "Invalid section name at line '%d'", linenum); } } @@ -141,9 +137,8 @@ ini_parse(const char *path, volatile sqlite3 *db) if (section[0]) { if (handler(db, section, name, value)) { error = 1; - LOG_ERROR("PARSER", "Failed to '[handle] %s, " - "%s{:,=}%s' at line '%d'", - section, name, value, linenum); + LOG_ERROR("PARSER", "Failed to '[handle] %s, %s{:,=}%s' at line '%d'", section, name, value, + linenum); } } else __set_log_level(name, value); @@ -151,8 +146,7 @@ ini_parse(const char *path, volatile sqlite3 *db) else { error = 1; - LOG_ERROR("PARSER", "Invalid name[:=]value pair at " - "line '%d'", linenum); + LOG_ERROR("PARSER", "Invalid name[:=]value pair at line '%d'", linenum); } } } @@ -160,8 +154,7 @@ ini_parse(const char *path, volatile sqlite3 *db) /* End of the function */ fclose(file); if (error) - LOG_ERROR("PARSER", "An error occured while parsing the " - "file '%s'", path); + LOG_ERROR("PARSER", "An error occured while parsing the file '%s'", path); return error; } @@ -187,7 +180,7 @@ config_default_file(char *dest, size_t len) int config_detect_file(char *conf, size_t conf_len) { - bool is_malloc = false; + bool is_malloc = false; struct passwd *pw = getpwuid(getuid()); char *home; @@ -227,15 +220,13 @@ skip_this_strcat: no_config_directory: /* Try the '/opt/lektor' file. */ - memcpy(conf, "/opt/lektor/lektor.ini", - sizeof("/opt/lektor/lektor.ini")); + memcpy(conf, "/opt/lektor/lektor.ini", sizeof("/opt/lektor/lektor.ini")); LOG_INFO("CONFIG", "Trying %s", conf); if (!access(conf, R_OK | F_OK)) goto found; /* Try the '/usr/local/etc/lektor.ini' file. */ - memcpy(conf, "/usr/local/etc/lektor.ini", - sizeof("/usr/local/etc/lektor.ini")); + memcpy(conf, "/usr/local/etc/lektor.ini", sizeof("/usr/local/etc/lektor.ini")); LOG_INFO("CONFIG", "Trying %s", conf); if (!access(conf, R_OK | F_OK)) goto found; @@ -247,8 +238,7 @@ no_config_directory: goto found; /* Error */ - LOG_ERROR("CONFIG", "An error occured with file %s: %s", - conf, strerror(errno)); + LOG_ERROR("CONFIG", "An error occured with file %s: %s", conf, strerror(errno)); if (is_malloc) free(conf); return 1; @@ -280,22 +270,16 @@ error: void config_default(FILE *output) { - fwrite(lkt_default_config_file, sizeof(char), - strlen(lkt_default_config_file), output); + fwrite(lkt_default_config_file, sizeof(char), strlen(lkt_default_config_file), output); } int config_open(volatile sqlite3 *db) { char conf_file[PATH_MAX]; - int ret = 1; - GOTO_IF(config_detect_file(conf_file, PATH_MAX), - "Error while searching for a config file", error); - GOTO_IF(config_new(db, conf_file), - "Failed to read configuration file", error); - ret = 0; -error: - return ret; + RETURN_IF(config_detect_file(conf_file, PATH_MAX), "Error while searching for a config file", 1); + RETURN_IF(config_new(db, conf_file), "Failed to read configuration file", 1); + return 0; } void diff --git a/src/base/json.c b/src/base/json.c index cbea8c3367f645e95062f1239b83d6be4e68b4e6..829ae543d7cfabf92950358e70220f54ea466652 100644 --- a/src/base/json.c +++ b/src/base/json.c @@ -14,58 +14,58 @@ #define __SKIP_JSON(str) (str = &str[strspn(str, __JSON_SPACE)]) -#define __NEXT_JSON(str, len, dest, tmp, tmp_len) \ -{ \ - int is_paren = 0; \ - if (str[0] == __JSON_SEP) { \ - ++str; \ - const char *begin = str, *end; \ - for (;;) { \ - end = strchr(begin, __JSON_SEP); \ - if (*(end - 1) == '\\') { \ - begin = end + 1; \ - continue; \ - } \ - break; \ - } \ - len = (end - str); \ - is_paren = 1; \ - } else \ - len = strcspn(str, __JSON_SPACE __JSON_END); \ - if (level == asked_level) { \ - size_t local_len = LKT_LINE_MAX - 1 < len ? LKT_LINE_MAX - 1 : len; \ - strncpy(dest, str, local_len); \ - __decode_json(dest, local_len); \ - } \ - str += len; \ - if (is_paren) { \ - ++str; \ - } \ -} +#define __NEXT_JSON(str, len, dest, tmp, tmp_len) \ + { \ + int is_paren = 0; \ + if (str[0] == __JSON_SEP) { \ + ++str; \ + const char *begin = str, *end; \ + for (;;) { \ + end = strchr(begin, __JSON_SEP); \ + if (*(end - 1) == '\\') { \ + begin = end + 1; \ + continue; \ + } \ + break; \ + } \ + len = (end - str); \ + is_paren = 1; \ + } else \ + len = strcspn(str, __JSON_SPACE __JSON_END); \ + if (level == asked_level) { \ + size_t local_len = LKT_LINE_MAX - 1 < len ? LKT_LINE_MAX - 1 : len; \ + strncpy(dest, str, local_len); \ + __decode_json(dest, local_len); \ + } \ + str += len; \ + if (is_paren) { \ + ++str; \ + } \ + } -#define __SKIP_NEXT_JSON(str, len) \ -{ \ - int is_paren = 0; \ - if (str[0] == __JSON_SEP) { \ - ++str; \ - const char *begin = str, *end; \ - for (;;) { \ - end = strchr(begin, __JSON_SEP); \ - if (*(end - 1) == '\\') { \ - begin = end + 1; \ - continue; \ - } \ - break; \ - } \ - len = (end - str); \ - is_paren = 1; \ - } else \ - len = strcspn(str, __JSON_SPACE __JSON_BEGIN __JSON_END); \ - str += len; \ - if (is_paren) { \ - ++str; \ - } \ -} +#define __SKIP_NEXT_JSON(str, len) \ + { \ + int is_paren = 0; \ + if (str[0] == __JSON_SEP) { \ + ++str; \ + const char *begin = str, *end; \ + for (;;) { \ + end = strchr(begin, __JSON_SEP); \ + if (*(end - 1) == '\\') { \ + begin = end + 1; \ + continue; \ + } \ + break; \ + } \ + len = (end - str); \ + is_paren = 1; \ + } else \ + len = strcspn(str, __JSON_SPACE __JSON_BEGIN __JSON_END); \ + str += len; \ + if (is_paren) { \ + ++str; \ + } \ + } static inline int __hex_digit(const char c) @@ -87,12 +87,12 @@ __hex_val(const char *c, uint32_t *result) int digit; *result = 0; - for (p = c; (size_t) (p - c) < size; ++p) { + for (p = c; (size_t)(p - c) < size; ++p) { *result <<= 4; digit = __hex_digit(*p); if (digit < 0 || digit > 15) return 1; - *result |= (uint8_t) digit; + *result |= (uint8_t)digit; } return 0; @@ -102,13 +102,11 @@ __hex_val(const char *c, uint32_t *result) static struct { int32_t lo; int32_t hi; -} utf8[] = { - { 0xd800, 0xdfff }, /* forbidden range: surrogates */ - { 0, 0x7f }, - { 0x80, 0x7ff }, - { 0x800, 0xffff }, - { 0x10000, 0x10ffff } -}; +} utf8[] = { { 0xd800, 0xdfff }, /* forbidden range: surrogates */ + { 0, 0x7f }, + { 0x80, 0x7ff }, + { 0x800, 0xffff }, + { 0x10000, 0x10ffff } }; static inline size_t __encode_codepoint(char p[4], int32_t codepoint) @@ -151,20 +149,20 @@ __decode_json(char *string, size_t len) while ((offset = strchr(offset, '\\'))) { switch (offset[1]) { -#define __case_single(c, sub) \ - case c: \ - size = 2; \ - written = 1; \ - offset[0] = sub; \ - break; - __case_single('"', '\"') - __case_single('\\', '\\') - __case_single('/', '/' ) - __case_single('f', '\f') - __case_single('b', '\b') - __case_single('n', '\n') - __case_single('r', '\r') - __case_single('t', '\t') +#define __case_single(c, sub) \ + case c: \ + size = 2; \ + written = 1; \ + offset[0] = sub; \ + break; + __case_single('"', '\"'); + __case_single('\\', '\\'); + __case_single('/', '/'); + __case_single('f', '\f'); + __case_single('b', '\b'); + __case_single('n', '\n'); + __case_single('r', '\r'); + __case_single('t', '\t'); #undef __case_single /* UTF-8 decode, 4 hex digits */ @@ -210,16 +208,16 @@ json_parse(const char *str, int asked_level, json_parse_callback call, void *use /* Begin of a block */ if ((len = strspn(str, __JSON_BEGIN))) { - level += len; - str += len; + level += len; + str += len; } /* End of a block */ else if ((len = strspn(str, __JSON_END))) { if (level == asked_level) call(NULL, NULL, 1, user); - str += len; - level -= len; + str += len; + level -= len; } /* Key Value */ @@ -246,8 +244,8 @@ LKT_POP int json_parse_get_count(const char *str, int asked_level) { - int level = 0; - int ret_len = 0; + int level = 0; + int ret_len = 0; for (;;) { size_t len = 0; @@ -255,15 +253,15 @@ json_parse_get_count(const char *str, int asked_level) /* Begin of a block */ if ((len = strspn(str, __JSON_BEGIN))) { - level += len; - str += len; + level += len; + str += len; } /* End of a block */ else if ((len = strspn(str, __JSON_END))) { ret_len += (level == asked_level); - str += len; - level -= len; + str += len; + level -= len; } /* Key Value */ diff --git a/src/base/reg.c b/src/base/reg.c index ec42e88851878a5971851aabf93d4c279c353742..a582b8357dc62657197a28ab7482b2802415db4c 100644 --- a/src/base/reg.c +++ b/src/base/reg.c @@ -55,8 +55,7 @@ __from_file(const char *file, void **handle, const char *symbol) *handle = dlopen(file, RTLD_NOW); if (NULL == *handle) { - LOG_ERROR("REG", "libdl error in dlopen on file '%s': %s", - file, dlerror()); + LOG_ERROR("REG", "libdl error in dlopen on file '%s': %s", file, dlerror()); return NULL; } @@ -64,8 +63,7 @@ __from_file(const char *file, void **handle, const char *symbol) void *sym = dlsym(*handle, symbol); if ((error = dlerror()) != NULL) { - LOG_ERROR("REG", "libdl error in dlsym on file '%s': %s\n", - file, error); + LOG_ERROR("REG", "libdl error in dlsym on file '%s': %s\n", file, error); return NULL; } @@ -76,22 +74,23 @@ int reg_import(const char *mod, struct module_reg **ret, void **handle) { if (strcspn(mod, "/.\'\"\\") != strlen(mod)) { - LOG_INFO("REG", "Using the dlsym to find '" REG_EXPORT_NAME - "' in %s", mod); + LOG_INFO("REG", "Using the dlsym to find '" REG_EXPORT_NAME "' in %s", mod); *ret = __from_file(mod, handle, REG_EXPORT_NAME); - } else { + } + + else { LOG_INFO("REG", "Using the reg structure to find %s", mod); *ret = __reg_get(__reg__, mod); if (!*ret) { - LOG_INFO("REG", "Not found in reg '" REG_EXPORT_NAME "', using " - "the dlsym to find reg '" REG_EXPORT_NAME "' in file %s", + LOG_INFO("REG", + "Not found in reg '" REG_EXPORT_NAME "', using the dlsym to find reg '" REG_EXPORT_NAME + "' in file %s", mod); } } return *ret != NULL; } - int reg_call(struct module_reg *reg, const char *name, int count, ...) { diff --git a/src/base/stack.c b/src/base/stack.c index 08a3cd7e991762f1d9fe97e66c42b2d9eefcde33..3edaaa3975a0a5dc0c8da61c1429fee25ab45006 100644 --- a/src/base/stack.c +++ b/src/base/stack.c @@ -12,8 +12,8 @@ stack_new(struct stack *ret) struct stack _ret = { .contents = malloc(LKT_DEFAULT_LIST_SIZE * sizeof(void *)), - .size = LKT_DEFAULT_LIST_SIZE, - .len = 0, + .size = LKT_DEFAULT_LIST_SIZE, + .len = 0, }; if (_ret.contents == NULL) @@ -72,7 +72,7 @@ stack_pop(struct stack *lst, void **item) if (!lst || !lst->len) return 1; - *item = (void *) lst->contents[--(lst->len)]; + *item = (void *)lst->contents[--(lst->len)]; return 0; } @@ -82,6 +82,6 @@ stack_head(struct stack *lst, void **item) if (!lst || !lst->len) return 1; - *item = (void *) lst->contents[lst->len - 1]; + *item = (void *)lst->contents[lst->len - 1]; return 0; } diff --git a/src/base/uri.c b/src/base/uri.c index 134fed4d1c1c0934f6e62e6f1ef173ed6ff6f169..c4d4b1cec6834f4b72e24963a138d98539707e40 100644 --- a/src/base/uri.c +++ b/src/base/uri.c @@ -24,32 +24,32 @@ __prefix(char *str, struct lkt_uri *ret) if (STR_NMATCH(str, "id", 2)) { ret->column_name = LKT_DB_ID; - ret->type = uri_id; - val = str + 2; + ret->type = uri_id; + val = str + 2; } else if (STR_NMATCH(str, "playlist", 8)) { ret->column_name = NULL; - ret->type = uri_playlist; - val = str + 8; + ret->type = uri_playlist; + val = str + 8; } else if (STR_NMATCH(str, "type", 4)) { ret->column_name = LKT_DB_TYPE; - ret->type = uri_type; - val = str + 4; + ret->type = uri_type; + val = str + 4; } else if (STR_NMATCH(str, "author", 6)) { ret->column_name = LKT_DB_AUTHOR; - ret->type = uri_author; - val = str + 6; + ret->type = uri_author; + val = str + 6; } else if (STR_NMATCH(str, "category", 8)) { ret->column_name = LKT_DB_CAT; - ret->type = uri_category; - val = str + 8; + ret->type = uri_category; + val = str + 8; } else if (STR_NMATCH(str, "lang", 4)) { ret->column_name = LKT_DB_LANG; - ret->type = uri_language; - val = str + 4; + ret->type = uri_language; + val = str + 4; } else if (STR_NMATCH(str, "query", 5)) { ret->column_name = LKT_DB_ALL; - ret->type = uri_query; - val = str + 5; + ret->type = uri_query; + val = str + 5; } else return NULL; @@ -71,8 +71,8 @@ lkt_uri_from_single(struct lkt_uri *ret, char *const str) ret->is_int = false; if (ret->type == uri_id) { - errno = 0; - ret->id = strtol(ret->value, NULL, 0); /* Override */ + errno = 0; + ret->id = strtol(ret->value, NULL, 0); /* Override */ if (errno != 0) return false; ret->is_int = true; @@ -96,10 +96,10 @@ lkt_uri_from_list(struct lkt_uri *ret, char **list) return false; /* Nothing after the separator */ - if ('\0' == * (char *) ret->value) + if ('\0' == *(char *)ret->value) return false; - char *buffer = (char *) malloc(sizeof(char) * (strlen(ret->value) + 1)); + char *buffer = (char *)malloc(sizeof(char) * (strlen(ret->value) + 1)); if (NULL == buffer) return false; strcpy(buffer, ret->value); @@ -116,7 +116,7 @@ lkt_uri_from_list(struct lkt_uri *ret, char **list) strcat(buffer, list[i]); } - ret->value = buffer; + ret->value = buffer; ret->_allocated = true; return true; } @@ -137,23 +137,25 @@ __lkt_to_str(struct lkt_uri *uri, char *ret, size_t len) { switch (uri->type) { case uri_id: - safe_snprintf(ret, len, "id=%s", (char *) uri->value); + safe_snprintf(ret, len, "id=%s", (char *)uri->value); break; case uri_type: - safe_snprintf(ret, len, "type=%s", (char *) uri->value); + safe_snprintf(ret, len, "type=%s", (char *)uri->value); break; case uri_author: - safe_snprintf(ret, len, "author=%s", (char *) uri->value); + safe_snprintf(ret, len, "author=%s", (char *)uri->value); break; case uri_category: - safe_snprintf(ret, len, "cat=%s", (char *) uri->value); + safe_snprintf(ret, len, "cat=%s", (char *)uri->value); break; case uri_query: - safe_snprintf(ret, len, "search=%s", (char *) uri->value); + safe_snprintf(ret, len, "search=%s", (char *)uri->value); break; default: - LOG_WARN("URI", "type %d may not be supported by kurisu, " - "generate an error", uri->type); + LOG_WARN("URI", + "type %d may not be supported by kurisu, " + "generate an error", + uri->type); return 1; } diff --git a/src/database/config.c b/src/database/config.c index ac2c736d10dfde349770d26c8f3a8204e1bf0ee8..374cbe75aef4d502bae6bda6515a77552a8b5fde 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -15,12 +15,11 @@ bool database_config_set(volatile sqlite3 *db, const char *section, const char *key, const char *value) { - static const char *SQL_STMT = - "INSERT OR REPLACE INTO" - " config (section, key, value)" - " VALUES (?, ?, ?);\n"; + static const char *SQL_STMT = "INSERT OR REPLACE INTO" + " config (section, key, value)" + " VALUES (?, ?, ?);\n"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; int code; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -31,8 +30,7 @@ database_config_set(volatile sqlite3 *db, const char *section, const char *key, code = sqlite3_step(stmt); if (code != SQLITE_OK && code != SQLITE_DONE) { - LOG_ERROR("DB", "Failed to insert or replace: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to insert or replace: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -44,15 +42,13 @@ error: } bool -database_config_get_text(volatile 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" - " FROM config" - " WHERE section = ? AND key = ?;\n"; + static const char *SQL_STMT = "SELECT value" + " FROM config" + " WHERE section = ? AND key = ?;\n"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; char *row; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -60,25 +56,23 @@ database_config_get_text(volatile sqlite3 *db, const char *section, const char * SQLITE_BIND_TEXT(db, stmt, 2, key, error); SQLITE_STEP_ROW(db, stmt, error); - row = (char *) sqlite3_column_text(stmt, 0); + row = (char *)sqlite3_column_text(stmt, 0); safe_strncpy(value, row, len); value[len - 1] = 0; - ret = true; + ret = true; error: sqlite3_finalize(stmt); return ret; } bool -database_config_get_text_nospace(volatile sqlite3 *db, const char *section, const char *key, - char *value, size_t len) +database_config_get_text_nospace(volatile sqlite3 *db, const char *section, const char *key, char *value, size_t len) { - static const char *SQL_STMT = - "SELECT REPLACE(value, ' ', '')" - " FROM config" - " WHERE section = ? AND key = ?;\n"; + static const char *SQL_STMT = "SELECT REPLACE(value, ' ', '')" + " FROM config" + " WHERE section = ? AND key = ?;\n"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; char *row; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -86,10 +80,10 @@ database_config_get_text_nospace(volatile sqlite3 *db, const char *section, cons SQLITE_BIND_TEXT(db, stmt, 2, key, error); SQLITE_STEP_ROW(db, stmt, error); - row = (char *) sqlite3_column_text(stmt, 0); + row = (char *)sqlite3_column_text(stmt, 0); strncpy(value, row, len); value[len - 1] = 0; - ret = true; + ret = true; error: sqlite3_finalize(stmt); return ret; @@ -98,12 +92,11 @@ error: bool database_config_exists(volatile sqlite3 *db, const char *section, const char *key) { - static const char *SQL_STMT = - "SELECT value" - " FROM config" - " WHERE section = ? AND key = ?;\n"; + static const char *SQL_STMT = "SELECT value" + " FROM config" + " WHERE section = ? AND key = ?;\n"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, section, error); @@ -119,12 +112,11 @@ error: bool 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)" - " FROM config" - " WHERE section COLLATE nocase = ? AND key COLLATE nocase = ?;"; + static const char *SQL_STMT = "SELECT CAST(value AS INTEGER)" + " FROM config" + " WHERE section COLLATE nocase = ? AND key COLLATE nocase = ?;"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, section, error); @@ -133,7 +125,7 @@ database_config_get_int(volatile sqlite3 *db, const char *section, const char *k SQLITE_STEP_ROW(db, stmt, error); *value = sqlite3_column_int(stmt, 0); - ret = true; + ret = true; error: sqlite3_finalize(stmt); return ret; @@ -145,7 +137,7 @@ 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]; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; int code; if (value < 0) @@ -172,22 +164,20 @@ bool database_validate_conf(volatile sqlite3 *db) { const char *section; -#define section(_sct) section = _sct; +#define section(_sct) section = _sct; #define value_opt(name, value) -#define value(name, value) \ - if (!database_config_exists(db, section, name)) { \ - LOG_ERROR("CONFIG", "Missing option \""name"\" in section \"%s\"", \ - section); \ - return false; \ - } else if (STR_MATCH("externals", section)) { \ - char file[PATH_MAX]; \ - if (!database_config_get_text(db, section, name, file, PATH_MAX)) { \ - if (access(file, F_OK) != 0) { \ - LOG_ERROR("CONFIG", "File %s don't exists, invalid [%s/%s]", \ - file, section, name); \ - return false; \ - } \ - } \ +#define value(name, value) \ + if (!database_config_exists(db, section, name)) { \ + LOG_ERROR("CONFIG", "Missing option \"" name "\" in section \"%s\"", section); \ + return false; \ + } else if (STR_MATCH("externals", section)) { \ + char file[PATH_MAX]; \ + if (!database_config_get_text(db, section, name, file, PATH_MAX)) { \ + if (access(file, F_OK) != 0) { \ + LOG_ERROR("CONFIG", "File %s don't exists, invalid [%s/%s]", file, section, name); \ + return false; \ + } \ + } \ } #include <lektor/config.def> #undef section @@ -200,19 +190,15 @@ bool database_config_dump(volatile sqlite3 *db, FILE *f) { static const char *SQL = "SELECT section, key, value FROM config;"; - sqlite3_stmt *stmt = 0; + sqlite3_stmt *stmt = 0; SQLITE_PREPARE(db, stmt, SQL, error); while (sqlite3_step(stmt) == SQLITE_ROW) { if (sqlite3_column_type(stmt, 0) == SQLITE_NULL) { - fprintf(f, "NO SECTION => %s => %s\n", - sqlite3_column_chars(stmt, 1), - sqlite3_column_chars(stmt, 2)); + fprintf(f, "NO SECTION => %s => %s\n", sqlite3_column_chars(stmt, 1), sqlite3_column_chars(stmt, 2)); } else { - fprintf(f, "%s => %s => %s\n", - sqlite3_column_chars(stmt, 0), - sqlite3_column_chars(stmt, 1), + fprintf(f, "%s => %s => %s\n", sqlite3_column_chars(stmt, 0), sqlite3_column_chars(stmt, 1), sqlite3_column_chars(stmt, 2)); } } @@ -229,7 +215,7 @@ database_config_obfuscation_check(volatile sqlite3 *db, int obfuscation) { static const char *GET_SQL = "SELECT obfuscation FROM misc WHERE id = 42;"; static const char *SET_SQL = "UPDATE misc SET obfuscation = ? WHERE id = 42;"; - sqlite3_stmt *stmt = 0; + sqlite3_stmt *stmt = 0; SQLITE_PREPARE(db, stmt, GET_SQL, error); diff --git a/src/database/find.c b/src/database/find.c index b8c35597bbfe1e2a0cd0169be8bd83c35027e79e..57e153d3f95ac39eef3c5ce9186f181e2fbeb80f 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -14,31 +14,30 @@ static inline int __check_sticker_type(const char *type) { - return ! ( STR_MATCH(type, "kara") || STR_MATCH(type, "plt") ); + return !(STR_MATCH(type, "kara") || STR_MATCH(type, "plt")); } bool database_search_database_init(volatile sqlite3 *db, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); - static const char *SQL_STMT_TEMPLATE = - "WITH content AS (" - " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" - " FROM kara WHERE %s LIKE ?)" - "SELECT id, string, (SELECT MAX(len) FROM content)" - "FROM content LIMIT %d OFFSET %d;"; + static const char *SQL_STMT_TEMPLATE = "WITH content AS (" + " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" + " FROM kara WHERE %s LIKE ?)" + "SELECT id, string, (SELECT MAX(len) FROM content)" + "FROM content LIMIT %d OFFSET %d;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; ret->type = lkt_search_database; /* Search part */ - safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE, - ret->ka_uri.column_name, ret->msg_count, ret->continuation); + safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE, ret->ka_uri.column_name, ret->msg_count, + ret->continuation); SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error); if (!ret->ka_uri.is_int) { SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error); LOG_DEBUG("DB", "Uri was a text"); } else { - SQLITE_BIND_INT(db, ret->stmt, 1, (int) ret->ka_uri.id, error); + SQLITE_BIND_INT(db, ret->stmt, 1, (int)ret->ka_uri.id, error); LOG_DEBUG("DB", "Uri was a size_t"); } ret->db = db; @@ -53,44 +52,42 @@ database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret) { /* Sql queries definitions */ char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; - static const char *SQL_TEMPLATE = - "WITH content AS (" - " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" - " FROM kara_playlist" - " JOIN playlist ON playlist.id = playlist_id" - " AND playlist.name COLLATE nocase = ?" - " JOIN kara ON kara.id = kara_id" - " AND %s LIKE ?) " - "SELECT id, string, (SELECT MAX(len) FROM content) " - "FROM content LIMIT %d OFFSET %d;"; - static const char *SQL = - "WITH content AS (" - " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" - " FROM kara_playlist" - " JOIN playlist ON playlist.id = playlist_id" - " AND playlist.name COLLATE NOCASE = ?" - " JOIN kara ON kara.id = kara_id) " - "SELECT id, string, (SELECT MAX(len) FROM content) " - "FROM content LIMIT %d OFFSET %d;"; + static const char *SQL_TEMPLATE = "WITH content AS (" + " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" + " FROM kara_playlist" + " JOIN playlist ON playlist.id = playlist_id" + " AND playlist.name COLLATE nocase = ?" + " JOIN kara ON kara.id = kara_id" + " AND %s LIKE ?) " + "SELECT id, string, (SELECT MAX(len) FROM content) " + "FROM content LIMIT %d OFFSET %d;"; + static const char *SQL = "WITH content AS (" + " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len" + " FROM kara_playlist" + " JOIN playlist ON playlist.id = playlist_id" + " AND playlist.name COLLATE NOCASE = ?" + " JOIN kara ON kara.id = kara_id) " + "SELECT id, string, (SELECT MAX(len) FROM content) " + "FROM content LIMIT %d OFFSET %d;"; /* Common part */ RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); - ret->type = lkt_search_playlist; - ret->db = db; + ret->type = lkt_search_playlist; + ret->db = db; if (ret->ka_uri.type == uri_null) goto uri_is_null; /* Filter with an uri */ LOG_INFO("DB", "List plt '%s' with non null uri", ret->plt_name); - safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE, - ret->ka_uri.column_name, ret->msg_count, ret->continuation); + safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE, ret->ka_uri.column_name, ret->msg_count, + ret->continuation); SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->plt_name, error); if (!ret->ka_uri.is_int) { SQLITE_BIND_TEXT(db, ret->stmt, 2, ret->ka_uri.value, error); LOG_DEBUG("DB", "Uri was a text"); } else { - SQLITE_BIND_INT(db, ret->stmt, 2, (int) ret->ka_uri.id, error); + SQLITE_BIND_INT(db, ret->stmt, 2, (int)ret->ka_uri.id, error); LOG_DEBUG("DB", "Uri was a size_t"); } return true; @@ -115,11 +112,10 @@ database_search_listplaylist_init(volatile sqlite3 *db, struct lkt_search *ret) static const char *SQL = "SELECT name FROM playlist LIMIT %d OFFSET %d;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, ret->msg_count, ret->continuation); - ret->type = lkt_search_listplaylist; - ret->db = db; + ret->type = lkt_search_listplaylist; + ret->db = db; SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error); - LOG_INFO("DB", "List playlists with LIMIT %d and OFFSET %d", - ret->msg_count, (int) ret->continuation); + LOG_INFO("DB", "List playlists with LIMIT %d and OFFSET %d", ret->msg_count, (int)ret->continuation); return true; error: sqlite3_finalize(ret->stmt); @@ -134,18 +130,16 @@ database_search_sticker_init(volatile sqlite3 *db, struct lkt_search *ret) return false; } - static const char *SQL_all_types = - "SELECT name, sts.id, value FROM 'stickers' JOIN " - "( SELECT id, sticker, value, 'kara' FROM 'stickers.kara'" - " UNION" - " SELECT id, sticker, value , 'plt' FROM 'stickers.plt'" - ") AS sts" - "ON sts.sticker = 'stickers'.id"; - static const char *SQL_one_type = - "SELECT name, sts.id, value, '%s' " - "FROM 'stickers.%s' AS sts " - "JOIN 'stickers' " - "ON 'stickers'.id = sts.sticker"; + static const char *SQL_all_types = "SELECT name, sts.id, value FROM 'stickers' JOIN " + "( SELECT id, sticker, value, 'kara' FROM 'stickers.kara'" + " UNION" + " SELECT id, sticker, value , 'plt' FROM 'stickers.plt'" + ") AS sts" + "ON sts.sticker = 'stickers'.id"; + static const char *SQL_one_type = "SELECT name, sts.id, value, '%s' " + "FROM 'stickers.%s' AS sts " + "JOIN 'stickers' " + "ON 'stickers'.id = sts.sticker"; char SQL[LKT_MAX_SQLITE_STATEMENT]; ret->type = lkt_search_sticker; @@ -157,7 +151,9 @@ database_search_sticker_init(volatile sqlite3 *db, struct lkt_search *ret) sprintf(SQL + strlen(SQL), " AND sts.id = %d", ret->st_uri); if (ret->st_op != 0) sprintf(SQL + strlen(SQL), " AND sts.value %s %d", - ret->st_op == '>' ? ">=" : ret->st_op == '<' ? "<=" : "=", + ret->st_op == '>' ? ">=" + : ret->st_op == '<' ? "<=" + : "=", ret->st_value); strcat(SQL, !ret->st_name ? ";" : " AND name = ?;"); @@ -174,29 +170,28 @@ bool database_search_queue_init(volatile sqlite3 *db, struct lkt_search *ret) { RETURN_UNLESS(ret, "Exit because return pointer is NULL", false); - static const char *SQL_STMT_TEMPLATE = - "WITH content AS (" - " SELECT" - " kara_id AS id," - " string," - " LENGTH(CAST(kara_id AS TEXT)) AS len" - " FROM queue" - " JOIN kara " - " ON kara_id = kara.id AND %s LIKE ?)" - "SELECT id, string, (SELECT MAX(len) FROM content)" - "FROM content LIMIT %d OFFSET %d;"; + static const char *SQL_STMT_TEMPLATE = "WITH content AS (" + " SELECT" + " kara_id AS id," + " string," + " LENGTH(CAST(kara_id AS TEXT)) AS len" + " FROM queue" + " JOIN kara " + " ON kara_id = kara.id AND %s LIKE ?)" + "SELECT id, string, (SELECT MAX(len) FROM content)" + "FROM content LIMIT %d OFFSET %d;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; ret->type = lkt_search_queue; /* Search part */ - safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE, - ret->ka_uri.column_name, ret->msg_count, ret->continuation); + safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_STMT_TEMPLATE, ret->ka_uri.column_name, ret->msg_count, + ret->continuation); SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error); if (!ret->ka_uri.is_int) { SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_uri.value, error); LOG_DEBUG("DB", "Uri was a text"); } else { - SQLITE_BIND_INT(db, ret->stmt, 1, (int) ret->ka_uri.id, error); + SQLITE_BIND_INT(db, ret->stmt, 1, (int)ret->ka_uri.id, error); LOG_DEBUG("DB", "Uri was a size_t"); } ret->db = db; @@ -219,8 +214,7 @@ database_search_iter(struct lkt_search *item) goto end; if (code != SQLITE_ROW) { - LOG_ERROR("DB", "Step failed, expected a ROW or a DONE: %s", - sqlite3_errmsg((sqlite3 *) item->db)); + LOG_ERROR("DB", "Step failed, expected a ROW or a DONE: %s", sqlite3_errmsg((sqlite3 *)item->db)); goto end; } @@ -228,22 +222,22 @@ database_search_iter(struct lkt_search *item) case lkt_search_database: case lkt_search_queue: case lkt_search_playlist: - id = sqlite3_column_int (item->stmt, 0); + id = sqlite3_column_int(item->stmt, 0); sql_row = sqlite3_column_chars(item->stmt, 1); - id_len = sqlite3_column_int (item->stmt, 2); - return ((lkt_search_database_func) item->call) - (item->srv, item->c, id, id_len, sql_row); + id_len = sqlite3_column_int(item->stmt, 2); + return ((lkt_search_database_func)item->call)(item->srv, item->c, id, id_len, sql_row); + case lkt_search_sticker: - sql_row = sqlite3_column_chars(item->stmt, 0); /* Name */ - id = sqlite3_column_int (item->stmt, 1); /* Id */ - code = sqlite3_column_int (item->stmt, 2); /* Val */ - type = sqlite3_column_chars(item->stmt, 3); /* Type */ - return ((lkt_search_sticker_func) item->call) - (item->srv, item->c, sql_row, type, id, code); + sql_row = sqlite3_column_chars(item->stmt, 0); /* Name */ + id = sqlite3_column_int(item->stmt, 1); /* Id */ + code = sqlite3_column_int(item->stmt, 2); /* Val */ + type = sqlite3_column_chars(item->stmt, 3); /* Type */ + return ((lkt_search_sticker_func)item->call)(item->srv, item->c, sql_row, type, id, code); + case lkt_search_listplaylist: - sql_row = sqlite3_column_chars(item->stmt, 0); /* Name */ - return ((lkt_search_listplaylist_func) item->call) - (item->srv, item->c, sql_row); + sql_row = sqlite3_column_chars(item->stmt, 0); /* Name */ + return ((lkt_search_listplaylist_func)item->call)(item->srv, item->c, sql_row); + default: LOG_WARN("DB", "Search type %d is not implemented", item->type); goto end; @@ -255,26 +249,24 @@ end: } bool -database_kara_by_id(volatile sqlite3 *db, int id, struct kara_metadata *res, - char filepath[PATH_MAX]) +database_kara_by_id(volatile sqlite3 *db, int id, struct kara_metadata *res, char filepath[PATH_MAX]) { - static const char *SQL = - "SELECT song_name, source_name, category, language, author_name, " - "song_type, song_number, file_path FROM kara WHERE id = ?;"; + static const char *SQL = "SELECT song_name, source_name, category, language, author_name, " + "song_type, song_number, file_path FROM kara WHERE id = ?;"; sqlite3_stmt *stmt = 0; - int ret = false; + int ret = false; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, id, error); SQLITE_STEP_ROW(db, stmt, error); if (!res) goto no_metadata; - strncpy(res->song_name, sqlite3_column_chars(stmt, 0), LEKTOR_TAG_MAX - 1); + strncpy(res->song_name, sqlite3_column_chars(stmt, 0), LEKTOR_TAG_MAX - 1); strncpy(res->source_name, sqlite3_column_chars(stmt, 1), LEKTOR_TAG_MAX - 1); - strncpy(res->category, sqlite3_column_chars(stmt, 2), LEKTOR_TAG_MAX - 1); - strncpy(res->language, sqlite3_column_chars(stmt, 3), LEKTOR_TAG_MAX - 1); + strncpy(res->category, sqlite3_column_chars(stmt, 2), LEKTOR_TAG_MAX - 1); + strncpy(res->language, sqlite3_column_chars(stmt, 3), LEKTOR_TAG_MAX - 1); strncpy(res->author_name, sqlite3_column_chars(stmt, 4), LEKTOR_TAG_MAX - 1); - strncpy(res->song_type, sqlite3_column_chars(stmt, 5), LEKTOR_TAG_MAX - 1); + strncpy(res->song_type, sqlite3_column_chars(stmt, 5), LEKTOR_TAG_MAX - 1); res->song_number = sqlite3_column_int(stmt, 6); no_metadata: strncpy(filepath, sqlite3_column_chars(stmt, 7), PATH_MAX - 1); diff --git a/src/database/macro.h b/src/database/macro.h index 7a75115004582fcac67d102492a90b37edd5b425..471c0b12b4512ec711f0bfb15e1aa2ede1e1caa5 100644 --- a/src/database/macro.h +++ b/src/database/macro.h @@ -1,51 +1,55 @@ -#if ! defined(__LKT_DATABASE_MACRO_H__) +#if !defined(__LKT_DATABASE_MACRO_H__) #define __LKT_DATABASE_MACRO_H__ -#define SQLITE_PREPARE(db, stmt, SQL, goto_label) { \ - if (sqlite3_prepare_v2((sqlite3 *) db, SQL, -1, &(stmt), 0) != SQLITE_OK) { \ - LOG_DEBUG("DB", "Failed to prepare statement: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto goto_label; \ - }} - -#define SQLITE_EXEC(db, SQL, goto_label) { \ - if (sqlite3_exec((sqlite3 *) db, SQL, NULL, NULL, NULL) != SQLITE_OK) { \ - LOG_DEBUG("DB", "Failed to exec statement: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto goto_label; \ - }} - -#define SQLITE_BIND_TEXT(db, stmt, pos, text, error) { \ - if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) { \ - LOG_DEBUG("DB", "Failed to bind text %s at pos %d: %s", \ - (const char *) text, pos, \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto error; \ - }} - -#define SQLITE_BIND_INT(db, stmt, pos, integer, error) { \ - if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) { \ - LOG_DEBUG("DB", "Failed to bind int %d at pos %d: %s", \ - integer, pos, sqlite3_errmsg((sqlite3 *) db)); \ - goto error; \ - }} - -#define SQLITE_STEP(db, stmt, code, error) { \ - if (sqlite3_step(stmt) != code) { \ - LOG_DEBUG("DB", "Failed to step: %s", \ - sqlite3_errmsg((sqlite3 *) db)); \ - goto error; \ - }} - -#define SQLITE_STEP_ROW(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_ROW, error) -#define SQLITE_STEP_DONE(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_DONE, error) - -#define SQLITE_DO_ROLLBACK(db) \ - sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); - -#define sqlite3_column_chars (const char *) sqlite3_column_text - -#define __INVALID_CHARS_DBPATH ":?!'\"" -#define __is_sql_str_invalid(str) strcspn(str, __INVALID_CHARS_DBPATH) != strlen(str) +#define SQLITE_PREPARE(db, stmt, SQL, goto_label) \ + { \ + if (sqlite3_prepare_v2((sqlite3 *)db, SQL, -1, &(stmt), 0) != SQLITE_OK) { \ + LOG_DEBUG("DB", "Failed to prepare statement: %s", sqlite3_errmsg((sqlite3 *)db)); \ + goto goto_label; \ + } \ + } + +#define SQLITE_EXEC(db, SQL, goto_label) \ + { \ + if (sqlite3_exec((sqlite3 *)db, SQL, NULL, NULL, NULL) != SQLITE_OK) { \ + LOG_DEBUG("DB", "Failed to exec statement: %s", sqlite3_errmsg((sqlite3 *)db)); \ + goto goto_label; \ + } \ + } + +#define SQLITE_BIND_TEXT(db, stmt, pos, text, error) \ + { \ + if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) { \ + LOG_DEBUG("DB", "Failed to bind text %s at pos %d: %s", (const char *)text, pos, \ + sqlite3_errmsg((sqlite3 *)db)); \ + goto error; \ + } \ + } + +#define SQLITE_BIND_INT(db, stmt, pos, integer, error) \ + { \ + if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) { \ + LOG_DEBUG("DB", "Failed to bind int %d at pos %d: %s", integer, pos, sqlite3_errmsg((sqlite3 *)db)); \ + goto error; \ + } \ + } + +#define SQLITE_STEP(db, stmt, code, error) \ + { \ + if (sqlite3_step(stmt) != code) { \ + LOG_DEBUG("DB", "Failed to step: %s", sqlite3_errmsg((sqlite3 *)db)); \ + goto error; \ + } \ + } + +#define SQLITE_STEP_ROW(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_ROW, error) +#define SQLITE_STEP_DONE(db, stmt, error) SQLITE_STEP(db, stmt, SQLITE_DONE, error) + +#define SQLITE_DO_ROLLBACK(db) sqlite3_exec((sqlite3 *)db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL); + +#define sqlite3_column_chars (const char *)sqlite3_column_text + +#define __INVALID_CHARS_DBPATH ":?!'\"" +#define __is_sql_str_invalid(str) strcspn(str, __INVALID_CHARS_DBPATH) != strlen(str) #endif /* __LKT_DATABASE_MACRO_H__ */ diff --git a/src/database/open.c b/src/database/open.c index 7d894398e82b9f8a20bda8f7f5ee0e172ce76d32..f9485ae245e88cc7e9fcf2fe8f5c0ee70f4eba75 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -15,29 +15,27 @@ extern unsigned char ___src_database_memory_sql[]; extern unsigned char ___src_database_disk_sql[]; -static const char *__pragmas = - "PRAGMA case_sensitive_like = false;\n" - "PRAGMA encoding = 'UTF-8';\n" - "PRAGMA synchronous = 0;\n" - "PRAGMA journal_mode = off;\n"; +static const char *__pragmas = "PRAGMA case_sensitive_like = false;\n" + "PRAGMA encoding = 'UTF-8';\n" + "PRAGMA synchronous = 0;\n" + "PRAGMA journal_mode = off;\n"; -#define HEAP_LIMIT_SOFT 100 * 1024 * 1024 -#define HEAP_LIMIT_HARD 150 * 1024 * 1024 +#define HEAP_LIMIT_SOFT 100 * 1024 * 1024 +#define HEAP_LIMIT_HARD 150 * 1024 * 1024 struct named_db { volatile sqlite3 *db; const char *name; }; -static struct stack db_stack = {0}; -static int atexited = 0; -static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; +static struct stack db_stack = { 0 }; +static int atexited = 0; +static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static inline void __dec(volatile sqlite3 *db, const char *name) { char SQL[LKT_MAX_SQLITE_STATEMENT]; - safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, - "UPDATE %s.misc SET opened = 0;", name); + safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, "UPDATE %s.misc SET opened = 0;", name); SQLITE_EXEC(db, SQL, error); LOG_INFO("DB", "Dec open count on db '%s'", name); return; @@ -53,9 +51,9 @@ database_close_all(void) return; struct named_db *item; while (!stack_empty(&db_stack)) { - stack_pop(&db_stack, (void **) &item); + stack_pop(&db_stack, (void **)&item); __dec(item->db, item->name); - free((void *) item->name); + free((void *)item->name); free(item); } LOG_INFO("GARBAGE", "All db closed"); @@ -65,8 +63,7 @@ database_close_all(void) static inline void __inc(volatile sqlite3 *db, const char *name, bool check) { - SQLITE_EXEC(db, "UPDATE misc SET opened = (SELECT opened + 1 FROM misc);", - error); + SQLITE_EXEC(db, "UPDATE misc SET opened = (SELECT opened + 1 FROM misc);", error); if (!atexited) { atexited = 1; @@ -90,26 +87,22 @@ error: bool database_new(volatile sqlite3 **db) { - *db = NULL; - static int flags = SQLITE_OPEN_READWRITE | - SQLITE_OPEN_SHAREDCACHE | - SQLITE_OPEN_NOFOLLOW | - SQLITE_OPEN_FULLMUTEX; - if (SQLITE_OK != sqlite3_enable_shared_cache(1) || - sqlite3_soft_heap_limit64(HEAP_LIMIT_SOFT) < 0 || + *db = NULL; + static int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SHAREDCACHE | SQLITE_OPEN_NOFOLLOW | SQLITE_OPEN_FULLMUTEX; + if (SQLITE_OK != sqlite3_enable_shared_cache(1) || sqlite3_soft_heap_limit64(HEAP_LIMIT_SOFT) < 0 || /* sqlite3_hard_heap_limit64(HEAP_LIMIT_HARD) < 0 || TODO: Find a way to call this * function only if available * on the system */ - SQLITE_OK != sqlite3_open_v2(":memory:", (sqlite3 **) db, flags, NULL)) + SQLITE_OK != sqlite3_open_v2(":memory:", (sqlite3 **)db, flags, NULL)) return false; - SQLITE_EXEC(*db, (const char *) ___src_database_memory_sql, err_not_init); + SQLITE_EXEC(*db, (const char *)___src_database_memory_sql, err_not_init); SQLITE_EXEC(*db, __pragmas, err_pragma); return true; err_not_init: *db = NULL; return false; err_pragma: - sqlite3_close((sqlite3 *) *db); + sqlite3_close((sqlite3 *)*db); *db = NULL; return false; } @@ -121,8 +114,7 @@ __attach(volatile sqlite3 *db, const char *name, const char *path) char SQL_ATTACH[LKT_MAX_SQLITE_STATEMENT]; bool ret = false; - safe_snprintf(SQL_ATTACH, LKT_MAX_SQLITE_STATEMENT, SQL_ATTACH_TEMPLATE, - path, name); + safe_snprintf(SQL_ATTACH, LKT_MAX_SQLITE_STATEMENT, SQL_ATTACH_TEMPLATE, path, name); SQLITE_EXEC(db, SQL_ATTACH, err_no_attach); LOG_INFO("DB", "Attached database '%s' with path '%s'", name, path); ret = true; @@ -137,8 +129,7 @@ __detach(volatile sqlite3 *db, const char *name) char SQL_DETACH[LKT_MAX_SQLITE_STATEMENT]; bool ret = false; - safe_snprintf(SQL_DETACH, LKT_MAX_SQLITE_STATEMENT, - SQL_DETACH_TEMPLATE, name); + safe_snprintf(SQL_DETACH, LKT_MAX_SQLITE_STATEMENT, SQL_DETACH_TEMPLATE, name); SQLITE_EXEC(db, SQL_DETACH, err_no_detach); LOG_INFO("DB", "Detached database '%s'", name); ret = true; @@ -149,13 +140,12 @@ err_no_detach: static inline bool __check_schema(volatile sqlite3 *db) { - static const char *SQL = - "SELECT COUNT(name)" - " FROM sqlite_master" - " WHERE type='table' AND name IN" - " ('kara', 'playlist', 'kara_playlist', 'queue', 'users', 'stickers'," - " '''stickers.kara''', '''stickers.plt''', 'updates', 'misc', " - " 'kara_type', 'kara_category', 'language');"; + static const char *SQL = "SELECT COUNT(name)" + " FROM sqlite_master" + " WHERE type='table' AND name IN" + " ('kara', 'playlist', 'kara_playlist', 'queue', 'users', 'stickers'," + " '''stickers.kara''', '''stickers.plt''', 'updates', 'misc', " + " 'kara_type', 'kara_category', 'language');"; sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_STEP_ROW(db, stmt, error); @@ -173,10 +163,9 @@ error: static inline bool __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 = NULL; - bool ret = false; + static const char *SQL_STMT = "SELECT name FROM pragma_database_list WHERE name = ?;\n"; + sqlite3_stmt *stmt = NULL; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); @@ -208,14 +197,12 @@ retry: /* Need init */ init: if (retry) { - LOG_ERROR("DB", "Retry to init database '%s', this is an error", - dbpath); + LOG_ERROR("DB", "Retry to init database '%s', this is an error", dbpath); return false; } retry = true; - LOG_WARN("DB", "Database '%s' is not correctly initialized, init it", - dbpath); - __detach(db, LKT_PROTECTED_DATABASE) ; + LOG_WARN("DB", "Database '%s' is not correctly initialized, init it", dbpath); + __detach(db, LKT_PROTECTED_DATABASE); if (database_init(dbpath)) goto retry; else { @@ -227,9 +214,10 @@ init: bool database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) { - RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " - LKT_PROTECTED_DATABASE " is protected, can't attach a " - "database with the same name", false); + RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), + " The database " LKT_PROTECTED_DATABASE " is protected, can't attach a " + "database with the same name", + false); if (__is_sql_str_invalid(name)) { LOG_ERROR("DB", "The database name '%s' is invalid", name); @@ -242,8 +230,10 @@ database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) } if (!__attach(db, name, dbpath)) { - LOG_ERROR("DB", "Failed to attach database named '%s' with " - "path '%s'", name, dbpath); + LOG_ERROR("DB", + "Failed to attach database named '%s' with " + "path '%s'", + name, dbpath); return false; } @@ -254,8 +244,8 @@ database_attach(volatile sqlite3 *db, const char *name, const char *dbpath) bool database_detach(volatile sqlite3 *db, const char *name) { - RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), " The database " - LKT_PROTECTED_DATABASE " is protected, can't detach it", false); + RETURN_UNLESS(strcasecmp(LKT_PROTECTED_DATABASE, name), + " The database " LKT_PROTECTED_DATABASE " is protected, can't detach it", false); if (__is_sql_str_invalid(name)) { LOG_ERROR("DB", "The database name '%s' is invalid", name); @@ -282,12 +272,13 @@ database_init(const char *dbpath) sqlite3 *db; if (SQLITE_OK != sqlite3_open(dbpath, &db)) goto error; - SQLITE_EXEC(db, (const char *) ___src_database_disk_sql, error); - LOG_INFO("DB", "Initialized the 'disk' database successfully, " - "path was '%s'", dbpath); + SQLITE_EXEC(db, (const char *)___src_database_disk_sql, error); + LOG_INFO("DB", + "Initialized the 'disk' database successfully, " + "path was '%s'", + dbpath); return true; error: - LOG_ERROR("DB", "Failed to init the 'disk' database, path was '%s'", - dbpath); + LOG_ERROR("DB", "Failed to init the 'disk' database, path was '%s'", dbpath); return false; } diff --git a/src/database/playlist.c b/src/database/playlist.c index 2037ad3ef135a99dbd96ecbc4d5556d7a48dfd67..017e5af153d068195e42fb831d9805620f2a2925 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -12,11 +12,10 @@ bool database_plt_touch(volatile sqlite3 *db, const char *name) { - static const char *SQL_STMT = "SELECT name FROM playlist WHERE name = ?"; - static const char *SQL_TOUCH = - "UPDATE playlist SET last_update = strftime('%s', 'now') WHERE name = ?"; - sqlite3_stmt *stmt = NULL; - bool sta = false; + static const char *SQL_STMT = "SELECT name FROM playlist WHERE name = ?"; + static const char *SQL_TOUCH = "UPDATE playlist SET last_update = strftime('%s', 'now') WHERE name = ?"; + sqlite3_stmt *stmt = NULL; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); @@ -42,11 +41,10 @@ error: bool database_plt_create(volatile sqlite3 *db, const char *name) { - static const char *SQL_STMT = - "INSERT INTO playlist (name, last_update) " - "VALUES (?, strftime('%s', 'now'));"; + static const char *SQL_STMT = "INSERT INTO playlist (name, last_update) " + "VALUES (?, strftime('%s', 'now'));"; sqlite3_stmt *stmt = NULL; - bool sta = false; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_STEP_DONE(db, stmt, error); @@ -60,8 +58,8 @@ bool database_plt_remove(volatile sqlite3 *db, const char *name) { static const char *SQL_STMT = "DELETE FROM playlist WHERE name = ?;"; - sqlite3_stmt *stmt = NULL; - bool sta = false; + sqlite3_stmt *stmt = NULL; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_STEP_DONE(db, stmt, error); @@ -74,12 +72,11 @@ error: bool database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos) { - static const char *SQL_STMT = - "DELETE FROM kara_playlist " - "WHERE playlist_id = (SELECT id FROM playlist WHERE name = ? LIMIT 1) " - "AND kara_id = ?;"; + static const char *SQL_STMT = "DELETE FROM kara_playlist " + "WHERE playlist_id = (SELECT id FROM playlist WHERE name = ? LIMIT 1) " + "AND kara_id = ?;"; sqlite3_stmt *stmt = NULL; - bool sta = false; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_BIND_INT(db, stmt, 2, pos, error); @@ -93,11 +90,10 @@ error: bool 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 = ?);"; + static const char *SQL_STMT = "DELETE FROM kara_playlist " + "WHERE playlist_id = (SELECT id FROM playlist WHERE name = ?);"; sqlite3_stmt *stmt = NULL; - bool sta = false; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); SQLITE_STEP_DONE(db, stmt, error); @@ -111,8 +107,8 @@ bool 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; - bool sta = false; + sqlite3_stmt *stmt = NULL; + bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, new_name, error); SQLITE_BIND_TEXT(db, stmt, 2, old_name, error); @@ -126,9 +122,8 @@ error: bool database_plt_export(volatile sqlite3 *db, const char *name) { - static const char *SQL_SCHEM = - "CREATE TABLE IF NOT EXISTS %s.content" - "( kara_id INTEGER PRIMARY KEY NOT NULL CHECK(kara_id > 0) );"; + static const char *SQL_SCHEM = "CREATE TABLE IF NOT EXISTS %s.content" + "( kara_id INTEGER PRIMARY KEY NOT NULL CHECK(kara_id > 0) );"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; int code, ret = false; sqlite3_stmt *stmt = NULL; @@ -138,17 +133,17 @@ database_plt_export(volatile sqlite3 *db, const char *name) goto error; } - GOTO_UNLESS(strcasecmp(name, LKT_PROTECTED_DATABASE), "Name '" - LKT_PROTECTED_DATABASE "' is protected, you can't use " - "it for a playlist name", error); + GOTO_UNLESS(strcasecmp(name, LKT_PROTECTED_DATABASE), + "Name '" LKT_PROTECTED_DATABASE "' is protected, you can't use " + "it for a playlist name", + error); safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_SCHEM, name); SQLITE_PREPARE(db, stmt, SQL_STMT, error); code = sqlite3_step(stmt); if (code != SQLITE_DONE && code != SQLITE_OK) { - LOG_ERROR("DB", "Failed to create schema: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to create schema: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -161,12 +156,11 @@ error: bool database_plt_import(volatile sqlite3 *db, const char *name) { - static const char *SQL_SCHEM = - "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" - " SELECT" - " %s.content.kara_id," - " ( SELECT id FROM playlist WHERE name = %s LIMIT 1 )" - " FROM %s.content;\n"; + static const char *SQL_SCHEM = "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" + " SELECT" + " %s.content.kara_id," + " ( SELECT id FROM playlist WHERE name = %s LIMIT 1 )" + " FROM %s.content;\n"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT], ret = false; if (__is_sql_str_invalid(name)) { @@ -174,12 +168,12 @@ database_plt_import(volatile sqlite3 *db, const char *name) goto error; } - GOTO_UNLESS(strcasecmp(name, LKT_PROTECTED_DATABASE), "Name '" - LKT_PROTECTED_DATABASE "' is protected, you can't use " - "it for a playlist name", error); + GOTO_UNLESS(strcasecmp(name, LKT_PROTECTED_DATABASE), + "Name '" LKT_PROTECTED_DATABASE "' is protected, you can't use " + "it for a playlist name", + error); - safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_SCHEM, name, - name, name); + safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_SCHEM, name, name, name); SQLITE_EXEC(db, SQL_STMT, error); ret = true; error: @@ -193,9 +187,8 @@ database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri sqlite3_stmt *stmt; if (uri->is_int) { - static const char *SQL = - "INSERT OR REPLACE INTO kara_playlist (kara_id, playlist_id) " - " VALUES (?, (SELECT id FROM playlist WHERE name = ? COLLATE NOCASE));"; + static const char *SQL = "INSERT OR REPLACE INTO kara_playlist (kara_id, playlist_id) " + " VALUES (?, (SELECT id FROM playlist WHERE name = ? COLLATE NOCASE));"; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, uri->id, error); SQLITE_BIND_TEXT(db, stmt, 2, name, error); @@ -204,18 +197,17 @@ database_plt_add_uri(volatile sqlite3 *db, const char *name, struct lkt_uri *uri } else { - static const char *SQL = - "INSERT OR REPLACE INTO kara_playlist (kara_id, playlist_id) " - "SELECT" - " kara.id," - " (SELECT playlist.id FROM playlist WHERE name = ? COLLATE NOCASE)" - "FROM kara WHERE kara.%s LIKE ?;"; + static const char *SQL = "INSERT OR REPLACE INTO kara_playlist (kara_id, playlist_id) " + "SELECT" + " kara.id," + " (SELECT playlist.id FROM playlist WHERE name = ? COLLATE NOCASE)" + "FROM kara WHERE kara.%s LIKE ?;"; char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, uri->column_name); SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, name, error); - SQLITE_BIND_TEXT(db, stmt, 2, (char *) uri->value, error); + SQLITE_BIND_TEXT(db, stmt, 2, (char *)uri->value, error); SQLITE_STEP_DONE(db, stmt, error); sta = true; } diff --git a/src/database/queue.c b/src/database/queue.c index 8cf74c0e295d1890e9d0e5a19aa02f881056a9f7..d5b509f9cdcb5f6b26e4eeaf1dc3019613f71b1f 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -10,36 +10,36 @@ #include "macro.h" -// *INDENT-OFF* -#define sqlite_just_exec(func, query) \ - bool func (volatile sqlite3 *db) { \ - SQLITE_EXEC(db, "BEGIN TRANSACTION;" query "COMMIT;", error); \ - return true; \ - error: \ - SQLITE_DO_ROLLBACK(db); \ - return false; \ +#define sqlite_just_exec(func, query) \ + bool func(volatile sqlite3 *db) \ + { \ + SQLITE_EXEC(db, "BEGIN TRANSACTION;" query "COMMIT;", error); \ + return true; \ + error: \ + SQLITE_DO_ROLLBACK(db); \ + return false; \ } -sqlite_just_exec(database_queue_toggle_pause, "UPDATE queue_state SET paused = 1 - paused;") -sqlite_just_exec(database_queue_crop, "DELETE FROM queue WHERE queue.kara_id <>" - " (SELECT current FROM queue_state LIMIT 1);") -sqlite_just_exec(database_queue_stop, "UPDATE queue_state SET current = NULL;") -sqlite_just_exec(database_queue_clear, "DELETE FROM queue;" - "DELETE FROM queue_tmp;" - "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" - "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" - "UPDATE queue_state SET current = NULL;") +// clang-format off +sqlite_just_exec(database_queue_toggle_pause, "UPDATE queue_state SET paused = 1 - paused;"); +sqlite_just_exec(database_queue_crop, "DELETE FROM queue WHERE queue.kara_id <> (SELECT current FROM queue_state LIMIT 1);"); +sqlite_just_exec(database_queue_stop, "UPDATE queue_state SET current = NULL;"); +sqlite_just_exec(database_queue_clear, "DELETE FROM queue;" + "DELETE FROM queue_tmp;" + "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" + "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" + "UPDATE queue_state SET current = NULL;"); sqlite_just_exec(database_config_queue_default, "UPDATE queue_state SET volume = 100, paused = 1," " random = 0, repeat = 0, single = 0, consume = 0," - " current = NULL, duration = 0;") -sqlite_just_exec(database_queue_flat, "UPDATE queue SET priority = 1;"); + " current = NULL, duration = 0;"); +sqlite_just_exec(database_queue_flat, "UPDATE queue SET priority = 1;"); +// clang-format on #undef sqlite_just_exec -// *INDENT-ON* static inline void __queue_resequence(volatile sqlite3 *db) { - static const char *SQL = - "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';"; + static const char *SQL = "UPDATE " LKT_PROTECTED_DATABASE + ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';"; SQLITE_EXEC(db, SQL, error); LOG_INFO("DB", "Re-sequenced the queue"); return; @@ -51,9 +51,7 @@ error: bool 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;" ; + const char *SQL = paused ? "UPDATE queue_state SET paused = 1;" : "UPDATE queue_state SET paused = 0;"; SQLITE_EXEC(db, SQL, error); return true; error: @@ -63,13 +61,12 @@ error: bool database_queue_state(volatile sqlite3 *db, struct lkt_queue_state *res) { - static const char *SQL_STMT = - "SELECT" - " volume, paused, random, repeat, single, current, duration, consume," - " (SELECT COUNT(*) FROM queue) AS length " - "FROM queue_state;\n"; + static const char *SQL_STMT = "SELECT" + " volume, paused, random, repeat, single, current, duration, consume," + " (SELECT COUNT(*) FROM queue) AS length " + "FROM queue_state;\n"; sqlite3_stmt *stmt = 0; - bool ret = false; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_STEP_ROW(db, stmt, error); @@ -91,8 +88,8 @@ database_queue_state(volatile sqlite3 *db, struct lkt_queue_state *res) res->duration = sqlite3_column_int(stmt, 6); res->consume = sqlite3_column_int(stmt, 7); - res->length = sqlite3_column_int(stmt, 8); - ret = true; + res->length = sqlite3_column_int(stmt, 8); + ret = true; error: sqlite3_finalize(stmt); return ret; @@ -101,14 +98,13 @@ error: bool 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" - " FROM kara" - " JOIN queue ON kara_id = kara.id" - " JOIN queue_state ON current = position"; + static const char *SQL_STMT = "SELECT song_name, source_name, category, language, author_name, " + "song_type, song_number, kara_id" + " FROM kara" + " JOIN queue ON kara_id = kara.id" + " JOIN queue_state ON current = position"; sqlite3_stmt *stmt = 0; - int ret = false; + int ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_STEP_ROW(db, stmt, error); @@ -117,12 +113,12 @@ database_queue_current_kara(volatile sqlite3 *db, struct kara_metadata *res, int Most of the time it won't be NULL. */ if (!res) goto no_metadata; - strncpy(res->song_name, sqlite3_column_chars(stmt, 0), LEKTOR_TAG_MAX - 1); + strncpy(res->song_name, sqlite3_column_chars(stmt, 0), LEKTOR_TAG_MAX - 1); strncpy(res->source_name, sqlite3_column_chars(stmt, 1), LEKTOR_TAG_MAX - 1); - strncpy(res->category, sqlite3_column_chars(stmt, 2), LEKTOR_TAG_MAX - 1); - strncpy(res->language, sqlite3_column_chars(stmt, 3), LEKTOR_TAG_MAX - 1); + strncpy(res->category, sqlite3_column_chars(stmt, 2), LEKTOR_TAG_MAX - 1); + strncpy(res->language, sqlite3_column_chars(stmt, 3), LEKTOR_TAG_MAX - 1); strncpy(res->author_name, sqlite3_column_chars(stmt, 4), LEKTOR_TAG_MAX - 1); - strncpy(res->song_type, sqlite3_column_chars(stmt, 5), LEKTOR_TAG_MAX - 1); + strncpy(res->song_type, sqlite3_column_chars(stmt, 5), LEKTOR_TAG_MAX - 1); res->song_number = sqlite3_column_int(stmt, 6); no_metadata: /* Most of the time this will be NULL. */ @@ -135,21 +131,21 @@ error: return ret; } -#define reorder(db, prio, error) \ - if (prio > 1) { \ - if (__queue_reorder(db)) { \ - LOG_INFO("DB", "Queue has been reordered"); \ - } else { \ - LOG_INFO("DB", "Failed to reorder"); \ - goto error; \ - } \ +#define reorder(db, prio, error) \ + if (prio > 1) { \ + if (__queue_reorder(db)) { \ + LOG_INFO("DB", "Queue has been reordered"); \ + } else { \ + LOG_INFO("DB", "Failed to reorder"); \ + goto error; \ + } \ } static bool __queue_reorder(volatile sqlite3 *db) { -#define CURRENT_POS_OR_0 /* To move karas after the current */ \ - "(SELECT CASE WHEN (SELECT current FROM queue_state) IS NULL THEN 0" \ +#define CURRENT_POS_OR_0 /* To move karas after the current */ \ + "(SELECT CASE WHEN (SELECT current FROM queue_state) IS NULL THEN 0" \ " ELSE (SELECT current FROM queue_state) END AS val LIMIT 1)" static const char *SQL_REORDER = /* Clear the TMP */ @@ -177,8 +173,7 @@ error: } static bool -queue_add_with_col_like_str(volatile 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) { static const char *SQL_STMT = /* Add correspondig karas into the queue */ @@ -258,9 +253,8 @@ error: bool database_queue_add_id(volatile sqlite3 *db, int id, int priority) { - static const char *SQL_STMT = - "INSERT INTO queue (kara_id, priority) VALUES (?,?);"; - sqlite3_stmt *stmt = NULL; + static const char *SQL_STMT = "INSERT INTO queue (kara_id, priority) VALUES (?,?);"; + sqlite3_stmt *stmt = NULL; SQLITE_EXEC(db, "BEGIN TRANSACTION;", error); SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_INT(db, stmt, 1, id, error); @@ -300,8 +294,10 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int prio) case uri_playlist: return database_queue_add_plt(db, uri->value, prio); default: - LOG_WARN("DB", "Add to queue for uri of type %d is not" - " implemented", uri->type); + LOG_WARN("DB", + "Add to queue for uri of type %d is not" + " implemented", + uri->type); return false; } } @@ -316,11 +312,12 @@ database_queue_del_id(volatile sqlite3 *db, int id) "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" /* Move the current 'pointer' */ "UPDATE queue_state SET current = (SELECT NULLIF(COUNT(position), 0) FROM queue JOIN queue_state ON position <= current AND kara_id != %d);" - "DELETE FROM queue WHERE kara_id = %d;" /* Delete any kara with the specified id */ + "DELETE FROM queue WHERE kara_id = %d;" /* Delete any kara with the specified id */ "INSERT INTO queue_tmp(priority, position, kara_id) SELECT priority, position, kara_id FROM queue ORDER BY position ASC;" "DELETE FROM queue;" "INSERT INTO queue(priority, position, kara_id) SELECT priority, ROW_NUMBER() OVER(ORDER BY position ASC), kara_id FROM queue_tmp;" - "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';" /* Update the sqlite_sequence */ + "UPDATE " LKT_PROTECTED_DATABASE + ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';" /* Update the sqlite_sequence */ /* Clear the TMP */ "DELETE FROM queue_tmp;" "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" @@ -338,8 +335,8 @@ error: bool database_queue_del_pos(volatile sqlite3 *db, int pos) { - bool sta = false; - sqlite3_stmt *stmt = NULL; + bool sta = false; + sqlite3_stmt *stmt = NULL; struct lkt_queue_state queue = { .current = -1 }; RETURN_UNLESS(database_queue_state(db, &queue), "Failed to get the queue state", false); @@ -417,8 +414,8 @@ database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]) " ORDER BY CASE WHEN (SELECT random FROM queue_state LIMIT 1) = 1 THEN RANDOM() ELSE 2 END" " LIMIT 1"; char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT]; - bool status = false; - int code = SQLITE_OK, id; + bool status = false; + int code = SQLITE_OK, id; sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -427,8 +424,7 @@ database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]) if (code == SQLITE_ROW) { id = MAX(1, sqlite3_column_int(stmt, 1)); - safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, - "UPDATE queue_state SET current = %d;", id); + safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, "UPDATE queue_state SET current = %d;", id); if (filepath != NULL) strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX); @@ -444,8 +440,7 @@ database_queue_next(volatile sqlite3 *db, char filepath[PATH_MAX]) } else { - LOG_ERROR("DB", "Failed to fetch next kara: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to fetch next kara: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -472,18 +467,17 @@ database_queue_skip_current(volatile sqlite3 *db, char filepath[PATH_MAX]) bool database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]) { - static const char *SQL_STMT = - "SELECT file_path, position " - " FROM kara" - " JOIN queue ON kara.id = queue.kara_id AND available = 1" - " JOIN queue_state ON CASE " - " WHEN (SELECT single FROM queue_state LIMIT 1) = 1 THEN position = current" - " ELSE queue.position < queue_state.current" - " END" - " ORDER BY position DESC LIMIT 1;"; + static const char *SQL_STMT = "SELECT file_path, position " + " FROM kara" + " JOIN queue ON kara.id = queue.kara_id AND available = 1" + " JOIN queue_state ON CASE " + " WHEN (SELECT single FROM queue_state LIMIT 1) = 1 THEN position = current" + " ELSE queue.position < queue_state.current" + " END" + " ORDER BY position DESC LIMIT 1;"; char SQL_UPDATE[LKT_MAX_SQLITE_STATEMENT]; - bool status = false; - int code = SQLITE_OK, id; + bool status = false; + int code = SQLITE_OK, id; sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -491,8 +485,7 @@ database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]) if (code == SQLITE_ROW) { id = MAX(1, sqlite3_column_int(stmt, 1)); - safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, - "UPDATE queue_state SET current = %d;", id); + safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, "UPDATE queue_state SET current = %d;", id); if (filepath != NULL) strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX); @@ -508,8 +501,7 @@ database_queue_prev(volatile sqlite3 *db, char filepath[PATH_MAX]) } else { - LOG_ERROR("DB", "Failed to fetch prev kara: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -523,16 +515,12 @@ error: bool database_queue_swap(volatile sqlite3 *db, int from, int to) { - static const char *SQL_POP_ROW_1 = - "SELECT position, priority, kara_id FROM queue WHERE position = ?;"; - static const char *SQL_POP_ROW_2 = - "DELETE FROM queue WHERE position = ?;"; - static const char *SQL_SLAP_MAX = - "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence" - " SET seq = (SELECT COUNT(position) FROM queue)" - " WHERE name = 'queue';"; - static const char *SQL_PUSH_ROW = - "INSERT INTO queue (position, priority, kara_id) VALUES (?, ?, ?);"; + static const char *SQL_POP_ROW_1 = "SELECT position, priority, kara_id FROM queue WHERE position = ?;"; + static const char *SQL_POP_ROW_2 = "DELETE FROM queue WHERE position = ?;"; + static const char *SQL_SLAP_MAX = "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence" + " SET seq = (SELECT COUNT(position) FROM queue)" + " WHERE name = 'queue';"; + static const char *SQL_PUSH_ROW = "INSERT INTO queue (position, priority, kara_id) VALUES (?, ?, ?);"; struct { int position; @@ -544,25 +532,25 @@ database_queue_swap(volatile sqlite3 *db, int from, int to) int tmp_kara_id; /* Get one kara from the 'queue' and delete it */ -#define POP_QUEUE(name) \ - SQLITE_PREPARE(db, stmt, SQL_POP_ROW_1, error); \ - SQLITE_BIND_INT(db, stmt, 1, name, error); \ - SQLITE_STEP_ROW(db, stmt, error); \ - kara_##name.position = sqlite3_column_int(stmt, 0); \ - kara_##name.priority = sqlite3_column_int(stmt, 1); \ - kara_##name.kara_id = sqlite3_column_int(stmt, 2); \ - sqlite3_finalize(stmt); \ - SQLITE_PREPARE(db, stmt, SQL_POP_ROW_2, error); \ - SQLITE_BIND_INT(db, stmt, 1, name, error); \ - SQLITE_STEP_DONE(db, stmt, error); \ +#define POP_QUEUE(name) \ + SQLITE_PREPARE(db, stmt, SQL_POP_ROW_1, error); \ + SQLITE_BIND_INT(db, stmt, 1, name, error); \ + SQLITE_STEP_ROW(db, stmt, error); \ + kara_##name.position = sqlite3_column_int(stmt, 0); \ + kara_##name.priority = sqlite3_column_int(stmt, 1); \ + kara_##name.kara_id = sqlite3_column_int(stmt, 2); \ + sqlite3_finalize(stmt); \ + SQLITE_PREPARE(db, stmt, SQL_POP_ROW_2, error); \ + SQLITE_BIND_INT(db, stmt, 1, name, error); \ + SQLITE_STEP_DONE(db, stmt, error); \ sqlite3_finalize(stmt); /* Push one kara on the 'queue' */ -#define PUSH_QUEUE(name) \ - SQLITE_PREPARE(db, stmt, SQL_PUSH_ROW, error); \ - SQLITE_BIND_INT(db, stmt, 1, kara_##name.position, error); \ - SQLITE_BIND_INT(db, stmt, 2, kara_##name.priority, error); \ - SQLITE_BIND_INT(db, stmt, 3, kara_##name.kara_id, error); \ - SQLITE_STEP_DONE(db, stmt, error); \ +#define PUSH_QUEUE(name) \ + SQLITE_PREPARE(db, stmt, SQL_PUSH_ROW, error); \ + SQLITE_BIND_INT(db, stmt, 1, kara_##name.position, error); \ + SQLITE_BIND_INT(db, stmt, 2, kara_##name.priority, error); \ + SQLITE_BIND_INT(db, stmt, 3, kara_##name.kara_id, error); \ + SQLITE_STEP_DONE(db, stmt, error); \ sqlite3_finalize(stmt); SQLITE_EXEC(db, "BEGIN TRANSACTION;", error_no_rollback); @@ -573,7 +561,7 @@ database_queue_swap(volatile sqlite3 *db, int from, int to) kara_to.kara_id = tmp_kara_id; PUSH_QUEUE(from); PUSH_QUEUE(to); - SQLITE_EXEC(db, SQL_SLAP_MAX, error_no_stmt); + SQLITE_EXEC(db, SQL_SLAP_MAX, error_no_stmt); SQLITE_EXEC(db, "END TRANSACTION;", error_no_stmt); #undef PUSH_QUEUE @@ -661,11 +649,10 @@ error_no_rollback: bool database_queue_play(volatile sqlite3 *db, int pos) { - static const char *SQL_STMT = - "UPDATE queue_state SET current = ?, paused = 0" - " WHERE current <= 0 OR current IS NULL"; - int code = SQLITE_OK; - bool ret = false; + static const char *SQL_STMT = "UPDATE queue_state SET current = ?, paused = 0" + " WHERE current <= 0 OR current IS NULL"; + int code = SQLITE_OK; + bool ret = false; sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); @@ -674,8 +661,7 @@ database_queue_play(volatile sqlite3 *db, int pos) code = sqlite3_step(stmt); if (code != SQLITE_OK && code != SQLITE_DONE) { - LOG_ERROR("DB", "Failed to update queue_state: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to update queue_state: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -706,13 +692,12 @@ error: bool database_queue_get_current_file(volatile sqlite3 *db, char filepath[PATH_MAX]) { - static const char *SQL_STMT = - "SELECT file_path" - " FROM kara" - " JOIN queue ON kara.id = queue.kara_id" - " JOIN queue_state ON queue.position = queue_state.current"; - bool status = false; - int code = SQLITE_OK; + static const char *SQL_STMT = "SELECT file_path" + " FROM kara" + " JOIN queue ON kara.id = queue.kara_id" + " JOIN queue_state ON queue.position = queue_state.current"; + bool status = false; + int code = SQLITE_OK; sqlite3_stmt *stmt = NULL; if (filepath == NULL) @@ -727,8 +712,7 @@ database_queue_get_current_file(volatile sqlite3 *db, char filepath[PATH_MAX]) } else { - LOG_ERROR("DB", "Failed to fetch prev kara: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed to fetch prev kara: %s", sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -741,7 +725,7 @@ error: bool database_get_kara_path(volatile sqlite3 *db, int id, char filepath[PATH_MAX]) { - sqlite3_stmt *stmt = NULL; + sqlite3_stmt *stmt = NULL; static const char *SQL = "SELECT file_path FROM kara WHERE id = ? AND available = 1;"; RETURN_UNLESS(id && db, "Invalid argument", false); SQLITE_PREPARE(db, stmt, SQL, error); @@ -758,14 +742,13 @@ error: bool database_get_kara_position(volatile sqlite3 *db, int id, int *pos) { - sqlite3_stmt *stmt = NULL; - static const char *SQL = - "WITH content AS (" - " SELECT kara.id AS id, position" - " FROM queue" - " JOIN kara ON kara_id = kara.id" - " GROUP BY position ORDER BY position ASC, priority DESC)" - "SELECT id, position FROM content WHERE id = ?;"; + sqlite3_stmt *stmt = NULL; + static const char *SQL = "WITH content AS (" + " SELECT kara.id AS id, position" + " FROM queue" + " JOIN kara ON kara_id = kara.id" + " GROUP BY position ORDER BY position ASC, priority DESC)" + "SELECT id, position FROM content WHERE id = ?;"; RETURN_UNLESS(db && pos, "Invalid argument", false); SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, id, error); @@ -794,41 +777,40 @@ error: bool database_queue_shuffle(volatile sqlite3 *db) { - const char *SQL = - "BEGIN TRANSACTION;" - /* Create temporary queue */ - "DELETE FROM queue_tmp;" - "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" - /* When current is NULL, that thing is also NULL, so no insertion is done */ - "INSERT INTO queue_tmp (kara_id, priority)" - " SELECT kara_id, 5" - " FROM queue" - " JOIN queue_state ON queue.position = queue_state.current;" - /* Insert the others karas */ - "INSERT INTO queue_tmp (kara_id, priority)" - " SELECT kara_id, priority" - " FROM queue" - " JOIN queue_state ON" - " queue.position <> CASE" - " WHEN queue_state.current IS NOT NULL THEN queue_state.current" - " ELSE 0 END" - " ORDER BY RANDOM();" - /* Do the insertion in the other way */ - "DELETE FROM queue;" - "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" - "INSERT INTO queue (position, kara_id, priority)" - " SELECT position, kara_id, priority" - " FROM queue_tmp" - " ORDER BY priority, position;" - /* Set the current to the right kara when needed */ - "UPDATE queue_state" - " SET current = CASE" - " WHEN current NOT NULL THEN 1" - " ELSE NULL END;" - /* Clear the TMP */ - "DELETE FROM queue_tmp;" - "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" - "COMMIT;"; + const char *SQL = "BEGIN TRANSACTION;" + /* Create temporary queue */ + "DELETE FROM queue_tmp;" + "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" + /* When current is NULL, that thing is also NULL, so no insertion is done */ + "INSERT INTO queue_tmp (kara_id, priority)" + " SELECT kara_id, 5" + " FROM queue" + " JOIN queue_state ON queue.position = queue_state.current;" + /* Insert the others karas */ + "INSERT INTO queue_tmp (kara_id, priority)" + " SELECT kara_id, priority" + " FROM queue" + " JOIN queue_state ON" + " queue.position <> CASE" + " WHEN queue_state.current IS NOT NULL THEN queue_state.current" + " ELSE 0 END" + " ORDER BY RANDOM();" + /* Do the insertion in the other way */ + "DELETE FROM queue;" + "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" + "INSERT INTO queue (position, kara_id, priority)" + " SELECT position, kara_id, priority" + " FROM queue_tmp" + " ORDER BY priority, position;" + /* Set the current to the right kara when needed */ + "UPDATE queue_state" + " SET current = CASE" + " WHEN current NOT NULL THEN 1" + " ELSE NULL END;" + /* Clear the TMP */ + "DELETE FROM queue_tmp;" + "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" + "COMMIT;"; SQLITE_EXEC(db, SQL, error); return true; error: @@ -837,8 +819,7 @@ error: } bool -database_queue_list(volatile 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 (" @@ -854,8 +835,8 @@ database_queue_list(volatile sqlite3 *db, size_t from, size_t to, sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - SQLITE_BIND_INT(db, stmt, 1, (int) from, error); - SQLITE_BIND_INT(db, stmt, 2, (int) to, error); + SQLITE_BIND_INT(db, stmt, 1, (int)from, error); + SQLITE_BIND_INT(db, stmt, 2, (int)to, error); for (;;) { code = sqlite3_step(stmt); @@ -877,7 +858,7 @@ database_queue_list(volatile sqlite3 *db, size_t from, size_t to, goto done; else { - LOG_ERROR("DB", "Failed: %s", sqlite3_errmsg((sqlite3 *) db)); + LOG_ERROR("DB", "Failed: %s", sqlite3_errmsg((sqlite3 *)db)); break; } } @@ -892,13 +873,12 @@ error: bool database_queue_dump(volatile sqlite3 *db, const char *plt_name) { - static const char *SQL = - "WITH plt_id AS (SELECT playlist.id AS id FROM playlist" - " WHERE name COLLATE nocase = ?) " - "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" - " SELECT DISTINCT kara_id, plt_id.id" - " FROM queue, plt_id" - " ORDER BY RANDOM();"; + static const char *SQL = "WITH plt_id AS (SELECT playlist.id AS id FROM playlist" + " WHERE name COLLATE nocase = ?) " + "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" + " SELECT DISTINCT kara_id, plt_id.id" + " FROM queue, plt_id" + " ORDER BY RANDOM();"; sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_TEXT(db, stmt, 1, plt_name, error); @@ -913,16 +893,15 @@ error: bool 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 = 0; + static const char *SQL_STMT = "SELECT position FROM queue WHERE kara_id = ? LIMIT 1"; + int ret = 0; sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_INT(db, stmt, 1, id, error); SQLITE_STEP_ROW(db, stmt, error); *out_pos = sqlite3_column_int(stmt, 0); - ret = true; + ret = true; error: sqlite3_finalize(stmt); return ret; diff --git a/src/database/stickers.c b/src/database/stickers.c index a90685bf54c3f54b8bbd84ea706c59af67921687..6af86e253627de5b4c3b6deaad260b81e732e692 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -13,17 +13,16 @@ static inline int __check_type(const char *type) { - return ! ( STR_MATCH(type, "kara") || STR_MATCH(type, "plt") ); + return !(STR_MATCH(type, "kara") || STR_MATCH(type, "plt")); } bool database_sticker_create(volatile sqlite3 *db, const char *name) { - static const char *INSERT = - "INSERT INTO 'stickers' (id, name)" - " SELECT CASE WHEN MAX(id) IS NULL THEN 1 ELSE MAX(id) + 1 END, ?" - " FROM 'stickers'" - "WHERE (SELECT COUNT(*) FROM 'stickers' WHERE name = ?) = 0;"; + static const char *INSERT = "INSERT INTO 'stickers' (id, name)" + " SELECT CASE WHEN MAX(id) IS NULL THEN 1 ELSE MAX(id) + 1 END, ?" + " FROM 'stickers'" + "WHERE (SELECT COUNT(*) FROM 'stickers' WHERE name = ?) = 0;"; sqlite3_stmt *stmt; int ret = false; if (strlen(name) == 0) @@ -56,14 +55,12 @@ error: } bool -database_sticker_set(volatile 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) { - static const char *SQL_TEMPLATE = - "INSERT OR REPLACE INTO 'stickers.%s' (id, sticker, value) " - "SELECT ?, 'stickers'.id, ? " - "FROM 'stickers' " - "WHERE 'stickers'.name = ?;"; + static const char *SQL_TEMPLATE = "INSERT OR REPLACE INTO 'stickers.%s' (id, sticker, value) " + "SELECT ?, 'stickers'.id, ? " + "FROM 'stickers' " + "WHERE 'stickers'.name = ?;"; char SQL[LKT_MAX_SQLITE_STATEMENT]; sqlite3_stmt *stmt; int ret = false; @@ -93,8 +90,7 @@ error: } bool -database_sticker_delete_specify(volatile 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; @@ -104,16 +100,20 @@ database_sticker_delete_specify(volatile sqlite3 *db, const char *type, return false; } - safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, "DELETE FROM 'stickers.%s' " - "WHERE 'stickers.%s' = ? ", type, type); + safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, + "DELETE FROM 'stickers.%s' " + "WHERE 'stickers.%s' = ? ", + type, type); /* If there is a name specified. */ if (!name) { strncat(SQL, ";", LKT_MAX_SQLITE_STATEMENT - 1); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; } else { - strncat(SQL, "AND sticker = (SELECT id FROM 'stickers' WHERE name = ?" - " LIMIT 1);", LKT_MAX_SQLITE_STATEMENT - 1); + strncat(SQL, + "AND sticker = (SELECT id FROM 'stickers' WHERE name = ?" + " LIMIT 1);", + LKT_MAX_SQLITE_STATEMENT - 1); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; } diff --git a/src/database/update.c b/src/database/update.c index 8a25b453ab121128e91bc90af9f981afb0cd6440..1b72f4e2400928ca20b14ede086a35e0c8224954 100644 --- a/src/database/update.c +++ b/src/database/update.c @@ -24,7 +24,7 @@ __add_kara_to_update_job(volatile sqlite3 *db, size_t id) SQL = "INSERT INTO updates (job, kara_id) " "SELECT MAX(update_job), ? FROM misc;"; SQLITE_PREPARE(db, stmt, SQL, error); - SQLITE_BIND_INT(db, stmt, 1, (int) id, error); + SQLITE_BIND_INT(db, stmt, 1, (int)id, error); } else { SQL = "INSERT INTO updates (job, kara_id) " "SELECT MAX(update_job), last_insert_rowid() FROM misc;"; @@ -40,8 +40,8 @@ static inline bool __is_id_in_database(volatile sqlite3 *db, size_t id) { static const char *SQL = "SELECT id FROM kara WHERE id = ?;"; - sqlite3_stmt *stmt = NULL; - bool ret = false; + sqlite3_stmt *stmt = NULL; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, id, error); @@ -59,16 +59,14 @@ static inline bool __database_add_kara(volatile sqlite3 *db, const char *filename) { RETURN_UNLESS(db || filename, "Invalid argument", false); - static const char *SQL_STMT = - "INSERT INTO " - "kara (song_name, source_name, category, song_type, language, " - "file_path, is_new, author_name, song_number)" - "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?"; - static const char *SQL_STMT_WITH_ID = - "INSERT INTO " - "kara (song_name, source_name, category, song_type, language, " - "file_path, is_new, author_name, song_number, id)" - "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"; + static const char *SQL_STMT = "INSERT INTO " + "kara (song_name, source_name, category, song_type, language, " + "file_path, is_new, author_name, song_number)" + "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?"; + static const char *SQL_STMT_WITH_ID = "INSERT INTO " + "kara (song_name, source_name, category, song_type, language, " + "file_path, is_new, author_name, song_number, id)" + "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"; sqlite3_stmt *stmt = NULL; long status = false, kara_id = 0; struct kara_metadata data; @@ -87,43 +85,43 @@ __database_add_kara(volatile sqlite3 *db, const char *filename) path[PATH_MAX - 1] = '\0'; memcpy(path, filename, (strlen(filename) + 1) * sizeof(char)); while (NULL != (token = strtok_r(path, "/", &saveptr))) { - id = token; + id = token; path = NULL; } size_t id_len = strspn(id, "0123456789"); - id[id_len] = '\0'; /* Replace the . of .mkv */ + id[id_len] = '\0'; /* Replace the . of .mkv */ STRTOL(kara_id, id, token, id_len); if (!id_len && STR_MATCH(&token[1], "mkv")) { /* Check if found id is already in use. Only do that because we are * populating the database here. */ if (__is_id_in_database(db, kara_id)) { - LOG_WARN("DB", "Detected id %lu for file %s is already taken, generating a new one. " - "Your database may be inconsistent", kara_id, filename); + LOG_WARN("DB", + "Detected id %lu for file %s is already taken, generating a new one. " + "Your database may be inconsistent", + kara_id, filename); goto generate_new_id; } /* Use the found id, most of the time, normally */ LOG_INFO("DB", "Found id '%ld' in kara '%s'", kara_id, filename); SQLITE_PREPARE(db, stmt, SQL_STMT_WITH_ID, error); - SQLITE_BIND_INT(db, stmt, 10, (int) kara_id, error); + SQLITE_BIND_INT(db, stmt, 10, (int)kara_id, error); } else { /* Generate a new id */ generate_new_id: SQLITE_PREPARE(db, stmt, SQL_STMT, error); } - if ((sqlite3_bind_text(stmt, 1, data.song_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 2, data.source_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 3, data.category, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 4, data.song_type, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 5, data.language, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 6, filename, -1, 0) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 7, 0) /* TODO */ != SQLITE_OK) || - (sqlite3_bind_text(stmt, 8, data.author_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 9, data.song_number) != SQLITE_OK) - ) { - LOG_ERROR("DB", "Failed to bind for kara %s: %s", filename, - sqlite3_errmsg((sqlite3 *) db)); + if ((sqlite3_bind_text(stmt, 1, data.song_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 2, data.source_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 3, data.category, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 4, data.song_type, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 5, data.language, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 6, filename, -1, 0) != SQLITE_OK) || + (sqlite3_bind_int(stmt, 7, 0) /* TODO */ != SQLITE_OK) || + (sqlite3_bind_text(stmt, 8, data.author_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_int(stmt, 9, data.song_number) != SQLITE_OK)) { + LOG_ERROR("DB", "Failed to bind for kara %s: %s", filename, sqlite3_errmsg((sqlite3 *)db)); goto error; } SQLITE_STEP_DONE(db, stmt, error); @@ -142,8 +140,7 @@ error: bool database_update_set_available(volatile sqlite3 *db, int id) { - static const char *SQL_STMT = - "UPDATE kara SET available = 1 WHERE id = ?;"; + static const char *SQL_STMT = "UPDATE kara SET available = 1 WHERE id = ?;"; sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_INT(db, stmt, 1, id, error); @@ -158,36 +155,31 @@ error: } bool -database_update_add(volatile sqlite3 *db, const char *kara_path, - struct kara_metadata *mdt, uint64_t id, bool avail) +database_update_add(volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail) { RETURN_UNLESS(db && kara_path && mdt && id, "Invalid argument", false); - static const char *SQL_STMT = - "INSERT OR REPLACE INTO kara (song_name, source_name, category, " - "song_type, language, file_path, is_new, author_name, " - "song_number, id, available)" - "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"; + static const char *SQL_STMT = "INSERT OR REPLACE INTO kara (song_name, source_name, category, " + "song_type, language, file_path, is_new, author_name, " + "song_number, id, available)" + "SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"; sqlite3_stmt *stmt = NULL; - int ret = false; + int ret = false; /* From here we initialize the sqlite stmt. */ SQLITE_PREPARE(db, stmt, SQL_STMT, error); - if ((sqlite3_bind_text(stmt, 1, mdt->song_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 2, mdt->source_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 3, mdt->category, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 4, mdt->song_type, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 5, mdt->language, -1, 0) != SQLITE_OK) || - (sqlite3_bind_text(stmt, 6, kara_path, -1, 0) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 7, 0) /* TODO */ != SQLITE_OK) || - (sqlite3_bind_text(stmt, 8, mdt->author_name, -1, 0) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 9, mdt->song_number) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 10, id) != SQLITE_OK) || - (sqlite3_bind_int (stmt, 11, avail) != SQLITE_OK) - ) { - LOG_ERROR("DB", "Failed to bind argument for kara %s: %s", kara_path, - sqlite3_errmsg((sqlite3 *) db)); + if ((sqlite3_bind_text(stmt, 1, mdt->song_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 2, mdt->source_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 3, mdt->category, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 4, mdt->song_type, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 5, mdt->language, -1, 0) != SQLITE_OK) || + (sqlite3_bind_text(stmt, 6, kara_path, -1, 0) != SQLITE_OK) || + (sqlite3_bind_int(stmt, 7, 0) /* TODO */ != SQLITE_OK) || + (sqlite3_bind_text(stmt, 8, mdt->author_name, -1, 0) != SQLITE_OK) || + (sqlite3_bind_int(stmt, 9, mdt->song_number) != SQLITE_OK) || (sqlite3_bind_int(stmt, 10, id) != SQLITE_OK) || + (sqlite3_bind_int(stmt, 11, avail) != SQLITE_OK)) { + LOG_ERROR("DB", "Failed to bind argument for kara %s: %s", kara_path, sqlite3_errmsg((sqlite3 *)db)); goto error; } @@ -208,8 +200,7 @@ database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) memset(path, 0, PATH_MAX * sizeof(char)); if (!(d = opendir(kara_dir))) { - LOG_ERROR("DB", "Failed to open directory '%s': %s", kara_dir, - strerror(errno)); + LOG_ERROR("DB", "Failed to open directory '%s': %s", kara_dir, strerror(errno)); return false; } @@ -222,8 +213,10 @@ database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) database_get_update(db, &db_timestamp, NULL, NULL); LOG_INFO("DB", "File is '%s'", path); if (check_timestamp && get_mtime(path) < db_timestamp) { - LOG_INFO("DB", "Skip update of kara '%s' be cause of " - "timestamps", path); + LOG_INFO("DB", + "Skip update of kara '%s' be cause of " + "timestamps", + path); continue; } if (!__database_add_kara(db, path)) @@ -231,9 +224,7 @@ database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) database_stamp(db); } - else if (dir->d_type == DT_DIR && - !STR_MATCH(dir->d_name, ".") && - !STR_MATCH(dir->d_name, "..")) + else if (dir->d_type == DT_DIR && !STR_MATCH(dir->d_name, ".") && !STR_MATCH(dir->d_name, "..")) database_update(db, path, check_timestamp); } @@ -246,12 +237,11 @@ database_update(volatile sqlite3 *db, const char *kara_dir, int check_timestamp) void database_deleted_kara(volatile sqlite3 *db, int **kara_id, size_t *len) { - static const char *SQL = - "SELECT kara.id, file_path FROM kara WHERE kara.id NOT IN" - "(SELECT kara_id FROM updates JOIN misc ON job = update_job);"; + static const char *SQL = "SELECT kara.id, file_path FROM kara WHERE kara.id NOT IN" + "(SELECT kara_id FROM updates JOIN misc ON job = update_job);"; sqlite3_stmt *stmt = NULL; - *kara_id = (int *) calloc(LKT_DEFAULT_LIST_SIZE, sizeof(int)); - *len = 0; + *kara_id = (int *)calloc(LKT_DEFAULT_LIST_SIZE, sizeof(int)); + *len = 0; RETURN_UNLESS(*kara_id, "Out of memory", NOTHING); SQLITE_PREPARE(db, stmt, SQL, out); size_t size = LKT_DEFAULT_LIST_SIZE; @@ -272,12 +262,10 @@ out: } void -database_get_update(volatile sqlite3 *db, long *timestamp, - long *job, int *current) +database_get_update(volatile sqlite3 *db, long *timestamp, long *job, int *current) { - static const char *SQL = - "SELECT last_update, update_job, last_update > last_end_update " - "FROM misc WHERE id = 42;"; + static const char *SQL = "SELECT last_update, update_job, last_update > last_end_update " + "FROM misc WHERE id = 42;"; sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_STEP_ROW(db, stmt, error); @@ -289,8 +277,7 @@ database_get_update(volatile sqlite3 *db, long *timestamp, *current = sqlite3_column_int(stmt, 2); return; error: - LOG_WARN("DB", "Failed to get informations about the last update: %s", - sqlite3_errmsg((sqlite3 *) db)); + LOG_WARN("DB", "Failed to get informations about the last update: %s", sqlite3_errmsg((sqlite3 *)db)); } void @@ -303,7 +290,7 @@ void database_update_del(volatile sqlite3 *db, int id) { static const char *SQL = "DELETE FROM kara WHERE id = ?;"; - sqlite3_stmt *stmt = NULL; + sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL, error); SQLITE_BIND_INT(db, stmt, 1, id, error); SQLITE_STEP_DONE(db, stmt, error); @@ -312,24 +299,24 @@ error: return; } -#define sqlite_just_exec(func, query) \ - void func (volatile sqlite3 *db) { \ - SQLITE_EXEC(db, query, error); \ - error: return; \ +#define sqlite_just_exec(func, query) \ + void func(volatile sqlite3 *db) \ + { \ + SQLITE_EXEC(db, query, error); \ + error: \ + return; \ } sqlite_just_exec(database_stamp, "UPDATE misc SET last_update = strftime('%s','now');") -sqlite_just_exec(database_updated, - "UPDATE misc SET last_end_update = strftime('%s','now'), update_job = update_job + 1;") + sqlite_just_exec(database_updated, + "UPDATE misc SET last_end_update = strftime('%s','now'), update_job = update_job + 1;") #undef sqlite_just_exec -bool -database_stats(volatile sqlite3 *db, int *authors, int *sources, int *karas) + bool database_stats(volatile sqlite3 *db, int *authors, int *sources, int *karas) { - static const char *SQL = - "SELECT" - " (SELECT COUNT(DISTINCT author_name) FROM kara)," - " (SELECT COUNT(DISTINCT source_name) FROM kara)," - " (SELECT COUNT(id) FROM kara);"; + static const char *SQL = "SELECT" + " (SELECT COUNT(DISTINCT author_name) FROM kara)," + " (SELECT COUNT(DISTINCT source_name) FROM kara)," + " (SELECT COUNT(id) FROM kara);"; sqlite3_stmt *stmt = 0; SQLITE_PREPARE(db, stmt, SQL, error); diff --git a/src/database/user.c b/src/database/user.c index 34045b3f392486c357d0429876c8773a7da6e1c8..e39e14904f9608d85efc429b0865d3b4211954f5 100644 --- a/src/database/user.c +++ b/src/database/user.c @@ -10,15 +10,13 @@ bool database_user_authentificate(volatile sqlite3 *db, const char *password) { - static const char *SQL_STMT = - "SELECT username FROM users WHERE password = ?"; - sqlite3_stmt *stmt = 0; - bool ret = false; + static const char *SQL_STMT = "SELECT username FROM users WHERE password = ?"; + sqlite3_stmt *stmt = 0; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, password, error); SQLITE_STEP_ROW(db, stmt, error); - LOG_INFO("DB", "User authentification for '%s'", - sqlite3_column_text(stmt, 0)); + LOG_INFO("DB", "User authentification for '%s'", sqlite3_column_text(stmt, 0)); ret = true; error: sqlite3_finalize(stmt); @@ -28,10 +26,9 @@ error: bool 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; - bool ret = false; + static const char *SQL_STMT = "INSERT INTO users (username, password) VALUES (?, ?)"; + sqlite3_stmt *stmt = 0; + bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); SQLITE_BIND_TEXT(db, stmt, 1, username, error); SQLITE_BIND_TEXT(db, stmt, 2, password, error); diff --git a/src/klkt/klkt.cpp b/src/klkt/klkt.cpp index 1de9c3e1f830f9175f422bfc5f296d3abee0643e..50619d88d51fa7dbab2f3be7d46340655fb43e88 100644 --- a/src/klkt/klkt.cpp +++ b/src/klkt/klkt.cpp @@ -1,9 +1,11 @@ #include "klkt.hpp" /* A trashy main */ -int main(int argc, char **argv) { +int +main(int argc, char **argv) +{ Application app(argc, argv); - int code = app.exec(); + int code = app.exec(); notify_uninit(); return code; } diff --git a/src/main/lkt.c b/src/main/lkt.c index d40a70dee126e2e77b376663af8e19bca190af58..98ed16ff632ae4105345dbe67cad99856e819408 100644 --- a/src/main/lkt.c +++ b/src/main/lkt.c @@ -31,24 +31,35 @@ /* Suppress logs with segv handler only for lkt to preserv a pretty output */ extern int __install_segv_handler_verbose; -#define LKT_KEY_VALUE_SEP ": \n\t\0" -#define fail_if(cond, msg) { if (cond) { LOG_ERROR("LKT", "%s", msg); exit(EXIT_FAILURE); } } -#define fail(msg) { LOG_ERROR("LKT", "%s", msg); exit(EXIT_FAILURE); } - -#define exit_with_status(sock, buff) { \ - read_socket(sock, buff, 2); \ - fail_if(buff[0] != 'O' && buff[1] != 'K', "ACK"); \ - exit(EXIT_SUCCESS); \ -} +#define LKT_KEY_VALUE_SEP ": \n\t\0" +#define fail_if(cond, msg) \ + { \ + if (cond) { \ + LOG_ERROR("LKT", "%s", msg); \ + exit(EXIT_FAILURE); \ + } \ + } +#define fail(msg) \ + { \ + LOG_ERROR("LKT", "%s", msg); \ + exit(EXIT_FAILURE); \ + } + +#define exit_with_status(sock, buff) \ + { \ + read_socket(sock, buff, 2); \ + fail_if(buff[0] != 'O' && buff[1] != 'K', "ACK"); \ + exit(EXIT_SUCCESS); \ + } /* Type definition. */ typedef struct { - const char *host; /* Serveur host, may be resolved. */ - const char *port; /* Serveur port. */ - const char *pwd; /* The password for the user. */ - const char **argv; /* Pointer to the argv from the main function. */ - int argc; /* Argument count of the args. */ + const char *host; /* Serveur host, may be resolved. */ + const char *port; /* Serveur port. */ + const char *pwd; /* The password for the user. */ + const char **argv; /* Pointer to the argv from the main function. */ + int argc; /* Argument count of the args. */ } args_t; /* Global variables. */ @@ -83,29 +94,29 @@ lkt_get_query_type(struct cmd_args *args, char *const regex, size_t regex_len) if (args->argc == 1) { /* Type ?== id */ long id = 0; - errno = 0; - id = strtol(args->argv[0], NULL, 10); + errno = 0; + id = strtol(args->argv[0], NULL, 10); if (id != 0 && errno == 0) { safe_snprintf(regex, regex_len, "id://%ld", id); return 0; } /* Type ?== type OR Type ?== category OR Type ?== lang */ -#define kara_type(tp) \ -if (STR_MATCH(tp, args->argv[0])) { \ - safe_snprintf(regex, regex_len, "type://%s", args->argv[0]); \ - return 0; \ -} -#define kara_category(ct) \ -if (STR_MATCH(ct, args->argv[0])) { \ - safe_snprintf(regex, regex_len, "category://%s", args->argv[0]); \ - return 0; \ -} -#define kara_language(lg) \ -if (STR_MATCH(lg, args->argv[0])) { \ - safe_snprintf(regex, regex_len, "lang://%s", args->argv[0]); \ - return 0; \ -} +#define kara_type(tp) \ + if (STR_MATCH(tp, args->argv[0])) { \ + safe_snprintf(regex, regex_len, "type://%s", args->argv[0]); \ + return 0; \ + } +#define kara_category(ct) \ + if (STR_MATCH(ct, args->argv[0])) { \ + safe_snprintf(regex, regex_len, "category://%s", args->argv[0]); \ + return 0; \ + } +#define kara_language(lg) \ + if (STR_MATCH(lg, args->argv[0])) { \ + safe_snprintf(regex, regex_len, "lang://%s", args->argv[0]); \ + return 0; \ + } #include <lektor/database.def> #undef kara_category #undef kara_language @@ -190,7 +201,7 @@ create_socket(const char *host, const char *port) sock.sun_family = AF_UNIX; strncpy(sock.sun_path, host, sizeof(sock.sun_path) - 1); - ptr_sock = (struct sockaddr *) &sock; + ptr_sock = (struct sockaddr *)&sock; domain = AF_UNIX; sock_len = sizeof(struct sockaddr_un); } @@ -241,13 +252,13 @@ write_socket(FILE *sock, const char *format, ...) va_list ap; va_start(ap, format); - size = vsnprintf(buff, LKT_MESSAGE_MAX - 1, format, ap); + size = vsnprintf(buff, LKT_MESSAGE_MAX - 1, format, ap); buff[LKT_MESSAGE_MAX - 1] = 0; if (size < 0) fail("Connexion error"); - if (fwrite(buff, sizeof(char), size, sock) < (unsigned int) size) + if (fwrite(buff, sizeof(char), size, sock) < (unsigned int)size) fail("Connexion error"); va_end(ap); @@ -264,8 +275,8 @@ static char * lkt_skip_key(char *buffer) { size_t len = strcspn(buffer, LKT_KEY_VALUE_SEP); - char *ret = &buffer[len + 1]; - len = strspn(ret, ": "); + char *ret = &buffer[len + 1]; + len = strspn(ret, ": "); return ret + len; } @@ -284,48 +295,42 @@ send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv) /* Functions implementing options. */ -#define just_send_two_args(func, cmd) \ -noreturn void func (struct cmd_args *args) { \ - fail_if(args->argc != 2, "Need two arguments"); \ - FILE *sock = lkt_connect(); \ - char buff[2]; \ - write_socket(sock, cmd " %s %s\n", \ - args->argv[0], args->argv[1]); \ - exit_with_status(sock, buff); \ -} -just_send_two_args(queue_swap__, "swap") -just_send_two_args(queue_swapid__, "swapid") +#define just_send_two_args(func, cmd) \ + noreturn void func(struct cmd_args *args) \ + { \ + fail_if(args->argc != 2, "Need two arguments"); \ + FILE *sock = lkt_connect(); \ + char buff[2]; \ + write_socket(sock, cmd " %s %s\n", args->argv[0], args->argv[1]); \ + exit_with_status(sock, buff); \ + } +just_send_two_args(queue_swap__, "swap") just_send_two_args(queue_swapid__, "swapid"); #undef just_send_two_args -#define just_send_one_arg(func, cmd) \ -noreturn void func (struct cmd_args *args) { \ - fail_if(args->argc != 1, "Invalid argument"); \ - FILE *sock = lkt_connect(); \ - char buff[2]; \ - write_socket(sock, cmd " %s\n", args->argv[0]); \ - exit_with_status(sock, buff); \ -} -just_send_one_arg(stickers_create__, "sticker __create") -just_send_one_arg(stickers_destroy__, "sticker __destroy") -just_send_one_arg(plt_destroy__, "rm") -just_send_one_arg(plt_create__, "playlistadd") -just_send_one_arg(queue_dump__, "__dump") +#define just_send_one_arg(func, cmd) \ + noreturn void func(struct cmd_args *args) \ + { \ + fail_if(args->argc != 1, "Invalid argument"); \ + FILE *sock = lkt_connect(); \ + char buff[2]; \ + write_socket(sock, cmd " %s\n", args->argv[0]); \ + exit_with_status(sock, buff); \ + } +just_send_one_arg(stickers_create__, "sticker __create") just_send_one_arg(stickers_destroy__, "sticker __destroy"); +just_send_one_arg(plt_destroy__, "rm") just_send_one_arg(plt_create__, "playlistadd"); +just_send_one_arg(queue_dump__, "__dump"); #undef just_send_one_arg -#define just_send(func, msg) /* Just send a simple string functions */ \ - noreturn void func (struct cmd_args *args) { \ - fail_if(args->argc, "This command takes no arguments"); \ - lkt_send_and_exit(msg, sizeof(msg)); \ +#define just_send(func, msg) /* Just send a simple string functions */ \ + noreturn void func(struct cmd_args *args) \ + { \ + fail_if(args->argc, "This command takes no arguments"); \ + lkt_send_and_exit(msg, sizeof(msg)); \ } -just_send(queue_clear__, "clear\n") -just_send(queue_crop__, "crop\n") -just_send(next__, "next\n") -just_send(prev__, "previous\n") -just_send(stop__, "stop\n") -just_send(pause__, "pause 1\n") -just_send(unpause__, "pause 0\n") -just_send(shuffle__, "shuffle\npause 0\n") -just_send(queue_flatten__, "__flat\n") +just_send(queue_clear__, "clear\n") just_send(queue_crop__, "crop\n") just_send(next__, "next\n"); +just_send(prev__, "previous\n") just_send(stop__, "stop\n") just_send(pause__, "pause 1\n"); +just_send(unpause__, "pause 0\n") just_send(shuffle__, "shuffle\npause 0\n"); +just_send(queue_flatten__, "__flat\n"); #undef just_send noreturn void @@ -426,7 +431,7 @@ queue_replace__(struct cmd_args *args) if (STR_NMATCH(buff, "state", len)) { char *it = lkt_skip_key(buff); - play = STR_NMATCH(it, "play", 4); + play = STR_NMATCH(it, "play", 4); break; } @@ -452,8 +457,7 @@ config__(struct cmd_args *args) { int ret = EXIT_SUCCESS; if (args->argc == 0) - fwrite(lkt_default_config_file, sizeof(char), - strlen(lkt_default_config_file), stdout); + fwrite(lkt_default_config_file, sizeof(char), strlen(lkt_default_config_file), stdout); exit(ret); } @@ -486,7 +490,7 @@ play__(struct cmd_args *args) if (STR_NMATCH(lkt_skip_key(buff), "stop", 4)) { if (!pos) - lkt_send_and_exit(cmd_play__, sizeof(cmd_play__)); /* In bytes. */ + lkt_send_and_exit(cmd_play__, sizeof(cmd_play__)); /* In bytes. */ else { write_socket(lkt_connect(), cmd_play_from__, pos); exit(EXIT_SUCCESS); @@ -494,7 +498,7 @@ play__(struct cmd_args *args) } else - lkt_send_and_exit(cmd_pause__, sizeof(cmd_pause__)); /* In bytes. */ + lkt_send_and_exit(cmd_pause__, sizeof(cmd_pause__)); /* In bytes. */ exit(EXIT_FAILURE); } @@ -506,8 +510,8 @@ ping__(struct cmd_args *args) { if (args->argc != 0) fail("Invalid argument, the ping command takes no arguments"); - char buff[6] = {0}; - FILE *sock = lkt_connect(); + char buff[6] = { 0 }; + FILE *sock = lkt_connect(); write_socket(sock, "ping\n"); read_socket(sock, buff, 6 * sizeof(char)); if (!STR_NMATCH(buff, "OK", 2)) @@ -534,8 +538,8 @@ __read_kara_and_exit(FILE *sock) memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); read_socket(sock, buff, LKT_MESSAGE_MAX - 1); - const size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); - char *value = lkt_skip_key(buff); + const size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); + char *value = lkt_skip_key(buff); const size_t value_size = strcspn(value, "\n\0") * sizeof(char); if (STR_NMATCH("title", buff, len)) @@ -565,11 +569,9 @@ __read_kara_and_exit(FILE *sock) ok: if (language[0]) - printf("%s - %s / %s - %s - %s [%s]\n", - category, language, source, type, title, author); + printf("%s - %s / %s - %s - %s [%s]\n", category, language, source, type, title, author); else if (category[0]) - printf("%s / %s - %s - %s [%s]\n", - category, source, type, title, author); + printf("%s / %s - %s - %s [%s]\n", category, source, type, title, author); else exit(EXIT_FAILURE); exit(EXIT_SUCCESS); @@ -593,7 +595,7 @@ current__(struct cmd_args *args) if (args->argc != 0) fail("Invalid argument, the current command takes no arguments"); static const char current_song__[] = "currentsong\n"; - FILE *sock = lkt_connect(); + FILE *sock = lkt_connect(); write_socket(sock, current_song__); __read_kara_and_exit(sock); } @@ -609,12 +611,16 @@ queue_pop__(struct cmd_args *args) /* Get lektor's status. */ write_socket(sock, "status\n"); -#define assign_int(str, var) if (STR_NMATCH(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; } +#define assign_int(str, var) \ + if (STR_NMATCH(buff, str, len)) { \ + var = (atoi(lkt_skip_key(buff))); \ + continue; \ + } for (;;) { memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); read_socket(sock, buff, LKT_MESSAGE_MAX - 1); size_t len = strcspn(buff, LKT_KEY_VALUE_SEP); - assign_int("song", song) + assign_int("song", song); /* At this point every key has been parsed. */ if (STR_NMATCH(buff, "OK", 2)) @@ -653,31 +659,39 @@ status__(struct cmd_args *args) memset(flags, 0, 24 * sizeof(char)); FILE *sock = lkt_connect(); -#define assign_flag(str, f) { \ - if (STR_NMATCH(buff, str, len) && (atoi(lkt_skip_key(buff)) == 1)) { \ - flags[it++] = f; \ - continue; \ - }} -#define assign_two_int(str, var1, var2) { \ - if (STR_NMATCH(buff, str, len)) { \ - char *endptr = NULL; \ - var1 = (strtoll(lkt_skip_key(buff), &endptr, 0)); \ - endptr += strspn(endptr, "-/:"); \ - if (endptr) \ - var2 = (strtoll(endptr, NULL, 0)); \ - continue; \ - }} -#define assign_int(str, var) { \ - if (STR_NMATCH(buff, str, len)) { \ - var = (strtoll(lkt_skip_key(buff), NULL, 0)); \ - continue; \ - }} -#define check_end() { \ - if (STR_NMATCH(buff, "OK", 2)) { \ - break; \ - } else if (STR_NMATCH(buff, "ACK", 3)) { \ - goto error; \ - }} +#define assign_flag(str, f) \ + { \ + if (STR_NMATCH(buff, str, len) && (atoi(lkt_skip_key(buff)) == 1)) { \ + flags[it++] = f; \ + continue; \ + } \ + } +#define assign_two_int(str, var1, var2) \ + { \ + if (STR_NMATCH(buff, str, len)) { \ + char *endptr = NULL; \ + var1 = (strtoll(lkt_skip_key(buff), &endptr, 0)); \ + endptr += strspn(endptr, "-/:"); \ + if (endptr) \ + var2 = (strtoll(endptr, NULL, 0)); \ + continue; \ + } \ + } +#define assign_int(str, var) \ + { \ + if (STR_NMATCH(buff, str, len)) { \ + var = (strtoll(lkt_skip_key(buff), NULL, 0)); \ + continue; \ + } \ + } +#define check_end() \ + { \ + if (STR_NMATCH(buff, "OK", 2)) { \ + break; \ + } else if (STR_NMATCH(buff, "ACK", 3)) { \ + goto error; \ + } \ + } /* Get lektor's status */ write_socket(sock, status_str__); @@ -693,17 +707,11 @@ status__(struct cmd_args *args) continue; } - assign_flag("random", 'r') - assign_flag("repeat", 'l') - assign_flag("single", 's') - assign_flag("consume", 'c') + assign_flag("random", 'r') assign_flag("repeat", 'l') assign_flag("single", 's') assign_flag("consume", 'c'); + assign_int("elapsed", time_pos) assign_int("duration", time_duration) assign_int("song", song_index); + assign_int("playlistlength", plt_len); - assign_int("elapsed", time_pos) - assign_int("duration", time_duration) - assign_int("song", song_index) - assign_int("playlistlength", plt_len) - - check_end() + check_end(); } /* Get lektor's stats */ @@ -713,12 +721,9 @@ status__(struct cmd_args *args) buff[len] = '\0'; len = strcspn(buff, LKT_KEY_VALUE_SEP); - assign_int("__is_updating", is_updating) - assign_int("db_update", update_ts) - - assign_two_int("__update_progress", update_tick, update_count) - - check_end() + assign_int("__is_updating", is_updating) assign_int("db_update", update_ts); + assign_two_int("__update_progress", update_tick, update_count); + check_end(); } /* End of communication */ @@ -730,25 +735,21 @@ status__(struct cmd_args *args) #undef check_end struct tm *p_tm = localtime(&update_ts); - len = strftime(buff, LKT_MESSAGE_MAX - 1, "%F %H:%M:%S", p_tm); - buff[len] = '\0'; + len = strftime(buff, LKT_MESSAGE_MAX - 1, "%F %H:%M:%S", p_tm); + buff[len] = '\0'; - int pla_m = time_pos / 60; + int pla_m = time_pos / 60; char pla_s = time_pos % 60; - int dur_m = time_duration / 60; + int dur_m = time_duration / 60; char dur_s = time_duration % 60; printf("Lektor: %s\n" "Queue: #%d/%d\n" "Playback: %d:%02d/%d:%02d\n" "Flags: %s\n", - play ? "play" : "stopped", - song_index + 1, plt_len, - pla_m, pla_s, dur_m, dur_s, - flags[0] ? flags : "(none)"); + play ? "play" : "stopped", song_index + 1, plt_len, pla_m, pla_s, dur_m, dur_s, flags[0] ? flags : "(none)"); if (is_updating) { - printf("Updating: %d/%d%s\n", update_tick, update_count, - update_count >= update_tick ? "" : " (invalid)"); + printf("Updating: %d/%d%s\n", update_tick, update_count, update_count >= update_tick ? "" : " (invalid)"); } else printf("Last update: %s\n", buff); @@ -770,8 +771,8 @@ queue_remove__(struct cmd_args *args) fail("Invalid argument, need onlt one argument: queue id <id>"); static const char *cmd__ = "deleteid %d\n"; - int dumy = 0; - FILE *sock = lkt_connect(); + int dumy = 0; + FILE *sock = lkt_connect(); char buff[3]; sscanf(args->argv[0], "%d", &dumy); @@ -790,8 +791,8 @@ queue_delete__(struct cmd_args *args) fail("Invalid argument, need onlt one argument: queue delete <pos>"); static const char *cmd_id__ = "delete %d\n"; - int dumy = 0; - FILE *sock = lkt_connect(); + int dumy = 0; + FILE *sock = lkt_connect(); char buff[3]; sscanf(args->argv[0], "%d", &dumy); @@ -831,9 +832,7 @@ queue_seek__(struct cmd_args *args) char *endptr, buf[3]; long id = strtol(args->argv[0], &endptr, 0); - if ((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || - (errno != 0 && id == 0) || - (endptr == args->argv[0])) + if ((errno == ERANGE && (id == LONG_MAX || id == LONG_MIN)) || (errno != 0 && id == 0) || (endptr == args->argv[0])) fail("Invalid argument, not an integer"); if (*endptr != '\0') @@ -855,8 +854,8 @@ queue_pos__(struct cmd_args *args) long continuation = 0, up = 0; continuation = strtol(args->argv[0], &endptr, 0); - if ((errno == ERANGE && (continuation == LONG_MAX || continuation == LONG_MIN)) || (errno != 0 - && continuation == 0) || (endptr == args->argv[0])) + if ((errno == ERANGE && (continuation == LONG_MAX || continuation == LONG_MIN)) || + (errno != 0 && continuation == 0) || (endptr == args->argv[0])) fail("Invalid argument, not an integer: queue pos <arg> where arg is a position or a range"); if (*endptr != '\0') { @@ -866,7 +865,6 @@ queue_pos__(struct cmd_args *args) up = atoi(endptr); } - FILE *sock = NULL; redo: sock = lkt_connect(); @@ -900,7 +898,7 @@ noreturn void queue_list__(struct cmd_args *args) { char buff[LKT_MESSAGE_MAX], *endptr; - FILE *sock = NULL; + FILE *sock = NULL; long continuation = 0, song_index = 1; /* Arguments stuff. */ @@ -911,8 +909,8 @@ queue_list__(struct cmd_args *args) fail("Invalid argument: queue <count?>"); continuation = strtol(args->argv[0], &endptr, 0); - if ((errno == ERANGE && (continuation == LONG_MAX || continuation == LONG_MIN)) || (errno != 0 - && continuation == 0) || (endptr == args->argv[0])) + if ((errno == ERANGE && (continuation == LONG_MAX || continuation == LONG_MIN)) || + (errno != 0 && continuation == 0) || (endptr == args->argv[0])) fail("Invalid argument, not an integer"); if (*endptr != '\0') @@ -923,7 +921,11 @@ queue_list__(struct cmd_args *args) sock = lkt_connect(); write_socket(sock, "status\n"); -#define assign_int(str, var) if (STR_NMATCH(buff, str, len)) { var = (atoi(lkt_skip_key(buff))); continue; } +#define assign_int(str, var) \ + if (STR_NMATCH(buff, str, len)) { \ + var = (atoi(lkt_skip_key(buff))); \ + continue; \ + } for (;;) { memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char)); read_socket(sock, buff, LKT_MESSAGE_MAX - 1); @@ -942,9 +944,9 @@ queue_list__(struct cmd_args *args) /* Get the content of the queue. */ continuation = labs(continuation); - song_index = MAX(song_index + 1, 1); + song_index = MAX(song_index + 1, 1); safe_snprintf(buff, LKT_MESSAGE_MAX, "%ld:%ld", song_index, song_index + continuation - 1); - args->argc = 1; + args->argc = 1; args->argv[0] = buff; queue_pos__(args); } @@ -955,8 +957,7 @@ noreturn void plt_add__(struct cmd_args *args) { char buff[2]; - fail_if(args->argc < 2, - "Invalid argument, need at least three arguments: plt add <plt> <query>"); + fail_if(args->argc < 2, "Invalid argument, need at least three arguments: plt add <plt> <query>"); char regex[LKT_MESSAGE_MAX]; struct cmd_args args_regex = { @@ -991,14 +992,13 @@ stickers_get__(struct cmd_args *args) if (args->argc == 2) write_socket(sock = lkt_connect(), "sticker get %s %s\n", args->argv[0], args->argv[1]); else if (args->argc == 3) - write_socket(sock = lkt_connect(), "sticker get %s %s %s\n", args->argv[0], args->argv[1], - args->argv[2]); + write_socket(sock = lkt_connect(), "sticker get %s %s %s\n", args->argv[0], args->argv[1], args->argv[2]); else if (args->argc == 5) { const char *op = args->argv[3]; - op = op[0] == 'e' ? "=" : op[0] == 'l' ? "<" : op[0] == 'g' ? ">" : NULL; + op = op[0] == 'e' ? "=" : op[0] == 'l' ? "<" : op[0] == 'g' ? ">" : NULL; fail_if(!op, "Invalid argument"); - write_socket(sock = lkt_connect(), "sticker get %s %s %s %s %s\n", args->argv[0], - args->argv[1], args->argv[2], op, args->argv[4]); + write_socket(sock = lkt_connect(), "sticker get %s %s %s %s %s\n", args->argv[0], args->argv[1], args->argv[2], + op, args->argv[4]); } else fail("Invalid argument"); @@ -1019,8 +1019,7 @@ stickers_set__(struct cmd_args *args) fail_if(args->argc != 4, "Invalid argument"); FILE *sock = lkt_connect(); char buff[2]; - write_socket(sock, "sticker set %s %s %s %s\n", args->argv[0], - args->argv[1], args->argv[2], args->argv[3]); + write_socket(sock, "sticker set %s %s %s %s\n", args->argv[0], args->argv[1], args->argv[2], args->argv[3]); exit_with_status(sock, buff); } @@ -1030,11 +1029,9 @@ stickers_delete__(struct cmd_args *args) FILE *sock; char buff[2]; if (args->argc == 2) - write_socket(sock = lkt_connect(), "sticker delete %s %s", - args->argv[0], args->argv[1]); + write_socket(sock = lkt_connect(), "sticker delete %s %s", args->argv[0], args->argv[1]); else if (args->argc == 3) - write_socket(sock = lkt_connect(), "sticker delete %s %s %s", - args->argv[0], args->argv[1], args->argv[2]); + write_socket(sock = lkt_connect(), "sticker delete %s %s %s", args->argv[0], args->argv[1], args->argv[2]); else fail("Invalid argument"); exit_with_status(sock, buff); @@ -1047,7 +1044,7 @@ __continuation_calls(const char *cmd) { char buff[LKT_MESSAGE_MAX]; int continuation = 0; - FILE *sock = NULL; + FILE *sock = NULL; redo: sock = lkt_connect(); @@ -1098,7 +1095,7 @@ search_with_cmd__(struct cmd_args *args, const char *cmd) char buff[LKT_MESSAGE_MAX]; char regex[LKT_MESSAGE_MAX]; int continuation = 0; - FILE *sock = NULL; + FILE *sock = NULL; fail_if(lkt_get_query_type(args, regex, LKT_MESSAGE_MAX), "Query is invalid"); @@ -1156,8 +1153,8 @@ search_plt__(struct cmd_args *args) char buff[LKT_MESSAGE_MAX]; char regex[LKT_MESSAGE_MAX]; - int continuation = 0; - FILE *sock = NULL; + int continuation = 0; + FILE *sock = NULL; struct cmd_args args_regex = { .argc = args->argc - 1, .argv = args->argv + 1, @@ -1188,61 +1185,64 @@ redo: } } -#define search_with_cmd(func, cmd) /* I don't want to write always the same things */ \ - noreturn void func (struct cmd_args *args) { search_with_cmd__(args, #cmd); } -search_with_cmd(search_db__, search) -search_with_cmd(search_count__, count) -search_with_cmd(search_queue__, playlistfind) +#define search_with_cmd(func, cmd) /* I don't want to write always the same things */ \ + noreturn void func(struct cmd_args *args) \ + { \ + search_with_cmd__(args, #cmd); \ + } +search_with_cmd(search_db__, search) search_with_cmd(search_count__, count); +search_with_cmd(search_queue__, playlistfind); #undef search_with_cmd /* Parsing stuff. */ +// clang-format off static struct cmd_opt options_queue[] = { - { .name = "insert", .call = queue_insert__ }, - { .name = "pos", .call = queue_pos__ }, - { .name = "pop", .call = queue_pop__ }, - { .name = "add", .call = queue_add__ }, - { .name = "seek", .call = queue_seek__ }, - { .name = "delete", .call = queue_delete__ }, - { .name = "remove", .call = queue_remove__ }, - { .name = "clear", .call = queue_clear__ }, - { .name = "crop", .call = queue_crop__ }, - { .name = "replace", .call = queue_replace__ }, - { .name = "dump", .call = queue_dump__ }, - { .name = "id", .call = queue_id__ }, - { .name = "flatten", .call = queue_flatten__ }, - { .name = "swap", .call = queue_swap__ }, - { .name = "swapid", .call = queue_swapid__ }, + { .name = "insert", .call = queue_insert__ }, + { .name = "pos", .call = queue_pos__ }, + { .name = "pop", .call = queue_pop__ }, + { .name = "add", .call = queue_add__ }, + { .name = "seek", .call = queue_seek__ }, + { .name = "delete", .call = queue_delete__ }, + { .name = "remove", .call = queue_remove__ }, + { .name = "clear", .call = queue_clear__ }, + { .name = "crop", .call = queue_crop__ }, + { .name = "replace", .call = queue_replace__ }, + { .name = "dump", .call = queue_dump__ }, + { .name = "id", .call = queue_id__ }, + { .name = "flatten", .call = queue_flatten__ }, + { .name = "swap", .call = queue_swap__ }, + { .name = "swapid", .call = queue_swapid__ }, CMD_OPT_DEFAULT(queue_list__), }; static struct cmd_opt options_plt[] = { - { .name = "add", .call = plt_add__ }, - { .name = "delete", .call = plt_delete__ }, - { .name = "destroy", .call = plt_destroy__ }, - { .name = "create", .call = plt_create__ }, - { .name = "list", .call = search_plt__ }, + { .name = "add", .call = plt_add__ }, + { .name = "delete", .call = plt_delete__ }, + { .name = "destroy", .call = plt_destroy__ }, + { .name = "create", .call = plt_create__ }, + { .name = "list", .call = search_plt__ }, CMD_OPT_NULL, }; static struct cmd_opt options_search[] = { - { .name = "database", .call = search_db__ }, - { .name = "get", .call = search_get__ }, - { .name = "plt", .call = search_plt__ }, - { .name = "count", .call = search_count__ }, - { .name = "queue", .call = search_queue__ }, + { .name = "database", .call = search_db__ }, + { .name = "get", .call = search_get__ }, + { .name = "plt", .call = search_plt__ }, + { .name = "count", .call = search_count__ }, + { .name = "queue", .call = search_queue__ }, CMD_OPT_DEFAULT(search_db__), }; static struct cmd_opt options_admin[] = { - { .name = "ping", .call = ping__ }, - { .name = "kill", .call = kill__ }, - { .name = "restart", .call = restart__ }, - { .name = "rescan", .call = rescan__ }, - { .name = "update", .call = update__ }, - { .name = "populate", .call = populate__ }, - { .name = "config", .call = config__ }, - { .name = "import", .call = import__ }, + { .name = "ping", .call = ping__ }, + { .name = "kill", .call = kill__ }, + { .name = "restart", .call = restart__ }, + { .name = "rescan", .call = rescan__ }, + { .name = "update", .call = update__ }, + { .name = "populate", .call = populate__ }, + { .name = "config", .call = config__ }, + { .name = "import", .call = import__ }, CMD_OPT_NULL, }; @@ -1254,16 +1254,19 @@ static struct cmd_opt options_stickers[] = { { .name = "destroy", .call = stickers_destroy__ }, CMD_OPT_NULL, }; +// clang-format on -#define sub_command(name) /* Create sub-commands here */ \ - noreturn void name ## __(struct cmd_args *args) { \ - fail_if(!args->argc, "Invalid command, specify a sub command for " #name); \ - cmd_parse(options_ ## name, args->argc, args->argv); \ +#define sub_command(name) /* Create sub-commands here */ \ + noreturn void name##__(struct cmd_args *args) \ + { \ + fail_if(!args->argc, "Invalid command, specify a sub command for " #name); \ + cmd_parse(options_##name, args->argc, args->argv); \ } -sub_command(stickers) -sub_command(search) -sub_command(plt) -sub_command(admin) +sub_command(stickers); +sub_command(search); +sub_command(plt); +sub_command(admin); +#undef sub_command noreturn void queue__(struct cmd_args *args) @@ -1272,25 +1275,26 @@ queue__(struct cmd_args *args) queue_list__(args); cmd_parse(options_queue, args->argc, args->argv); } -#undef sub_command +// clang-format off static struct cmd_opt options_[] = { - { .name = "current", .call = current__ }, - { .name = "play", .call = play__ }, - { .name = "pause", .call = pause__ }, - { .name = "unpause", .call = unpause__ }, - { .name = "next", .call = next__ }, - { .name = "previous", .call = prev__ }, - { .name = "queue", .call = queue__ }, - { .name = "shuffle", .call = shuffle__ }, - { .name = "status", .call = status__ }, - { .name = "stop", .call = stop__ }, - { .name = "plt", .call = plt__ }, - { .name = "search", .call = search__ }, - { .name = "admin", .call = admin__ }, - { .name = "stickers", .call = stickers__ }, + { .name = "current", .call = current__ }, + { .name = "play", .call = play__ }, + { .name = "pause", .call = pause__ }, + { .name = "unpause", .call = unpause__ }, + { .name = "next", .call = next__ }, + { .name = "previous", .call = prev__ }, + { .name = "queue", .call = queue__ }, + { .name = "shuffle", .call = shuffle__ }, + { .name = "status", .call = status__ }, + { .name = "stop", .call = stop__ }, + { .name = "plt", .call = plt__ }, + { .name = "search", .call = search__ }, + { .name = "admin", .call = admin__ }, + { .name = "stickers", .call = stickers__ }, CMD_OPT_NULL, }; +// clang-format on /* The sigpipe function, if SIGPIPE signal is sent. */ @@ -1313,11 +1317,11 @@ parse_args(args_t *args, int argc, const char **argv) for (i = 1; i < argc && i < 4; ++i) { len = strcspn(argv[i], "=:"); -#define __get_args(name) \ -if (STR_NMATCH(#name, argv[i], len)) { \ - args->name = (argv[i] + len + 1); \ - ++got; \ -} +#define __get_args(name) \ + if (STR_NMATCH(#name, argv[i], len)) { \ + args->name = (argv[i] + len + 1); \ + ++got; \ + } __get_args(host); __get_args(port); __get_args(pwd); @@ -1333,7 +1337,7 @@ main(int argc, const char **argv) { __install_segv_handler_verbose = 0; install_segv_handler(); - __log_level = ERROR; + __log_level = ERROR; executable_name = "lkt"; assert(NULL != setlocale(LC_ALL, "en_US.UTF-8")); /* BECAUSE! */ if (signal(SIGPIPE, sigpipe__)) diff --git a/src/main/luka.cpp b/src/main/luka.cpp index 1bd9fc0e0d7afee0c3a63b0d6d7a1958908be3da..40c7fd553845e212778c0aa5d9c57d3848542589 100644 --- a/src/main/luka.cpp +++ b/src/main/luka.cpp @@ -13,12 +13,16 @@ /* Suppress logs with segv handler only for lkt to preserv a pretty output */ extern int __install_segv_handler_verbose; -static void sigpipe__(int sig) { +static void +sigpipe__(int sig) +{ LOG_ERROR("GENERAL", "Exit because of signal sigpipe (%d)", sig); ::exit(EXIT_FAILURE); } -int main(const int argc, const char **) { +int +main(const int argc, const char **) +{ __log_level = ERROR; executable_name = "luka"; __install_segv_handler_verbose = 0; diff --git a/src/main/server.c b/src/main/server.c index 9571122b6ec27ebf1156a48d8aa824f7a969bb22..4a2115de49c7a7145d5571402873bdf2c8598dca 100644 --- a/src/main/server.c +++ b/src/main/server.c @@ -27,9 +27,9 @@ #include <sys/stat.h> #include <termios.h> -#if defined (LKT_STATIC_MODULE) - REG_DECLARE(sdl2_reg) - REG_DECLARE(repo_reg) +#if defined(LKT_STATIC_MODULE) +REG_DECLARE(sdl2_reg) +REG_DECLARE(repo_reg) #endif /* The environment */ @@ -42,14 +42,13 @@ static int ___tty_must_be_restored = 0; CONSTRUCTOR_FUNCTION static void ___tty_disable_echo(void) { - GOTO_IF((tcgetattr(STDIN_FILENO, &___tty_cur) == -1), - "Failed to get termios flags", error); + GOTO_IF((tcgetattr(STDIN_FILENO, &___tty_cur) == -1), "Failed to get termios flags", error); ___tty_save = ___tty_cur; - ___tty_cur.c_lflag &= ~ ECHO; + ___tty_cur.c_lflag &= ~ECHO; - GOTO_IF((tcsetattr(STDIN_FILENO, TCSAFLUSH, &___tty_cur) == -1), - "Failed to turned of echo in termios flags", error); + GOTO_IF((tcsetattr(STDIN_FILENO, TCSAFLUSH, &___tty_cur) == -1), "Failed to turned of echo in termios flags", + error); ___tty_must_be_restored = 1; return; @@ -62,8 +61,7 @@ DESTRUCTOR_FUNCTION static void ___tty_enable_echo(void) { RETURN_UNLESS(___tty_must_be_restored, "No need to restore the tty", NOTHING); - RETURN_IF(tcsetattr(STDIN_FILENO, TCSANOW, &___tty_save) == -1, - "Failed to reset termios flags", NOTHING); + RETURN_IF(tcsetattr(STDIN_FILENO, TCSANOW, &___tty_save) == -1, "Failed to reset termios flags", NOTHING); errno = 0; RETURN_IF(fflush(stdin) != 0, "Failed to flush stdin", NOTHING); } @@ -112,13 +110,15 @@ ___kill_klkt(void) LOG_INFO("INIT", "Child klkt status is %s%d", /* String desc */ - WIFEXITED(status) ? "exited with status " : - WIFSIGNALED(status) ? "killed by signal " : - WIFSTOPPED(status) ? "stopped by signal " : "continued ", + WIFEXITED(status) ? "exited with status " + : WIFSIGNALED(status) ? "killed by signal " + : WIFSTOPPED(status) ? "stopped by signal " + : "continued ", /* Int that follows it */ - WIFEXITED(status) ? WEXITSTATUS(status) : - WIFSIGNALED(status) ? WTERMSIG(status) : - WIFSTOPPED(status) ? WSTOPSIG(status) : 0); + WIFEXITED(status) ? WEXITSTATUS(status) + : WIFSIGNALED(status) ? WTERMSIG(status) + : WIFSTOPPED(status) ? WSTOPSIG(status) + : 0); } while (!WIFEXITED(status) && !WIFSIGNALED(status)); } @@ -138,8 +138,8 @@ launch_klkt(va_list UNUSED *___args) /* Env var was not found, no existing lklt! Launch it ourself. */ char exe_path[LKT_LINE_MAX]; char try_name[LKT_LINE_MAX]; - const char *const appimage = getenv("APPIMAGE"); - char *args[] = { "klkt", NULL }; + const char *const appimage = getenv("APPIMAGE"); + char *args[] = { "klkt", NULL }; static const char *basename_appimage_arch = "klkt.AppImage"; static const char *basename_appimage_no_arch = "klkt-" LKT_ARCH ".AppImage"; @@ -175,23 +175,20 @@ launch_klkt(va_list UNUSED *___args) errno = 0; safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt", current_dir); LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); - GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), - "Klkt launched!", end); + GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); /* AppImage try */ safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt-" LKT_ARCH ".AppImage", current_dir); errno = 0; - args[0] = (char *) basename_appimage_arch; + args[0] = (char *)basename_appimage_arch; LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); - GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), - "Klkt launched!", end); + GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt.AppImage", current_dir); errno = 0; - args[0] = (char *) basename_appimage_no_arch; + args[0] = (char *)basename_appimage_no_arch; LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); - GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), - "Klkt launched!", end); + GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); /* Oupsi */ error: @@ -211,8 +208,7 @@ end: /* Export the env var for klkt pid, reuse exe_path */ safe_snprintf(exe_path, LKT_LINE_MAX, "%ld", ___klkt_pid); - RETURN_IF(setenv(LKT_ENV_KLKT_PID, exe_path, 1), - "Failed to set env variable " LKT_ENV_KLKT_PID, 1); + RETURN_IF(setenv(LKT_ENV_KLKT_PID, exe_path, 1), "Failed to set env variable " LKT_ENV_KLKT_PID, 1); return 0; } @@ -257,6 +253,11 @@ error: LOG_DEBUG("INIT", "Failed to patch PATH, it will remain as: %s", env_PATH); } +/* Place that in static part of code, to not smash the stack */ +static char exe[PATH_MAX]; +static char db_path[PATH_MAX]; +static char kara_dir[PATH_MAX]; + int main(int argc, char *argv[]) { @@ -264,21 +265,16 @@ main(int argc, char *argv[]) REG_BEGIN(server_reg) REG_ADD(launch_klkt) -#if defined (LKT_STATIC_MODULE) +#if defined(LKT_STATIC_MODULE) REG_REGISTER("repo", repo_reg) REG_REGISTER("sdl2", sdl2_reg) #endif REG_END() /* Enforce some locals */ - RETURN_UNLESS(setlocale(LC_ALL, "en_US.UTF-8"), "Failed to set LC_ALL to UTF-8", 1); - RETURN_UNLESS(setlocale(LC_CTYPE, ""), "Failed to set LC_CTYPE", 1); - RETURN_UNLESS(setlocale(LC_NUMERIC, "C"), "Failed to set LC_NUMERIC for mpv", 1); - - /* Place that in static part of code, to not smash the stack */ - static char exe[PATH_MAX]; - static char db_path[PATH_MAX]; - static char kara_dir[PATH_MAX]; + RETURN_UNLESS(setlocale(LC_ALL, "en_US.UTF-8"), "Failed to set LC_ALL to UTF-8", 1); + RETURN_UNLESS(setlocale(LC_CTYPE, ""), "Failed to set LC_CTYPE", 1); + RETURN_UNLESS(setlocale(LC_NUMERIC, "C"), "Failed to set LC_NUMERIC for mpv", 1); int autoclear, check_exclusive = 1, opt, dump_and_abort = 0; char *conf_file = safe_zero_malloc(PATH_MAX * sizeof(char)); @@ -332,8 +328,7 @@ retry_config: __mkdir(conf_file); /* Create the folder for the file. */ FILE *file_desc = fopen(conf_file, "w+"); - FAIL_UNLESS(file_desc, "Failed to open default config file '%s' to initialize it", - conf_file); + FAIL_UNLESS(file_desc, "Failed to open default config file '%s' to initialize it", conf_file); config_default(file_desc); fclose(file_desc); @@ -356,10 +351,10 @@ retry_config: free(conf_file); /* Read the configuration. We already know that the config is valid */ - database_config_get(srv.db, "player", "autoclear", &autoclear); - database_config_get(srv.db, "database", "kara_dir", kara_dir, PATH_MAX); - database_config_get(srv.db, "server", "host", srv.host, HOST_NAME_MAX); - database_config_get(srv.db, "server", "port", srv.port, 5); + database_config_get(srv.db, "player", "autoclear", &autoclear); + database_config_get(srv.db, "database", "kara_dir", kara_dir, PATH_MAX); + database_config_get(srv.db, "server", "host", srv.host, HOST_NAME_MAX); + database_config_get(srv.db, "server", "port", srv.port, 5); /* Quick check with an explicit error message, to remide the users to * create the kara folder */ @@ -391,7 +386,7 @@ retry_config: database_config_get(srv.db, "repo", "module", module, PATH_MAX); reg_import(module, &srv.repo_mod.reg, &srv.repo_mod.handle); - FAIL_IF(MOD_CALL(srv.repo_mod, "new", &srv.queue, srv.db), "Can't init repo module"); + FAIL_IF(MOD_CALL(srv.repo_mod, "new", &srv.queue, srv.db), "Can't init repo module"); FAIL_IF(MOD_CALL(srv.window_mod, "new", &srv.queue, srv.db), "Can't init player module"); } @@ -400,8 +395,7 @@ retry_config: char *env_current = env_get(LKT_ENV_CURRENT); if (env_current && env_current[0] && !STR_MATCH(env_current, "NULL")) { LOG_INFO("INIT", "Restart playback from %s", env_current); - lkt_queue_send(&srv.queue, lkt_event_play_pos, - (void *) (size_t) strtol(env_current, NULL, 0)); + lkt_queue_send(&srv.queue, lkt_event_play_pos, (void *)(size_t)strtol(env_current, NULL, 0)); } } diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c index 1823c999db4ad006cb93181b39104e5d3ee7f5c9..27af56c118f6dccc604c03282318c2c55404a0f2 100644 --- a/src/mkv/mkv.c +++ b/src/mkv/mkv.c @@ -15,31 +15,31 @@ #define MKV_TAG_MAX 64 -#define EBML_ROOT 0x1a45dfa3 -#define EBML_MKV_SEGMENT 0x18538067 -#define EBML_MKV_SEEKHEAD 0x114d9b74 -#define EBML_MKV_SEEK 0x00004dbb -#define EBML_MKV_SEEK_ID 0x000053ab -#define EBML_MKV_SEEK_POS 0x000053ac -#define EBML_MKV_TAGS 0x1254c367 -#define EBML_MKV_TAG 0x00007373 -#define EBML_MKV_TAG_TARGETS 0x000063c0 -#define EBML_MKV_TAG_TTV 0x000068ca /* Tag: TargetTypeValue, L4 */ -#define EBML_MKV_TAG_SIMPLE 0x000067c8 /* Tag: SimpleTag, L3+ */ -#define EBML_MKV_TAG_NAME 0x000045a3 -#define EBML_MKV_TAG_STRING 0x00004487 -#define EBML_MKV_TAG_BINARY 0x00004485 -#define EBML_MKV_INFO 0x1549a966 /* Segment: Info L1 */ -#define EBML_MKV_SEG_DURATION 0x00004489 /* Segment: Duration L2 */ -#define EBML_MKV_SEG_TS_SCALE 0x002ad7b1 /* Segment: TimestampScale L2 */ -#define EBML_MKV_SEG_NAME 0x00007ba9 /* Segment: Title L2 */ -#define EBML_MKV_ATTACHEMENT 0x1941a469 -#define EBML_MKV_ATTCH_NAME 0x0000466e /* Attachement: FileName, L3 */ -#define EBML_MKV_ATTCH_DESC 0x0000467e /* Attachement: FileDescription, L3 */ -#define EBML_MKV_ATTCH_MIME 0x00004660 /* Attachement: FileMimeType, L3 */ - -#define EBML_MKV_CRC32 0x0000000bf /* CRC-32, they skip it in mpv (demux/ebml.c:463 aprox) */ -#define EBML_MKV_VOID 0x0000000ec /* VOID element */ +#define EBML_ROOT 0x1a45dfa3 +#define EBML_MKV_SEGMENT 0x18538067 +#define EBML_MKV_SEEKHEAD 0x114d9b74 +#define EBML_MKV_SEEK 0x00004dbb +#define EBML_MKV_SEEK_ID 0x000053ab +#define EBML_MKV_SEEK_POS 0x000053ac +#define EBML_MKV_TAGS 0x1254c367 +#define EBML_MKV_TAG 0x00007373 +#define EBML_MKV_TAG_TARGETS 0x000063c0 +#define EBML_MKV_TAG_TTV 0x000068ca /* Tag: TargetTypeValue, L4 */ +#define EBML_MKV_TAG_SIMPLE 0x000067c8 /* Tag: SimpleTag, L3+ */ +#define EBML_MKV_TAG_NAME 0x000045a3 +#define EBML_MKV_TAG_STRING 0x00004487 +#define EBML_MKV_TAG_BINARY 0x00004485 +#define EBML_MKV_INFO 0x1549a966 /* Segment: Info L1 */ +#define EBML_MKV_SEG_DURATION 0x00004489 /* Segment: Duration L2 */ +#define EBML_MKV_SEG_TS_SCALE 0x002ad7b1 /* Segment: TimestampScale L2 */ +#define EBML_MKV_SEG_NAME 0x00007ba9 /* Segment: Title L2 */ +#define EBML_MKV_ATTACHEMENT 0x1941a469 +#define EBML_MKV_ATTCH_NAME 0x0000466e /* Attachement: FileName, L3 */ +#define EBML_MKV_ATTCH_DESC 0x0000467e /* Attachement: FileDescription, L3 */ +#define EBML_MKV_ATTCH_MIME 0x00004660 /* Attachement: FileMimeType, L3 */ + +#define EBML_MKV_CRC32 0x0000000bf /* CRC-32, they skip it in mpv (demux/ebml.c:463 aprox) */ +#define EBML_MKV_VOID 0x0000000ec /* VOID element */ /* mkv_read_* functions take data from the bufferfd and parse the next "*" (one * of the following): @@ -93,7 +93,7 @@ mkv_read_element_length(struct bufferfd *bf, uint64_t *res) uint8_t mask = 0x80u >> nbytes; if (data[0] & mask) { - data[0] &= (uint8_t) ~mask; + data[0] &= (uint8_t)~mask; break; } } @@ -128,7 +128,7 @@ mkv_read_uint(struct bufferfd *bf, uint64_t *res) *res = be_uint64_t(data, data_len); } - return n + (ssize_t) data_len; + return n + (ssize_t)data_len; } /* From https://www.matroska.org/technical/specs/index.html: @@ -153,12 +153,12 @@ mkv_read_float(struct bufferfd *bf, double *res) if (data_len == 8) *res = be_double_t(data); else if (data_len == 4) - *res = (double) be_float_t(data); + *res = (double)be_float_t(data); else return -1; } - return n + (ssize_t) data_len; + return n + (ssize_t)data_len; } /* @@ -192,14 +192,14 @@ mkv_read_utf8(struct bufferfd *bf, size_t max, char *res) return -1; max--; - to_read = max < data_len ? max : (size_t) data_len; + to_read = max < data_len ? max : (size_t)data_len; - if (bufferfd_bytes(bf, to_read, (uint8_t *) res) < 0) + if (bufferfd_bytes(bf, to_read, (uint8_t *)res) < 0) return -1; res[to_read] = 0; bufferfd_skip(bf, data_len - to_read); - return n + (ssize_t) data_len; + return n + (ssize_t)data_len; } static ssize_t @@ -212,7 +212,7 @@ mkv_skip_element(struct bufferfd *bf) return -1; bufferfd_skip(bf, data_len); - return n + (ssize_t) data_len; + return n + (ssize_t)data_len; } static ssize_t @@ -253,13 +253,13 @@ mkv_read_seek(struct bufferfd *bf, struct mkv_seek *res) { ssize_t consumed; uint64_t data_len; - int got_id = 0; + int got_id = 0; int got_pos = 0; if ((consumed = mkv_read_element_length(bf, &data_len)) < 0) return -1; - consumed += (ssize_t) data_len; + consumed += (ssize_t)data_len; while (data_len > 0) { ssize_t n; @@ -318,8 +318,8 @@ mkv_read_simple_tag(struct bufferfd *bf, struct mkv_simple_tag *res) if ((consumed = mkv_read_element_length(bf, &data_len)) < 0) return -1; - consumed += (ssize_t) data_len; - res->name[0] = 0; + consumed += (ssize_t)data_len; + res->name[0] = 0; res->value[0] = 0; while (data_len > 0) { @@ -341,7 +341,7 @@ mkv_read_simple_tag(struct bufferfd *bf, struct mkv_simple_tag *res) if (n < 0) return -1; - data_len -= (size_t) n < data_len ? (size_t) n : data_len; + data_len -= (size_t)n < data_len ? (size_t)n : data_len; } return consumed; @@ -356,7 +356,7 @@ mkv_read_targets(struct bufferfd *bf, uint64_t *target_type_value) if ((consumed = mkv_read_element_length(bf, &data_len)) < 0) return -1; - consumed += (ssize_t) data_len; + consumed += (ssize_t)data_len; while (data_len > 0) { ssize_t n; @@ -378,7 +378,7 @@ mkv_read_targets(struct bufferfd *bf, uint64_t *target_type_value) if ((n = mkv_skip_element(bf)) < 0) return -1; - data_len -= (size_t) n < data_len ? (size_t) n : data_len; + data_len -= (size_t)n < data_len ? (size_t)n : data_len; } bufferfd_skip(bf, data_len); @@ -442,7 +442,7 @@ mkv_seek(struct bufferfd *bf, size_t header_len, size_t what) while (seekhead_len > 0) { struct mkv_seek s; - s.id = 0; + s.id = 0; s.pos = 0; uint32_t eid; ssize_t n; @@ -470,8 +470,7 @@ mkv_seek(struct bufferfd *bf, size_t header_len, size_t what) } static void -kara_add_simple_tag(struct kara_metadata *dst, struct mkv_simple_tag *t, - uint64_t target_type_value) +kara_add_simple_tag(struct kara_metadata *dst, struct mkv_simple_tag *t, uint64_t target_type_value) { if (STR_MATCH("TITLE", t->name)) { if (target_type_value == 50) @@ -487,7 +486,7 @@ kara_add_simple_tag(struct kara_metadata *dst, struct mkv_simple_tag *t, else if (STR_MATCH("GENRE", t->name)) strncpy(dst->song_type, t->value, LEKTOR_TAG_MAX - 1); else if (STR_MATCH("TRACK", t->name)) - dst->song_number = (int) strtol(t->value, NULL, 10); + dst->song_number = (int)strtol(t->value, NULL, 10); } static void @@ -570,17 +569,16 @@ kara_read_segment_info(struct bufferfd *bf, double *len) int kara_read_length(double *len, const char *filename) { - errno = 0; - int status_code = -1; + errno = 0; + int status_code = -1; struct bufferfd file = { .len = 0, .pos = 0, - .fd = open(filename, O_RDONLY), + .fd = open(filename, O_RDONLY), }; if (file.fd < 0) { - LOG_ERROR("MKV", "Faield to open file '%s': %s", - filename, strerror(errno)); + LOG_ERROR("MKV", "Faield to open file '%s': %s", filename, strerror(errno)); return -1; } @@ -598,8 +596,7 @@ kara_read_length(double *len, const char *filename) goto error; if (eid == EBML_MKV_SEEKHEAD) { - if (mkv_seek(&file, (size_t) header_len, - (size_t) EBML_MKV_SEGMENT) < 0) + if (mkv_seek(&file, (size_t)header_len, (size_t)EBML_MKV_SEGMENT) < 0) goto error; } else if (eid == EBML_MKV_INFO) { if (kara_read_segment_info(&file, len) < 0) @@ -624,14 +621,13 @@ kara_metadata_read(struct kara_metadata *dst, const char *filename) { int status_code = -1; struct bufferfd file; - errno = 0; + errno = 0; file.len = 0; file.pos = 0; - file.fd = open(filename, O_RDONLY); + file.fd = open(filename, O_RDONLY); if (file.fd < 0) { - LOG_ERROR("MKV", "Failed to open file '%s': %s", - filename, strerror(errno)); + LOG_ERROR("MKV", "Failed to open file '%s': %s", filename, strerror(errno)); return -1; } @@ -649,7 +645,7 @@ kara_metadata_read(struct kara_metadata *dst, const char *filename) goto error; if (eid == EBML_MKV_SEEKHEAD) { - if (mkv_seek(&file, (size_t) header_len, (size_t) EBML_MKV_TAGS) < 0) + if (mkv_seek(&file, (size_t)header_len, (size_t)EBML_MKV_TAGS) < 0) goto error; } else if (eid == EBML_MKV_TAGS) { if (kara_read_tags(&file, dst) < 0) @@ -674,15 +670,11 @@ error: int kara_metadata_equals(struct kara_metadata *mdt, const char *filename) { - struct kara_metadata kara_mdt; /* FIXME: Less dirty bomb */ + struct kara_metadata kara_mdt; /* FIXME: Less dirty bomb */ if (kara_metadata_read(&kara_mdt, filename)) return -1; - return ! (STR_MATCH(kara_mdt.song_name, mdt->song_name) && - STR_MATCH(kara_mdt.source_name, mdt->source_name) && - STR_MATCH(kara_mdt.category, mdt->category) && - STR_MATCH(kara_mdt.language, mdt->language) && - STR_MATCH(kara_mdt.author_name, mdt->author_name) && - STR_MATCH(kara_mdt.song_type, mdt->song_type) && - kara_mdt.song_number == mdt->song_number); + return !(STR_MATCH(kara_mdt.song_name, mdt->song_name) && STR_MATCH(kara_mdt.source_name, mdt->source_name) && + STR_MATCH(kara_mdt.category, mdt->category) && STR_MATCH(kara_mdt.language, mdt->language) && + STR_MATCH(kara_mdt.author_name, mdt->author_name) && STR_MATCH(kara_mdt.song_type, mdt->song_type) && + kara_mdt.song_number == mdt->song_number); } - diff --git a/src/mkv/utils.c b/src/mkv/utils.c index ef8c557f29ca5d81823be3269030aef608203e52..52eea59fc07f944af8f7b41d9d3716a20ba3b239 100644 --- a/src/mkv/utils.c +++ b/src/mkv/utils.c @@ -13,20 +13,17 @@ void mdtcat(struct kara_metadata *mdt, char **ret) { - size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) + - strlen(mdt->category) + strlen(mdt->language) + + size_t size = strlen(mdt->song_name) + strlen(mdt->source_name) + strlen(mdt->category) + strlen(mdt->language) + strlen(mdt->author_name) + strlen(mdt->song_type) + - /* Null byte */ 1 + /* Separators */ 12 + 5 + - long_length(mdt->song_number); + /* Null byte */ 1 + /* Separators */ 12 + 5 + long_length(mdt->song_number); *ret = malloc(sizeof(char) * size); if (!*ret) { LOG_ERROR("MKV", "Out of memory"); return; } - safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [%s]", mdt->category, - mdt->language, mdt->source_name, mdt->song_type, - mdt->song_number, mdt->song_name, mdt->author_name); + safe_snprintf(*ret, size, "%s - %s / %s - %s%d - %s [%s]", mdt->category, mdt->language, mdt->source_name, + mdt->song_type, mdt->song_number, mdt->song_name, mdt->author_name); } static const uint8_t __magic[] = { 0x1A, 0x45, 0xDF, 0xA3 }; @@ -46,6 +43,5 @@ mkv_check_magic(const char *file) int mkv_magic(uint8_t tab[4]) { - return ((tab[0] != __magic[0]) + (tab[1] != __magic[1])) + - ((tab[2] != __magic[2]) + (tab[3] != __magic[3])); + return ((tab[0] != __magic[0]) + (tab[1] != __magic[1])) + ((tab[2] != __magic[2]) + (tab[3] != __magic[3])); } diff --git a/src/mkv/write.c b/src/mkv/write.c index 6cc34586437d044bcc9d68785d3fcf80a790a728..b20c6b766311af17f1b0b909156602b445bbb639 100644 --- a/src/mkv/write.c +++ b/src/mkv/write.c @@ -18,45 +18,44 @@ #include <sys/types.h> #include <regex.h> -static const char *METADATA_TEMPLATE = - " <?xml version=\"1.0\" encoding=\"UTF-8\"?> " - " <Tags> " - " <Tag> " - " <Targets> " - " <TargetTypeValue>70</TargetTypeValue> " - " </Targets> " - " <Simple> " - " <Name>TITLE</Name> " - " <String>%s</String> " - " </Simple> " - " </Tag> " - " <Tag> " - " <Simple> " - " <Name>TITLE</Name> " - " <String>%s</String> " - " </Simple> " - " <Simple> " - " <Name>CONTENT_TYPE</Name> " - " <String>%s</String> " - " </Simple> " - " <Simple> " - " <Name>ADDRESS</Name> " - " <String>%s</String> " - " </Simple> " - " <Simple> " - " <Name>ARTIST</Name> " - " <String>%s</String> " - " </Simple> " - " <Simple> " - " <Name>GENRE</Name> " - " <String>%s</String> " - " </Simple> " - " <Simple> " - " <Name>TRACK</Name> " - " <String>%d</String> " - " </Simple> " - " </Tag> " - " </Tags> "; +static const char *METADATA_TEMPLATE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Tags> " + "<Tag> " + " <Targets> " + " <TargetTypeValue>70</TargetTypeValue> " + " </Targets> " + " <Simple> " + " <Name>TITLE</Name> " + " <String>%s</String> " + " </Simple> " + "</Tag> " + "<Tag> " + " <Simple> " + " <Name>TITLE</Name> " + " <String>%s</String> " + " </Simple> " + " <Simple> " + " <Name>CONTENT_TYPE</Name> " + " <String>%s</String> " + " </Simple> " + " <Simple> " + " <Name>ADDRESS</Name> " + " <String>%s</String> " + " </Simple> " + " <Simple> " + " <Name>ARTIST</Name> " + " <String>%s</String> " + " </Simple> " + " <Simple> " + " <Name>GENRE</Name> " + " <String>%s</String> " + " </Simple> " + " <Simple> " + " <Name>TRACK</Name> " + " <String>%d</String> " + " </Simple> " + "</Tag> " + "</Tags> "; static bool mkvpropedit__(const char *const args[]) @@ -76,7 +75,7 @@ mkvpropedit__(const char *const args[]) } /* Let exec search the PATH for us */ - execvp(args[0], (char *const *) args); + execvp(args[0], (char *const *)args); exit(EXIT_FAILURE); } @@ -111,24 +110,21 @@ kara_metadata_write(struct kara_metadata *mdt, const char *filename) { char tmpfilepath[PATH_MAX]; char *const metadafilepath = &tmpfilepath[4]; - const char *args1[] = { "mkvpropedit", "-t", "all:", filename, NULL }; - const char *args2[] = { "mkvpropedit", "-t", tmpfilepath, filename, NULL }; + const char *args1[] = { "mkvpropedit", "-t", "all:", filename, NULL }; + const char *args2[] = { "mkvpropedit", "-t", tmpfilepath, filename, NULL }; int fd, sta = -1; memset(tmpfilepath, 0, PATH_MAX); strncat(tmpfilepath, "all:/tmp/lektor.metadata.XXXXXX", PATH_MAX - 1); if ((fd = mkstemp(metadafilepath)) < 0) { - LOG_ERROR("MKV", "Failed to create temporary file: %s", - strerror(errno)); + LOG_ERROR("MKV", "Failed to create temporary file: %s", strerror(errno)); goto error; } - if (dprintf(fd, METADATA_TEMPLATE, mdt->source_name, mdt->song_name, - mdt->category, mdt->language, mdt->author_name, mdt->song_type, - mdt->song_number) < 0) { - LOG_ERROR("MKV", "Failed to write to temporary file: %s", - metadafilepath); + if (dprintf(fd, METADATA_TEMPLATE, mdt->source_name, mdt->song_name, mdt->category, mdt->language, mdt->author_name, + mdt->song_type, mdt->song_number) < 0) { + LOG_ERROR("MKV", "Failed to write to temporary file: %s", metadafilepath); goto error; } @@ -147,17 +143,16 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta) { static regex_t regex; static int regex_init = 0; - const size_t nmatch = 10; + const size_t nmatch = 10; regmatch_t pmatch[nmatch]; int reti, sta = false; char msgbuf[LEKTOR_TAG_MAX]; char *endptr; /* TODO: Import types and categories from the db */ - static const char *rgx = - "^/(.+)/(vo|va|amv|cdg|autres|vtuber|vocaloid)/" - "(jp|fr|en|ru|sp|it|ch|latin|multi|undefined)/(.+)/" - "(.+) - (OP|ED|IS|AMV|PV|MV|LIVE)([[:digit:]]*) - (.+)\\.mkv$"; + static const char *rgx = "^/(.+)/(vo|va|amv|cdg|autres|vtuber|vocaloid)/" + "(jp|fr|en|ru|sp|it|ch|latin|multi|undefined)/(.+)/" + "(.+) - (OP|ED|IS|AMV|PV|MV|LIVE)([[:digit:]]*) - (.+)\\.mkv$"; if (!regex_init && regcomp(®ex, rgx, REG_EXTENDED)) { LOG_ERROR("MPV", "Failed to compile regex"); @@ -170,7 +165,7 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta) reti = regexec(®ex, mkvfile, nmatch, pmatch, 0); if (!reti) { /* Match */ - // *INDENT-OFF* + // clang-format off memcpy(meta->category, mkvfile + pmatch[2].rm_so, pmatch[2].rm_eo - pmatch[2].rm_so); memcpy(meta->language, mkvfile + pmatch[3].rm_so, pmatch[3].rm_eo - pmatch[3].rm_so); memcpy(meta->author_name, mkvfile + pmatch[4].rm_so, pmatch[4].rm_eo - pmatch[4].rm_so); @@ -178,7 +173,7 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta) memcpy(meta->song_type, mkvfile + pmatch[6].rm_so, pmatch[6].rm_eo - pmatch[6].rm_so); memcpy(msgbuf, mkvfile + pmatch[7].rm_so, pmatch[7].rm_eo - pmatch[7].rm_so); memcpy(meta->song_name, mkvfile + pmatch[8].rm_so, pmatch[8].rm_eo - pmatch[8].rm_so); - // *INDENT-ON* + // clang-format on } else if (REG_NOMATCH == reti) { LOG_ERROR("MKV", "No match for: %s", mkvfile); goto error; @@ -208,8 +203,7 @@ metadata_set_directory(const char *kara_dir) memset(path, 0, PATH_MAX * sizeof(char)); if (!(d = opendir(kara_dir))) { - LOG_ERROR("MKV", "Failed to open directory '%s': %s", kara_dir, - strerror(errno)); + LOG_ERROR("MKV", "Failed to open directory '%s': %s", kara_dir, strerror(errno)); return 1; } @@ -218,13 +212,9 @@ metadata_set_directory(const char *kara_dir) strncat(path, "/", PATH_MAX - 1); strncat(path, dir->d_name, PATH_MAX - 1); - if (dir->d_type == DT_REG && - metadata_from_path(path, &meta) && - ! kara_metadata_write(&meta, path)) + if (dir->d_type == DT_REG && metadata_from_path(path, &meta) && !kara_metadata_write(&meta, path)) continue; - else if (dir->d_type == DT_DIR && - !STR_MATCH(dir->d_name, ".") && - !STR_MATCH(dir->d_name, "..")) + else if (dir->d_type == DT_DIR && !STR_MATCH(dir->d_name, ".") && !STR_MATCH(dir->d_name, "..")) metadata_set_directory(path); } @@ -237,8 +227,5 @@ int metadata_set_file(char *karapath) { struct kara_metadata meta; - - return metadata_from_path(karapath, &meta) && - ! kara_metadata_write(&meta, karapath); + return metadata_from_path(karapath, &meta) && !kara_metadata_write(&meta, karapath); } - diff --git a/src/module/module_repo.c b/src/module/module_repo.c index 8a605837a5134191577dbc41c85b3a6a7a98a6f4..78c612af28b74202455047fcde8c824281d98226 100644 --- a/src/module/module_repo.c +++ b/src/module/module_repo.c @@ -21,9 +21,9 @@ #include <stdarg.h> /* Different kinds of updates */ -#define REPO_UPDATE_KARA (1 << 1) /* Downloading or rescanning the bakabase */ -#define REPO_UPDATE_FAV (1 << 2) /* Downloading the favorites */ -#define REPO_UPDATE_TYPE_COUNT 2 /* Different kinds of download, for some sizes... */ +#define REPO_UPDATE_KARA (1 << 1) /* Downloading or rescanning the bakabase */ +#define REPO_UPDATE_FAV (1 << 2) /* Downloading the favorites */ +#define REPO_UPDATE_TYPE_COUNT 2 /* Different kinds of download, for some sizes... */ /*********** * Globals * @@ -108,7 +108,7 @@ __sleep(void) struct timespec time_sleep = { .tv_sec = 0, .tv_nsec = 100000000L, - }; /* Sleep for 0.1s */ + }; /* Sleep for 0.1s */ nanosleep(&time_sleep, NULL); /* Sleep a bit, better for Hard drive */ } @@ -152,13 +152,13 @@ __craft_filename_non_obfuscate(char str[PATH_MAX], struct kara *kara) { /* Not obfuscate filename, need to create directories, won't fail if not * possible. The program will fail later, when write will be attempted. */ - size_t len = safe_snprintf(str, PATH_MAX, "%s%s/%s/%s/", kara->database_filepath, - kara->mdt.category, kara->mdt.language, kara->mdt.author_name); + size_t len = safe_snprintf(str, PATH_MAX, "%s%s/%s/%s/", kara->database_filepath, kara->mdt.category, + kara->mdt.language, kara->mdt.author_name); __mkdir(str, 0); if (access(str, R_OK | W_OK)) LOG_ERROR("REPO", "No access in read / write for folder %s", str); - safe_snprintf(str + len, PATH_MAX - len, "%s - %s%d - %s.mkv", kara->mdt.source_name, - kara->mdt.song_type, kara->mdt.song_number, kara->mdt.song_name); + safe_snprintf(str + len, PATH_MAX - len, "%s - %s%d - %s.mkv", kara->mdt.source_name, kara->mdt.song_type, + kara->mdt.song_number, kara->mdt.song_name); } static inline void @@ -183,14 +183,14 @@ __clean_memory(struct __memory *m) static size_t __write_mem(char *data, size_t size, size_t nmem, void *user) { - size_t realsize = size * nmem; - struct __memory *mem = (struct __memory *) user; + size_t realsize = size * nmem; + struct __memory *mem = (struct __memory *)user; void *ptr = realloc(mem->mem, mem->size + realsize); RETURN_UNLESS(ptr, "Out of memory", 0); mem->mem = ptr; - memcpy(((uint8_t *) mem->mem) + mem->size, data, realsize); + memcpy(((uint8_t *)mem->mem) + mem->size, data, realsize); mem->size += realsize; return realsize; } @@ -198,8 +198,8 @@ __write_mem(char *data, size_t size, size_t nmem, void *user) static size_t __write_disk(char *data, size_t size, size_t nmem, void *user) { - ssize_t realsize = size * nmem; - struct __file *file = (struct __file *) user; + ssize_t realsize = size * nmem; + struct __file *file = (struct __file *)user; RETURN_IF(write(file->fd, data, realsize) != realsize, "Failed to write", 0); if (file->index < 4) { memcpy(file->magic + file->index, data, 4 - file->index); @@ -219,22 +219,19 @@ __json_dl(const char *url, char **json) CURL *curl_handle; CURLcode res; struct curl_slist *headers = NULL; - int ret = 1; - struct __memory file = { - .mem = NULL, - .size = 0. - }; + int ret = 1; + struct __memory file = { .mem = NULL, .size = 0. }; /* Only accept json file */ headers = curl_slist_append(headers, "Accept: application/json"); headers = curl_slist_append(headers, "Content-Type: application/json"); curl_handle = curl_easy_init(); - curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl_handle, CURLOPT_URL, url); + curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl_handle, CURLOPT_URL, url); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, __write_mem); - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &file); - curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&file); + curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); // 'SSL peer certificate or SSH remote key was not OK' on Fedora curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); @@ -265,15 +262,15 @@ err: static inline int __download_kara(const char *url, const char *path, int override) { + struct curl_slist *headers = NULL; CURL *curl_handle; char ret = 1; errno = 0; int fd = open(path, O_WRONLY | O_APPEND | O_CREAT | O_EXCL | O_NOFOLLOW, S_IRUSR | S_IWUSR); - struct curl_slist *headers = NULL; retest: if (fd < 0) { - if (errno == EEXIST && ! override) { + if (errno == EEXIST && !override) { LOG_ERROR("REPO", "File '%s' already exists", path); return 1; } @@ -309,11 +306,11 @@ retest: /* The file must begin by `1A 45 DF A3` */ curl_handle = curl_easy_init(); - curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); - curl_easy_setopt(curl_handle, CURLOPT_URL, url); + curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl_handle, CURLOPT_URL, url); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, __write_disk); - curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &file); - curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); + curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&file); + curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); // 'SSL peer certificate or SSH remote key was not OK' on Fedora curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); @@ -337,7 +334,7 @@ __handle_got_json_dl(struct kara *kara, int current_id) { /* Download the kara */ database_queue_current_kara(kara->db, NULL, ¤t_id); - if (current_id == (int) kara->id) { + if (current_id == (int)kara->id) { LOG_WARN("REPO", "Update currently playing kara %d, skip it", current_id); lkt_queue_send(kara->repo->queue, lkt_event_skip_current, NULL); } @@ -351,14 +348,12 @@ __handle_got_json_dl(struct kara *kara, int current_id) LOG_INFO("REPO", "Start downloading kara %ld to: %s", kara->id, kara->filename); if (__download_kara(kara->url, kara->filename, true)) { - LOG_WARN("REPO", "Could not download kara %ld at path '%s'", - kara->id, kara->filename); + LOG_WARN("REPO", "Could not download kara %ld at path '%s'", kara->id, kara->filename); return; } if (kara_metadata_write(&kara->mdt, kara->filename)) { - LOG_WARN("REPO", "Could not write metadata to kara '%ld' with path '%s'", - kara->id, kara->filename); + LOG_WARN("REPO", "Could not write metadata to kara '%ld' with path '%s'", kara->id, kara->filename); return; } @@ -369,27 +364,30 @@ __handle_got_json_dl(struct kara *kara, int current_id) database_stamp(kara->db); ++(kara->update_count); - LOG_INFO("REPO", "Added kara %ld from repo %s, filepath is %s", - kara->id, kara->repo->name, kara->filename); + LOG_INFO("REPO", "Added kara %ld from repo %s, filepath is %s", kara->id, kara->repo->name, kara->filename); } static void __handle_got_json_internal_callback(const char *key, const char *val, int comp, void *user) { - struct kara *kara = (struct kara *) user; + struct kara *kara = (struct kara *)user; /* Get the fields */ if (!comp && key && val) { -#define __get_field_string(field) { \ - if (STR_MATCH(#field, key)) { \ - safe_strncpy(kara->mdt.field, val, LEKTOR_TAG_MAX); \ - }} -#define __get_field_long_ex(field, json) { \ - if (STR_MATCH(#json, key)) { \ - kara->field = strtol(val, NULL, 0); \ - }} -#define __get_field_long_mdt(field) __get_field_long_ex(mdt.field, field) -#define __get_field_long_kara(field) __get_field_long_ex(field, field) +#define __get_field_string(field) \ + { \ + if (STR_MATCH(#field, key)) { \ + safe_strncpy(kara->mdt.field, val, LEKTOR_TAG_MAX); \ + } \ + } +#define __get_field_long_ex(field, json) \ + { \ + if (STR_MATCH(#json, key)) { \ + kara->field = strtol(val, NULL, 0); \ + } \ + } +#define __get_field_long_mdt(field) __get_field_long_ex(mdt.field, field) +#define __get_field_long_kara(field) __get_field_long_ex(field, field) __get_field_long_kara(id); __get_field_long_kara(unix_timestamp); @@ -426,9 +424,7 @@ __handle_got_json_internal_callback(const char *key, const char *val, int comp, filestamp = get_mtime(kara->filename); magic_error = mkv_check_magic(kara->filename); - if (filestamp == 0 || - filestamp <= kara->unix_timestamp || - magic_error) + if (filestamp == 0 || filestamp <= kara->unix_timestamp || magic_error) goto do_it; /* Ignore kara */ @@ -453,12 +449,12 @@ __handle_got_json_internal_callback(const char *key, const char *val, int comp, static inline void __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const char *json) { - size_t len = json_parse_get_count(json, 2); + size_t len = json_parse_get_count(json, 2); struct kara kara = { - .repo = repo, - .db = db, - .ignored_count = 0, - .update_count = 0, + .repo = repo, + .db = db, + .ignored_count = 0, + .update_count = 0, }; RETURN_UNLESS(len > 0, "Json invalid or array empty", NOTHING); @@ -468,7 +464,7 @@ __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const kara.kara_dir_len = sizeof(char) * (kara.kara_dir_len + 1); memcpy(kara.database_filepath, repo->kara_dir, kara.kara_dir_len); - memcpy(kara.filename, repo->kara_dir, kara.kara_dir_len); + memcpy(kara.filename, repo->kara_dir, kara.kara_dir_len); if (kara.database_filepath[kara.kara_dir_len - 1] != '/') { strncat(kara.database_filepath, "/", PATH_MAX - 1); @@ -477,10 +473,10 @@ __handle_got_json(volatile sqlite3 *db, struct module_repo_internal *repo, const /* Handle the json */ LOG_INFO("REPO", "Starting to process json for repo %s, total of %ld karas", repo->name, len); - lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *) (size_t) len); - json_parse(json, 2, __handle_got_json_internal_callback, (void *) &kara); - LOG_INFO("REPO", "Updated %ld karas and ignored %ld karas, total is %ld", - kara.update_count, kara.ignored_count, len); + lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *)(size_t)len); + json_parse(json, 2, __handle_got_json_internal_callback, (void *)&kara); + LOG_INFO("REPO", "Updated %ld karas and ignored %ld karas, total is %ld", kara.update_count, kara.ignored_count, + len); } static inline void @@ -522,7 +518,7 @@ __worker_update(void *__repo) database_updated(repo->db); GOTO_IF(pthread_mutex_lock(&(repo->mtx)), "Failed to lock", end_no_lock); - repo->updating &= (~ REPO_UPDATE_KARA); + repo->updating &= (~REPO_UPDATE_KARA); GOTO_IF(pthread_mutex_unlock(&(repo->mtx)), "Failed to unlock", end_no_lock); end_no_lock: @@ -550,7 +546,7 @@ __worker_rescan(void *__repo) /* Don't check timestamp. TODO: Sometimes we want to check them */ GOTO_IF(pthread_mutex_lock(&(repo->mtx)), "Failed to lock", end_no_lock); - repo->updating &= (~ REPO_UPDATE_KARA); + repo->updating &= (~REPO_UPDATE_KARA); GOTO_IF(pthread_mutex_unlock(&(repo->mtx)), "Failed to unlock", end_no_lock); end_no_lock: @@ -564,8 +560,8 @@ __handle_fav_list_internal(const char UNUSED *key, const char *val, int UNUSED c if (val == NULL) return; - struct __uri *uri = (struct __uri *) user; - uri->uri.id = strtol(val, NULL, 0); + struct __uri *uri = (struct __uri *)user; + uri->uri.id = strtol(val, NULL, 0); lkt_queue_send(uri->repo->queue, lkt_event_db_update_tick, NULL); if (!database_plt_add_uri(uri->repo->db, uri->fav, &uri->uri)) { LOG_ERROR("REPO", "Failed to add kara %ld to playlist %s", uri->uri.id, uri->fav); @@ -573,7 +569,6 @@ __handle_fav_list_internal(const char UNUSED *key, const char *val, int UNUSED c } /* Dirty fix for db lock and hard drive usage */ __sleep(); - } static inline void @@ -595,11 +590,11 @@ __handle_fav_list(struct module_repo_internal *repo, char *fav, size_t fav_size) if (fav_size - 1 == fav_len) { fav_origin = fav; LOG_WARN("REPO", "Fav list has a name to big to prepend it by '@'. " - "Possible collision with other playlists"); + "Possible collision with other playlists"); } else { memmove(fav + sizeof(char), fav, fav_len * sizeof(char)); fav_origin = fav + sizeof(char); - fav[0] = (char) ('@'); + fav[0] = (char)('@'); LOG_INFO("REPO", "Importing fav list '%s' as '%s'", fav_origin, fav); } @@ -614,8 +609,8 @@ __handle_fav_list(struct module_repo_internal *repo, char *fav, size_t fav_size) }; size_t len = json_parse_get_count(json, 2); - lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *) (size_t) len); - json_parse(json, 2, __handle_fav_list_internal, (void *) &uri); + lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *)(size_t)len); + json_parse(json, 2, __handle_fav_list_internal, (void *)&uri); LOG_INFO("REPO", "Finished importing fav list '%s' as '%s'", fav_origin, fav); free(json); } @@ -626,7 +621,7 @@ __worker_import_favorites_internal(const char UNUSED *k, const char *val, int UN if (val == NULL) return; - struct module_repo_internal *repo = (struct module_repo_internal *) user; + struct module_repo_internal *repo = (struct module_repo_internal *)user; char fav[LKT_LINE_MAX]; safe_strncpy(fav, val, LKT_LINE_MAX); /* TODO: Add a way to use the workers to do this for each fav list */ @@ -653,13 +648,13 @@ __worker_import_favorites(void *__repo) size_t len = json_parse_get_count(json, 2); LOG_INFO("REPO", "Finished to dl favorite lists, got %ld lists", len); lkt_queue_send(repo->queue, lkt_event_db_updating, LKT_DB_UPDATING_PROGRESS); - lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *) (size_t) len); - json_parse(json, 2, __worker_import_favorites_internal, (void *) repo); + lkt_queue_send(repo->queue, lkt_event_db_update_total, (void *)(size_t)len); + json_parse(json, 2, __worker_import_favorites_internal, (void *)repo); free(json); LOG_INFO("REPO", "Finished to deal with %ld favorite lists", len); GOTO_IF(pthread_mutex_lock(&(repo->mtx)), "Failed to lock", end_no_lock); - repo->updating &= (~ REPO_UPDATE_FAV); + repo->updating &= (~REPO_UPDATE_FAV); GOTO_IF(pthread_mutex_unlock(&(repo->mtx)), "Failed to unlock", end_no_lock); end_no_lock: @@ -696,8 +691,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil } obfuscate = obfuscate ? 1 : 0; /* Safe values */ - LOG_WARN("REPO", "Downloading base in %s mode, mode is number: %d", - obfuscate ? "obfuscation" : "clear", obfuscate); + LOG_WARN("REPO", "Downloading base in %s mode, mode is number: %d", obfuscate ? "obfuscation" : "clear", obfuscate); if (!database_config_obfuscation_check(db, obfuscate)) LOG_WARN("REPO", "Database obfuscation mismatch. File names may be inconsistent"); @@ -708,7 +702,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil .db = db, .updating = 0, .name = safe_zero_malloc(LKT_LINE_MAX * sizeof(char)), - .kara_dir = safe_zero_malloc(PATH_MAX * sizeof(char)), + .kara_dir = safe_zero_malloc(PATH_MAX * sizeof(char)), .get_id_json = safe_zero_malloc(LKT_LINE_MAX * sizeof(char)), .get_id_file = safe_zero_malloc(LKT_LINE_MAX * sizeof(char)), .get_fav_json = safe_zero_malloc(LKT_LINE_MAX * sizeof(char)), @@ -718,13 +712,13 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil }; /* Copies */ - if (!database_config_get(db, "database", "kara_dir", repo.kara_dir, PATH_MAX) || - !database_config_get(db, "repo", "name", repo.name, LKT_LINE_MAX) || - !database_config_get(db, "repo", "url", repo.base_url, LKT_LINE_MAX) || - !database_config_get(db, "repo", "id_json", repo.get_id_json, LKT_LINE_MAX) || - !database_config_get(db, "repo", "id_kara", repo.get_id_file, LKT_LINE_MAX) || - !database_config_get(db, "repo", "fav_json", repo.get_fav_json, LKT_LINE_MAX) || - !database_config_get(db, "repo", "json", repo.get_all_json, LKT_LINE_MAX) ) { + if (!database_config_get(db, "database", "kara_dir", repo.kara_dir, PATH_MAX) || + !database_config_get(db, "repo", "name", repo.name, LKT_LINE_MAX) || + !database_config_get(db, "repo", "url", repo.base_url, LKT_LINE_MAX) || + !database_config_get(db, "repo", "id_json", repo.get_id_json, LKT_LINE_MAX) || + !database_config_get(db, "repo", "id_kara", repo.get_id_file, LKT_LINE_MAX) || + !database_config_get(db, "repo", "fav_json", repo.get_fav_json, LKT_LINE_MAX) || + !database_config_get(db, "repo", "json", repo.get_all_json, LKT_LINE_MAX)) { LOG_ERROR("REPO", "Configuration invalid, but it should not be at this point"); exit(EXIT_FAILURE); } @@ -734,8 +728,7 @@ module_repo_new(struct module_repo_internal *repo_, struct queue *queue, volatil int workers_count; if (!database_config_get(db, "repo", "workers_count", &workers_count)) workers_count = 5; - if (worker_pool_new(&repo_->workers, - 10 /* Initial number of elements in the call queue */, + if (worker_pool_new(&repo_->workers, 10 /* Initial number of elements in the call queue */, workers_count /* Number of worker threads */)) { LOG_ERROR("REPO", "Out of memory"); return false; @@ -754,7 +747,7 @@ mod_new(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); struct queue *queue = va_arg(copy, struct queue *); volatile sqlite3 *db = va_arg(copy, volatile sqlite3 *); @@ -773,7 +766,7 @@ mod_new(va_list *va) va_end(copy); if (!ret) LOG_ERROR("REPO", "Failed to create the module"); - return ! ret; + return !ret; } static int @@ -782,7 +775,7 @@ mod_close(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); module_repo_close(*repo); va_end(copy); return 0; @@ -794,7 +787,7 @@ mod_free(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); module_repo_close(*repo); worker_pool_free(&(*repo)->workers); @@ -819,7 +812,7 @@ mod_update(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); int ret = 0; GOTO_IF(pthread_mutex_lock(&(*repo)->mtx), "Failed to lock", end_no_lock); @@ -828,7 +821,7 @@ mod_update(va_list *va) goto end; } (*repo)->updating &= REPO_UPDATE_KARA; - if (worker_pool_push(&(*repo)->workers, __worker_update, (void *) *repo)) { + if (worker_pool_push(&(*repo)->workers, __worker_update, (void *)*repo)) { LOG_ERROR("REPO", "Out of memory"); ret = 1; goto end; @@ -848,7 +841,7 @@ mod_rescan(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); int ret = 0; GOTO_IF(pthread_mutex_lock(&(*repo)->mtx), "Failed to lock", end_no_lock); @@ -857,7 +850,7 @@ mod_rescan(va_list *va) goto end; } (*repo)->updating &= REPO_UPDATE_KARA; - if (worker_pool_push(&(*repo)->workers, __worker_rescan, (void *) *repo)) { + if (worker_pool_push(&(*repo)->workers, __worker_rescan, (void *)*repo)) { LOG_ERROR("REPO", "Out of memory"); ret = 1; goto end; @@ -877,7 +870,7 @@ mod_import(va_list *va) va_list copy; struct module_repo_internal **repo; va_copy(copy, *va); - repo = (struct module_repo_internal **) va_arg(copy, void **); + repo = (struct module_repo_internal **)va_arg(copy, void **); int ret = 0; GOTO_IF(pthread_mutex_lock(&(*repo)->mtx), "Failed to lock", end_no_lock); @@ -887,7 +880,7 @@ mod_import(va_list *va) } (*repo)->updating &= REPO_UPDATE_FAV; - if (worker_pool_push(&(*repo)->workers, __worker_import_favorites, (void *) *repo)) { + if (worker_pool_push(&(*repo)->workers, __worker_import_favorites, (void *)*repo)) { LOG_ERROR("REPO", "Out of memory"); ret = 1; goto end; @@ -901,13 +894,13 @@ end_no_lock: } REG_BEGIN(repo_reg) -REG_ADD_NAMED("new", mod_new) /* Create the module */ -REG_ADD_NAMED("free", mod_free) /* Close and free ressources */ -REG_ADD_NAMED("close", mod_close) /* Stop the module */ +REG_ADD_NAMED("new", mod_new) /* Create the module */ +REG_ADD_NAMED("free", mod_free) /* Close and free ressources */ +REG_ADD_NAMED("close", mod_close) /* Stop the module */ REG_ADD_NAMED("update", mod_update) /* Update from kurisu */ REG_ADD_NAMED("rescan", mod_rescan) /* Rescan from hard drive */ REG_ADD_NAMED("import", mod_import) /* Import favorites from kurisu */ REG_END() -#if ! defined (LKT_STATIC_MODULE) - REG_EXPORT(repo_reg) +#if !defined(LKT_STATIC_MODULE) +REG_EXPORT(repo_reg) #endif diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c index 15698da76a18302044ff1198e4826c792450ba3f..7e77b6dc5a8b8a56e35a84f8701f12c8bd3f7ab3 100644 --- a/src/module/module_sdl2.c +++ b/src/module/module_sdl2.c @@ -20,8 +20,8 @@ #include <mpv/render_gl.h> #include <mpv/client.h> -#define WIDTH 400 -#define HEIGHT 200 +#define WIDTH 400 +#define HEIGHT 200 static volatile Uint32 wakeup_on_mpv_render_update, wakeup_on_mpv_events; @@ -34,15 +34,15 @@ struct module_sdl2_window { /* Mpv related */ volatile mpv_handle *mpv; volatile mpv_render_context *mpv_gl; - volatile int mpv_time_pos; /* Don't write it in the database */ - volatile int mpv_duration; /* Because don't need to be persistent */ + volatile int mpv_time_pos; /* Don't write it in the database */ + volatile int mpv_duration; /* Because don't need to be persistent */ volatile int state; volatile int hinib; volatile int set_seek; /* Thread related */ struct poller_thread self; - volatile int launched; /* SDL you sucks */ + volatile int launched; /* SDL you sucks */ /* Things from the server */ struct queue *queue; @@ -53,18 +53,16 @@ struct module_sdl2_window { * Function definitions * ************************/ -// *INDENT-OFF* -static bool module_sdl2_get_elapsed (struct module_sdl2_window *, int *); +static bool module_sdl2_get_elapsed(struct module_sdl2_window *, int *); static bool module_sdl2_get_duration(struct module_sdl2_window *, int *); -static bool module_sdl2_set_paussed (struct module_sdl2_window *, int); -static bool module_sdl2_set_volume (struct module_sdl2_window *, int); +static bool module_sdl2_set_paussed(struct module_sdl2_window *, int); +static bool module_sdl2_set_volume(struct module_sdl2_window *, int); static bool module_sdl2_set_position(struct module_sdl2_window *, int); -static bool module_sdl2_load_file (struct module_sdl2_window *, const char *); +static bool module_sdl2_load_file(struct module_sdl2_window *, const char *); static bool module_sdl2_toggle_pause(struct module_sdl2_window *); -static void module_sdl2_free (struct module_sdl2_window *); -static void module_sdl2_close (struct module_sdl2_window *); -static bool module_sdl2_new (struct module_sdl2_window **, struct queue *, volatile sqlite3 *); -// *INDENT-OF* +static void module_sdl2_free(struct module_sdl2_window *); +static void module_sdl2_close(struct module_sdl2_window *); +static bool module_sdl2_new(struct module_sdl2_window **, struct queue *, volatile sqlite3 *); /********************* * Private functions * @@ -101,17 +99,14 @@ init_mpv__(mpv_handle **ctx, volatile sqlite3 *db) } static inline bool -init_mpv_gl__(mpv_handle *mpv, mpv_render_context **mpv_gl, - mpv_render_param *params) +init_mpv_gl__(mpv_handle *mpv, mpv_render_context **mpv_gl, mpv_render_param *params) { int status; - RETURN_IF((status = mpv_render_context_create(mpv_gl, mpv, params)) < 0, - mpv_error_string(status), 1); + RETURN_IF((status = mpv_render_context_create(mpv_gl, mpv, params)) < 0, mpv_error_string(status), 1); wakeup_on_mpv_render_update = SDL_RegisterEvents(1); - wakeup_on_mpv_events = SDL_RegisterEvents(1); - if (wakeup_on_mpv_render_update == (Uint32) - 1 || - wakeup_on_mpv_events == (Uint32) - 1) { + wakeup_on_mpv_events = SDL_RegisterEvents(1); + if (wakeup_on_mpv_render_update == (Uint32)-1 || wakeup_on_mpv_events == (Uint32)-1) { LOG_ERROR("WINDOW", "Failed to register event"); return 1; } @@ -131,12 +126,12 @@ mod_new(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); struct queue *queue = va_arg(copy, struct queue *); volatile sqlite3 *db = va_arg(copy, volatile sqlite3 *); - bool ret = module_sdl2_new(win, queue, db); + bool ret = module_sdl2_new(win, queue, db); va_end(copy); - return ! ret; + return !ret; } static int @@ -145,7 +140,7 @@ mod_close(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); module_sdl2_close(*win); va_end(copy); return 0; @@ -157,7 +152,7 @@ mod_free(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); module_sdl2_free(*win); va_end(copy); return 0; @@ -169,10 +164,10 @@ mod_toggle_pause(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); bool ret = module_sdl2_toggle_pause(*win); va_end(copy); - return ! ret; + return !ret; } static int @@ -181,11 +176,11 @@ mod_load_file(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); const char *file = va_arg(copy, const char *); bool ret = module_sdl2_load_file(*win, file); va_end(copy); - return ! ret; + return !ret; } static int @@ -194,11 +189,11 @@ mod_set_volume(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); int volume = va_arg(copy, int); bool ret = module_sdl2_set_volume(*win, volume); va_end(copy); - return ! ret; + return !ret; } static int @@ -207,11 +202,11 @@ mod_set_paused(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); int state = va_arg(copy, int); bool ret = module_sdl2_set_paussed(*win, state); va_end(copy); - return ! ret; + return !ret; } static int @@ -220,11 +215,11 @@ mod_set_position(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); int seconds = va_arg(copy, int); bool ret = module_sdl2_set_position(*win, seconds); va_end(copy); - return ! ret; + return !ret; } static int @@ -233,11 +228,11 @@ mod_get_duration(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); int *duration = va_arg(copy, int *); bool ret = module_sdl2_get_duration(*win, duration); va_end(copy); - return ! ret; + return !ret; } static int @@ -246,11 +241,11 @@ mod_get_elapsed(va_list *va) va_list copy; struct module_sdl2_window **win; va_copy(copy, *va); - win = (struct module_sdl2_window **) va_arg(copy, void **); + win = (struct module_sdl2_window **)va_arg(copy, void **); int *elapsed = va_arg(copy, int *); bool ret = module_sdl2_get_elapsed(*win, elapsed); va_end(copy); - return ! ret; + return !ret; } /******************** @@ -258,19 +253,19 @@ mod_get_elapsed(va_list *va) ********************/ REG_BEGIN(sdl2_reg) -REG_ADD_NAMED("new", mod_new) -REG_ADD_NAMED("free", mod_free) -REG_ADD_NAMED("close", mod_close) -REG_ADD_NAMED("toggle", mod_toggle_pause) -REG_ADD_NAMED("load", mod_load_file) -REG_ADD_NAMED("set_paused", mod_set_paused) +REG_ADD_NAMED("new", mod_new) +REG_ADD_NAMED("free", mod_free) +REG_ADD_NAMED("close", mod_close) +REG_ADD_NAMED("toggle", mod_toggle_pause) +REG_ADD_NAMED("load", mod_load_file) +REG_ADD_NAMED("set_paused", mod_set_paused) REG_ADD_NAMED("set_position", mod_set_position) -REG_ADD_NAMED("set_volume", mod_set_volume) +REG_ADD_NAMED("set_volume", mod_set_volume) REG_ADD_NAMED("get_duration", mod_get_duration) -REG_ADD_NAMED("get_elapsed", mod_get_elapsed) +REG_ADD_NAMED("get_elapsed", mod_get_elapsed) REG_END() -#if ! defined (LKT_STATIC_MODULE) - REG_EXPORT(sdl2_reg) +#if !defined(LKT_STATIC_MODULE) +REG_EXPORT(sdl2_reg) #endif /*************************** @@ -289,8 +284,8 @@ sdl_thread__(struct poller_thread_arg *arg) free(arg); struct lkt_module module = { .handle = NULL, - .reg = sdl2_reg, - .data = sdl2, + .reg = sdl2_reg, + .data = sdl2, }; /* Init the SDL window @@ -300,49 +295,35 @@ sdl_thread__(struct poller_thread_arg *arg) RETURN_IF(SDL_Init(SDL_INIT_VIDEO) < 0, "Failed to init SDL", NULL); RETURN_IF(IMG_Init(IMG_INIT_JPG | IMG_INIT_PNG) < 0, "Failed to init", NULL) - sdl2->window = SDL_CreateWindow("lektord", SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, - SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | - SDL_WINDOW_RESIZABLE); + sdl2->window = SDL_CreateWindow("lektord", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, + SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); RETURN_UNLESS(sdl2->window, "Failed to create the window", NULL); - sdl2->glcontext = SDL_GL_CreateContext((SDL_Window *) sdl2->window); + sdl2->glcontext = SDL_GL_CreateContext((SDL_Window *)sdl2->window); RETURN_UNLESS(sdl2->glcontext, "Failed to create the SDL context", NULL); - /* Set window icon */ SDL_Surface *window_icon = IMG_ReadXPMFromArray(icon); if (NULL == window_icon) LOG_ERROR("WINDOW", "Failed to load xpm icon: %s", IMG_GetError()); else { - SDL_SetWindowIcon((SDL_Window *) sdl2->window, window_icon); + SDL_SetWindowIcon((SDL_Window *)sdl2->window, window_icon); SDL_FreeSurface(window_icon); } /* Init mpv here */ - RETURN_IF(init_mpv__((mpv_handle **) & sdl2->mpv, sdl2->db), - "Failed to init mpv", false); - - mpv_render_param params[] = { - { MPV_RENDER_PARAM_API_TYPE, MPV_RENDER_API_TYPE_OPENGL }, - { - MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &(mpv_opengl_init_params) - { - .get_proc_address = get_proc_address_mpv, - } - }, - { - MPV_RENDER_PARAM_ADVANCED_CONTROL, &(int) - { - 1 - } - }, - {0} - }; + RETURN_IF(init_mpv__((mpv_handle **)&sdl2->mpv, sdl2->db), "Failed to init mpv", false); + + mpv_render_param params[] = { { MPV_RENDER_PARAM_API_TYPE, MPV_RENDER_API_TYPE_OPENGL }, + { MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, + &(mpv_opengl_init_params){ + .get_proc_address = get_proc_address_mpv, + } }, + { MPV_RENDER_PARAM_ADVANCED_CONTROL, &(int){ 1 } }, + { 0 } }; - RETURN_IF(init_mpv_gl__((mpv_handle *) sdl2->mpv, (mpv_render_context **) - &sdl2->mpv_gl, params), + RETURN_IF(init_mpv_gl__((mpv_handle *)sdl2->mpv, (mpv_render_context **)&sdl2->mpv_gl, params), "Failed to init mpv_gl", false); while (!sdl2->launched) @@ -370,16 +351,16 @@ loop: case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_LEFT && ctrl) { const char *cmd_seek[] = { "seek", "-5", "relative", NULL }; - mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); + mpv_command_async((mpv_handle *)sdl2->mpv, 0, cmd_seek); } else if (event.key.keysym.sym == SDLK_RIGHT && ctrl) { const char *cmd_seek[] = { "seek", "+5", "relative", NULL }; - mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek); + mpv_command_async((mpv_handle *)sdl2->mpv, 0, cmd_seek); } break; case SDL_KEYUP: state = SDL_GetKeyboardState(NULL); - ctrl = state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL]; + ctrl = state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL]; if (ctrl && event.key.keysym.sym == SDLK_SPACE) lkt_queue_send(sdl2->queue, lkt_event_play_toggle, LKT_PLAY_TOGGLE); @@ -390,17 +371,16 @@ loop: else if (event.key.keysym.sym == SDLK_p && ctrl) lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL); - else if ((event.key.keysym.sym == SDLK_RETURN || - event.key.keysym.sym == SDLK_RETURN2 || - event.key.keysym.sym == SDLK_KP_ENTER) && ctrl) + else if ((event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_RETURN2 || + event.key.keysym.sym == SDLK_KP_ENTER) && + ctrl) lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL); else if (event.key.keysym.sym == SDLK_F11) { if (sdl2->is_fullscreen) - SDL_SetWindowFullscreen((SDL_Window *) sdl2->window, 0); + SDL_SetWindowFullscreen((SDL_Window *)sdl2->window, 0); else - SDL_SetWindowFullscreen((SDL_Window *) sdl2->window, - SDL_WINDOW_FULLSCREEN); + SDL_SetWindowFullscreen((SDL_Window *)sdl2->window, SDL_WINDOW_FULLSCREEN); /* May use SDL_WINDOW_FULLSCREEN_DESKTOP, need to check. */ sdl2->is_fullscreen = 1 - sdl2->is_fullscreen; } @@ -411,52 +391,45 @@ loop: default: if (event.type == wakeup_on_mpv_render_update) { - flags = mpv_render_context_update((mpv_render_context *) - sdl2->mpv_gl); + flags = mpv_render_context_update((mpv_render_context *)sdl2->mpv_gl); if (flags & MPV_RENDER_UPDATE_FRAME) redraw = 1; } if (event.type == wakeup_on_mpv_events) { - lmpv_handle(&module, (mpv_handle *) sdl2->mpv, sdl2->queue, - &sdl2->mpv_time_pos, &sdl2->mpv_duration, + lmpv_handle(&module, (mpv_handle *)sdl2->mpv, sdl2->queue, &sdl2->mpv_time_pos, &sdl2->mpv_duration, &sdl2->state, &sdl2->hinib, &sdl2->set_seek); } } if (redraw) { - SDL_GetWindowSize((SDL_Window *) sdl2->window, &w, &h); + SDL_GetWindowSize((SDL_Window *)sdl2->window, &w, &h); /* Specify the default framebuffer (0) as target. This will render onto the entire screen. If you want to show the video in a smaller rectangle or apply fancy transformations, you'll need to render into a separate FBO and draw it manually. */ - mpv_render_param params[] = { { - MPV_RENDER_PARAM_OPENGL_FBO, &(mpv_opengl_fbo) - { - .fbo = 0, .w = w, .h = h, - } - }, { - MPV_RENDER_PARAM_FLIP_Y, &(int) - { - 1 - } - }, {0} - }; - mpv_render_context_render((mpv_render_context *) sdl2->mpv_gl, params); - SDL_GL_SwapWindow((SDL_Window *) sdl2->window); + mpv_render_param params[] = { { MPV_RENDER_PARAM_OPENGL_FBO, + &(mpv_opengl_fbo){ + .fbo = 0, + .w = w, + .h = h, + } }, + { MPV_RENDER_PARAM_FLIP_Y, &(int){ 1 } }, + { 0 } }; + mpv_render_context_render((mpv_render_context *)sdl2->mpv_gl, params); + SDL_GL_SwapWindow((SDL_Window *)sdl2->window); redraw = 0; } sched_yield(); - goto loop; /* A loop without indentation. */ + goto loop; /* A loop without indentation. */ end: sdl2->launched = 0; return NULL; } static bool -module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, - volatile sqlite3 *db) +module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, volatile sqlite3 *db) { RETURN_UNLESS(win, "Invalid arguments", false); struct poller_thread_arg *arg; @@ -474,13 +447,12 @@ module_sdl2_new(struct module_sdl2_window **win, struct queue *queue, arg = malloc(sizeof(struct poller_thread_arg)); RETURN_UNLESS(arg, "Out of memory", false); arg->args = *win; - RETURN_IF(poller_new(&(*win)->self, sdl_thread__, arg), - "Failed to launch the SDL thread", false); + RETURN_IF(poller_new(&(*win)->self, sdl_thread__, arg), "Failed to launch the SDL thread", false); } else LOG_DEBUG("WINDOW", "SDL window already created"); /* Finish */ - SDL_SetWindowTitle((SDL_Window *) (*win)->window, "Lektord"); + SDL_SetWindowTitle((SDL_Window *)(*win)->window, "Lektord"); SDL_DisableScreenSaver(); (*win)->launched = 1; return true; @@ -494,7 +466,7 @@ module_sdl2_close(struct module_sdl2_window *win) SET_STATE_FLAG(win->state, STOP); RETURN_UNLESS(win->mpv, "Missing mpv ctx", NOTHING); static const char *cmd[] = { "stop", NULL }; - mpv_command_async((mpv_handle *) win->mpv, 0, cmd); + mpv_command_async((mpv_handle *)win->mpv, 0, cmd); LOG_INFO("WINDOW", "Module closed"); /* TODO: make the SDL window background be black. */ } @@ -516,14 +488,14 @@ static bool module_sdl2_toggle_pause(struct module_sdl2_window *win) { RETURN_UNLESS(win, "Invalid arguments", false); - return ! lmpv_toggle_pause((mpv_handle *) win->mpv); + return !lmpv_toggle_pause((mpv_handle *)win->mpv); } static bool module_sdl2_load_file(struct module_sdl2_window *win, const char *filepath) { RETURN_UNLESS(win, "Invalid arguments", false); - bool ret = ! lmpv_load_file((mpv_handle *) win->mpv, filepath); + bool ret = !lmpv_load_file((mpv_handle *)win->mpv, filepath); win->mpv_duration = 0; win->mpv_time_pos = 0; win->hinib = true; @@ -536,7 +508,7 @@ module_sdl2_set_paussed(struct module_sdl2_window *win, int paused) { RETURN_UNLESS(win && win->window, "Invalid arguments", false); if (((!paused) && win->state == STATE_PAUSE) || (win->state == STATE_PLAY && paused)) { - return ! lmpv_toggle_pause((struct mpv_handle *) win->mpv); + return !lmpv_toggle_pause((struct mpv_handle *)win->mpv); } else { LOG_DEBUG("WINDOW", "No need to toggle paused state, already what was asked"); return true; @@ -547,7 +519,7 @@ static bool module_sdl2_set_volume(struct module_sdl2_window *win, int vol) { RETURN_UNLESS(win && win->window, "Invalid arguments", false); - return ! lmpv_set_volume((mpv_handle *) win->mpv, vol); + return !lmpv_set_volume((mpv_handle *)win->mpv, vol); } static bool diff --git a/src/module/mpv.c b/src/module/mpv.c index 6dc765279555649b507f5831a39b97a20d1e0d41..3672b52b596220170d8fe5ed40a6f0b3eb9a2541 100644 --- a/src/module/mpv.c +++ b/src/module/mpv.c @@ -14,7 +14,7 @@ void lmpv_free(mpv_handle **ctx) { RETURN_UNLESS(ctx && *ctx, "Missing mpv ctx", NOTHING); - static const char *cmd[] = {"quit", NULL}; + static const char *cmd[] = { "quit", NULL }; mpv_command(*ctx, cmd); mpv_destroy(*ctx); *ctx = NULL; @@ -29,39 +29,38 @@ lmpv_prepare(volatile sqlite3 *db) RETURN_UNLESS(ctx, "Failed to create context", NULL); char _opt[LKT_LINE_MAX]; -#define MPV_SET_OPTION(opt, value) \ - if ((status = mpv_set_option_string(ctx, opt, value)) < 0) { \ - LOG_ERROR("WINDOW", "Failed to set %s to %s: %s", \ - opt, value, mpv_error_string(status)); \ - return NULL; \ +#define MPV_SET_OPTION(opt, value) \ + if ((status = mpv_set_option_string(ctx, opt, value)) < 0) { \ + LOG_ERROR("WINDOW", "Failed to set %s to %s: %s", opt, value, mpv_error_string(status)); \ + return NULL; \ } -#define MPV_SET_FROM_INI(opt, section, key) \ - if (!database_config_get(db, section, key, _opt, LKT_LINE_MAX)) { \ - LOG_WARN("WINDOW", "Failed to get option " \ - key " in section " section); \ - return ctx; \ - } \ +#define MPV_SET_FROM_INI(opt, section, key) \ + if (!database_config_get(db, section, key, _opt, LKT_LINE_MAX)) { \ + LOG_WARN("WINDOW", "Failed to get option " key " in section " section); \ + return ctx; \ + } \ MPV_SET_OPTION(opt, _opt); -#define MPV_SET_OPTION_COND(opt, value, ini_section, ini_option, def) ({ \ - int ___cond; \ - if (!database_config_get(db, ini_section, ini_option, &___cond)) { \ - LOG_WARN("WINDOW", "Default [" ini_section "/" ini_option "] to " #def); \ - ___cond = (def); \ - } \ - if (___cond) \ - MPV_SET_OPTION(opt, value); \ +#define MPV_SET_OPTION_COND(opt, value, ini_section, ini_option, def) \ + ({ \ + int ___cond; \ + if (!database_config_get(db, ini_section, ini_option, &___cond)) { \ + LOG_WARN("WINDOW", "Default [" ini_section "/" ini_option "] to " #def); \ + ___cond = (def); \ + } \ + if (___cond) \ + MPV_SET_OPTION(opt, value); \ }) MPV_SET_OPTION("input-default-bindings", "yes"); - MPV_SET_OPTION("input-vo-keyboard", "yes"); - MPV_SET_OPTION("replaygain", "track"); + MPV_SET_OPTION("input-vo-keyboard", "yes"); + MPV_SET_OPTION("replaygain", "track"); MPV_SET_OPTION("demuxer-readahead-secs", "5.0"); - MPV_SET_OPTION("demuxer-max-bytes", "100M"); - MPV_SET_OPTION("hwdec", "yes"); + MPV_SET_OPTION("demuxer-max-bytes", "100M"); + MPV_SET_OPTION("hwdec", "yes"); MPV_SET_OPTION_COND("gpu-context", "x11", "player", "force_x11", 1); /* Wayland you sucks */ MPV_SET_FROM_INI("osd-font-size", "player", "font_size"); - MPV_SET_FROM_INI("osd-font", "player", "font_name"); - MPV_SET_FROM_INI("osd-duration", "player", "msg_duration"); + MPV_SET_FROM_INI("osd-font", "player", "font_name"); + MPV_SET_FROM_INI("osd-duration", "player", "msg_duration"); return ctx; #undef MPV_SET_OPTION #undef MPV_SET_FROM_INI @@ -72,9 +71,9 @@ int lmpv_observe_properties(mpv_handle *ctx) { return (mpv_observe_property(ctx, 0, "ao-volume", MPV_FORMAT_INT64) >= 0) && - (mpv_observe_property(ctx, 0, "duration", MPV_FORMAT_INT64) >= 0) && - (mpv_observe_property(ctx, 0, "time-pos", MPV_FORMAT_INT64) >= 0) && - (mpv_observe_property(ctx, 0, "pause", MPV_FORMAT_FLAG) >= 0); + (mpv_observe_property(ctx, 0, "duration", MPV_FORMAT_INT64) >= 0) && + (mpv_observe_property(ctx, 0, "time-pos", MPV_FORMAT_INT64) >= 0) && + (mpv_observe_property(ctx, 0, "pause", MPV_FORMAT_FLAG) >= 0); } mpv_handle * @@ -113,7 +112,7 @@ lmpv_set_position(mpv_handle *ctx, int pos) char str[LKT_LINE_MAX]; memset(str, 0, LKT_LINE_MAX * sizeof(char)); safe_snprintf(str, LKT_LINE_MAX, "%d", pos); - const char *cmd[] = {"seek", str, "absolute", NULL}; + const char *cmd[] = { "seek", str, "absolute", NULL }; if ((status = mpv_command_async(ctx, 0, cmd)) < 0) { LOG_ERROR("WINDOW", "Failed to execute command: %s", mpv_error_string(status)); return 1; @@ -129,7 +128,7 @@ lmpv_set_volume(mpv_handle *ctx, int vol) char str[5]; memset(str, 0, 5); safe_snprintf(str, 4, "%d", vol); - const char *cmd[] = {"set", "ao-volume", str, NULL}; + const char *cmd[] = { "set", "ao-volume", str, NULL }; if ((status = mpv_command_async(ctx, 0, cmd)) < 0) { LOG_ERROR("WINDOW", "Failed to execute command: %s", mpv_error_string(status)); return 1; @@ -160,7 +159,7 @@ int lmpv_toggle_pause(mpv_handle *ctx) { RETURN_UNLESS(ctx, "Missing mpv ctx", 1); - const char *cmd[] = {"cycle", "pause", "up", NULL}; + const char *cmd[] = { "cycle", "pause", "up", NULL }; int status; if ((status = mpv_command_async(ctx, 0, cmd)) < 0) { LOG_ERROR("WINDOW", "Failed issus command: %s", mpv_error_string(status)); @@ -170,9 +169,8 @@ lmpv_toggle_pause(mpv_handle *ctx) } int -lmpv_handle(struct lkt_module *mod, mpv_handle *ctx, struct queue *queue, - volatile int *time_pos, volatile int *time_duration, - volatile int *state, volatile int *hinib, volatile int *set_seek) +lmpv_handle(struct lkt_module *mod, mpv_handle *ctx, struct queue *queue, volatile int *time_pos, + volatile int *time_duration, volatile int *state, volatile int *hinib, volatile int *set_seek) { size_t ao_volume; mpv_event *event = NULL; @@ -215,36 +213,34 @@ loop: LOG_DEBUG("WINDOW", "Send play_next event"); lkt_queue_send(queue, lkt_event_play_next, NULL); } else - LOG_DEBUG("WINDOW", "Don't send play_next event, hinib is %d and state is %s", - *hinib, (*state == STATE_STOP) ? "STOP" : (*state == STATE_PLAY) ? - "PLAY" : (*state == STATE_PAUSE) ? "PAUSE" : "UNKNOWN"); + LOG_DEBUG("WINDOW", "Don't send play_next event, hinib is %d and state is %s", *hinib, + (*state == STATE_STOP) ? "STOP" + : (*state == STATE_PLAY) ? "PLAY" + : (*state == STATE_PAUSE) ? "PAUSE" + : "UNKNOWN"); break; case MPV_EVENT_PROPERTY_CHANGE: - prop = (mpv_event_property *) event->data; + prop = (mpv_event_property *)event->data; if (prop->format == MPV_FORMAT_NONE) break; /* MPV volume (BUG: The flag is not MPV_FORMAT_NONE only at the end of the song...) */ - if (STR_MATCH(prop->name, "ao-volume") - && prop->format == MPV_FORMAT_INT64) { - ao_volume = *(int *) prop->data; - lkt_queue_send(queue, lkt_event_prop_vol, (void *) ao_volume); + if (STR_MATCH(prop->name, "ao-volume") && prop->format == MPV_FORMAT_INT64) { + ao_volume = *(int *)prop->data; + lkt_queue_send(queue, lkt_event_prop_vol, (void *)ao_volume); } /* File duration */ - if (STR_MATCH(prop->name, "duration") - && prop->format == MPV_FORMAT_INT64) { - *time_duration = *(int *) prop->data; - lkt_queue_send(queue, lkt_event_prop_dur, (void *) (size_t) *time_duration); + if (STR_MATCH(prop->name, "duration") && prop->format == MPV_FORMAT_INT64) { + *time_duration = *(int *)prop->data; + lkt_queue_send(queue, lkt_event_prop_dur, (void *)(size_t)*time_duration); } - if (STR_MATCH(prop->name, "time-pos") - && prop->format == MPV_FORMAT_INT64) { - *time_pos = *(int *) prop->data; - lkt_queue_send(queue, lkt_event_prop_time, (void *) (size_t) *time_pos); + if (STR_MATCH(prop->name, "time-pos") && prop->format == MPV_FORMAT_INT64) { + *time_pos = *(int *)prop->data; + lkt_queue_send(queue, lkt_event_prop_time, (void *)(size_t)*time_pos); } /* Pause state */ - if (STR_MATCH(prop->name, "pause") - && prop->format == MPV_FORMAT_FLAG) { - if (* (bool *) prop->data) { + if (STR_MATCH(prop->name, "pause") && prop->format == MPV_FORMAT_FLAG) { + if (*(bool *)prop->data) { lkt_queue_send(queue, lkt_event_play_toggle, LKT_PLAY_PAUSE); SET_STATE_FLAG(*state, PAUSE); } else { @@ -255,7 +251,7 @@ loop: break; case MPV_EVENT_COMMAND_REPLY: - free((void *) event->reply_userdata); + free((void *)event->reply_userdata); break; /* Ignored */ diff --git a/src/module/mpv.h b/src/module/mpv.h index 7952435c07c5ffd9ff6563794c869906cd4fd6e4..c1039893fcdd20b4e5e06fac53d9aef90603966e 100644 --- a/src/module/mpv.h +++ b/src/module/mpv.h @@ -17,9 +17,8 @@ int lmpv_load_file(mpv_handle *ctx, const char *file); int lmpv_toggle_pause(mpv_handle *ctx); /* TODO: place all pointers inside a struct */ -int lmpv_handle(struct lkt_module *mod, mpv_handle *ctx, struct queue *queue, - volatile int *time_pos, volatile int *time_duration, - volatile int *state, volatile int *hinib, volatile int *set_seek); +int lmpv_handle(struct lkt_module *mod, mpv_handle *ctx, struct queue *queue, volatile int *time_pos, + volatile int *time_duration, volatile int *state, volatile int *hinib, volatile int *set_seek); enum { STATE_STOP = 0, @@ -27,5 +26,4 @@ enum { STATE_PAUSE = 2, }; -#define SET_STATE_FLAG(sta, STATUS) \ - (LOG_DEBUG("WINDOW", "Set status flag to " #STATUS), (sta) = STATE_##STATUS) +#define SET_STATE_FLAG(sta, STATUS) (LOG_DEBUG("WINDOW", "Set status flag to " #STATUS), (sta) = STATE_##STATUS) diff --git a/src/module/thread.c b/src/module/thread.c index fb4a20c11a3eea77f1d6d03928e52143d9031a11..271248036ea5b165c81d7b8ed98dbdd71f9713c5 100644 --- a/src/module/thread.c +++ b/src/module/thread.c @@ -18,32 +18,31 @@ struct __args { void * __start(void *args__) { - struct __args *args = (struct __args *) args__; + struct __args *args = (struct __args *)args__; void *(*start)(struct poller_thread_arg *) = args->start; - struct poller_thread_arg *arg = args->arg; + struct poller_thread_arg *arg = args->arg; free(args__); return start(arg); } int -poller_new(struct poller_thread *th, void *(*func)(struct poller_thread_arg *), - void *args) +poller_new(struct poller_thread *th, void *(*func)(struct poller_thread_arg *), void *args) { - pthread_mutex_t mtx1 = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_t mtx2 = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_t mtx1 = PTHREAD_MUTEX_INITIALIZER; + pthread_mutex_t mtx2 = PTHREAD_MUTEX_INITIALIZER; struct poller_thread th_ = { - .input_lock = mtx1, - .output_lock = mtx2, + .input_lock = mtx1, + .output_lock = mtx2, }; if (stack_new(&th_.input) || stack_new(&th_.output)) goto out_of_memory; - *th = th_; + *th = th_; struct __args *__args = calloc(1, sizeof(struct __args)); - __args->start = func; - __args->arg = args; - __args->arg->self = th; + __args->start = func; + __args->arg = args; + __args->arg->self = th; if (pthread_create(&(th->th), NULL, __start, __args)) { LOG_ERROR("THREAD", "Failed to create a poller thread"); @@ -103,39 +102,17 @@ th_head(struct stack *lst, pthread_mutex_t *lock, void **ptr) return ret; } -int -poller_append_input(struct poller_thread *th, void *ptr) -{ - return th_append(&th->input, &th->input_lock, ptr); -} - -int -poller_append_output(struct poller_thread *th, void *ptr) -{ - return th_append(&th->output, &th->output_lock, ptr); -} - -int -poller_pop_input(struct poller_thread *th, void **ptr) -{ - return th_pop(&th->input, &th->input_lock, ptr); -} - - -int -poller_pop_output(struct poller_thread *th, void **ptr) -{ - return th_pop(&th->output, &th->output_lock, ptr); -} - -int -poller_head_input(struct poller_thread *th, void **ptr) -{ - return th_head(&th->input, &th->input_lock, ptr); -} - -int -poller_head_output(struct poller_thread *th, void **ptr) -{ - return th_head(&th->output, &th->output_lock, ptr); -} +#define __POLLER_ATOMICS_DEFINE(operation, inout, level) \ + int poller_##operation##inout(struct poller_thread *th, void level ptr) \ + { \ + return th_##operation(&th->inout, &th->inout##_lock, ptr); \ + } +// clang-format off +__POLLER_ATOMICS_DEFINE(append, input, *); +__POLLER_ATOMICS_DEFINE(append, output, *); +__POLLER_ATOMICS_DEFINE(pop, input, **); +__POLLER_ATOMICS_DEFINE(pop, output, **); +__POLLER_ATOMICS_DEFINE(head, input, **); +__POLLER_ATOMICS_DEFINE(head, output, **); +// clang-format on +#undef __POLLER_ATOMICS_DEFINE diff --git a/src/module/thread.h b/src/module/thread.h index 9f41398b31f02033d10538ef9535f63d99d6836c..c8a25a9b8defeb28ee6ce925ce8d40e0ee0c8c76 100644 --- a/src/module/thread.h +++ b/src/module/thread.h @@ -1,4 +1,4 @@ -#if ! defined(__LKT_THREAD_H__) +#if !defined(__LKT_THREAD_H__) #define __LKT_THREAD_H__ #include <lektor/lktmodule.h> @@ -31,12 +31,12 @@ int poller_join(struct poller_thread *th, void **ret); /* Input qeueu manipulations. */ int poller_append_input(struct poller_thread *th, void *ptr); -int poller_pop_input (struct poller_thread *th, void **ptr); -int poller_head_input (struct poller_thread *th, void **ptr); +int poller_pop_input(struct poller_thread *th, void **ptr); +int poller_head_input(struct poller_thread *th, void **ptr); /* Output qeueu manipulations. */ int poller_append_output(struct poller_thread *th, void *ptr); -int poller_pop_output (struct poller_thread *th, void **ptr); -int poller_head_output (struct poller_thread *th, void **ptr); +int poller_pop_output(struct poller_thread *th, void **ptr); +int poller_head_output(struct poller_thread *th, void **ptr); #endif /* __LKT_THREAD_H__ */ diff --git a/src/module/worker.c b/src/module/worker.c index 070bcd53fce533a2d929d89007eaa516a1401f27..d1923ffe3017b46ba6ea791554ed7dd1e5f0043f 100644 --- a/src/module/worker.c +++ b/src/module/worker.c @@ -13,32 +13,32 @@ static void * __worker_thread(void *__pool) { - volatile struct worker_pool *pool = (volatile struct worker_pool *) __pool; + volatile struct worker_pool *pool = (volatile struct worker_pool *)__pool; volatile void *volatile arg; worker_function func; for (;;) { - assert(!pthread_mutex_lock((pthread_mutex_t *) &pool->lock)); + assert(!pthread_mutex_lock((pthread_mutex_t *)&pool->lock)); if (pool->len) { --(pool->len); ++(pool->thread_working); func = pool->functions[pool->len]; arg = pool->args[pool->len]; } else if (pool->exit) { - assert(!pthread_mutex_unlock((pthread_mutex_t *) &pool->lock)); + assert(!pthread_mutex_unlock((pthread_mutex_t *)&pool->lock)); LOG_INFO("WORKER", "Exiting"); break; } else { - assert(!pthread_mutex_unlock((pthread_mutex_t *) &pool->lock)); + assert(!pthread_mutex_unlock((pthread_mutex_t *)&pool->lock)); sleep(1); continue; } - assert(!pthread_mutex_unlock((pthread_mutex_t *) &pool->lock)); - func((void *) arg); + assert(!pthread_mutex_unlock((pthread_mutex_t *)&pool->lock)); + func((void *)arg); - assert(!pthread_mutex_lock((pthread_mutex_t *) &pool->lock)); + assert(!pthread_mutex_lock((pthread_mutex_t *)&pool->lock)); --(pool->thread_working); - assert(!pthread_mutex_unlock((pthread_mutex_t *) &pool->lock)); + assert(!pthread_mutex_unlock((pthread_mutex_t *)&pool->lock)); } pthread_exit(NULL); } @@ -81,12 +81,12 @@ worker_pool_free(struct worker_pool *pool) pthread_join(pool->threads[i], NULL); assert(!pthread_mutex_lock(&pool->lock)); if (pool->threads) - free((void *) pool->threads); + free((void *)pool->threads); pool->thread_size = 0u; if (pool->functions) - free((void *) pool->functions); + free((void *)pool->functions); if (pool->args) - free((void *) pool->args); + free((void *)pool->args); pool->size = 0u; pool->len = 0u; assert(!pthread_mutex_unlock(&pool->lock)); @@ -98,26 +98,24 @@ worker_pool_push(struct worker_pool *pool, worker_function func, void *arg) int ret = 1; assert(!pthread_mutex_lock(&pool->lock)); if (pool->len == pool->size) { - void *new_functions = realloc((void *) pool->functions, - 2 * pool->size * sizeof(worker_function)); + void *new_functions = realloc((void *)pool->functions, 2 * pool->size * sizeof(worker_function)); if (NULL == new_functions) { LOG_ERROR("WORKER", "Out of memory"); goto error; } - void *new_args = realloc((void *) pool->args, - 2 * pool->size * sizeof(void *)); + void *new_args = realloc((void *)pool->args, 2 * pool->size * sizeof(void *)); if (NULL == new_args) { free(new_functions); LOG_ERROR("WORKER", "Out of memory"); goto error; } - pool->size *= 2; + pool->size *= 2; pool->functions = new_functions; pool->args = new_args; } - pool->functions[pool->len] = func; - pool->args[pool->len] = arg; + pool->functions[pool->len] = func; + pool->args[pool->len] = arg; ++(pool->len); ret = 0; error: diff --git a/src/module/worker.h b/src/module/worker.h index 013f033c26ca7feb1374a0f315aa384fd7517d5f..1dacf324f2b68774b06e91bf39bee3fc13c7b7ea 100644 --- a/src/module/worker.h +++ b/src/module/worker.h @@ -18,7 +18,7 @@ struct worker_pool { }; /* After a free, the pool is no longer usable, you must re-init with a new */ -int worker_pool_new(struct worker_pool *, size_t init_len, size_t thread_count); +int worker_pool_new(struct worker_pool *, size_t init_len, size_t thread_count); void worker_pool_free(struct worker_pool *); void worker_pool_waitall(struct worker_pool *); diff --git a/src/net/command.c b/src/net/command.c index d20f65f4d80e4b6307eab6b9965845201207932b..eefeb142cb9e5a36987c6ed1b3d6f36ec390f9db 100644 --- a/src/net/command.c +++ b/src/net/command.c @@ -13,11 +13,7 @@ lkt_command_parse(char *raw) { errno = 0; char *endptr; - struct lkt_command res = { - .name = raw, - .args = {0}, - .cont = strtol(raw, &endptr, 10) - }; + struct lkt_command res = { .name = raw, .args = { 0 }, .cont = strtol(raw, &endptr, 10) }; if (errno != 0) { res.cont = 0; @@ -82,7 +78,7 @@ lkt_command_clone(struct lkt_command *c) { struct lkt_command res = { .name = strdup(c->name), - .args = {0}, + .args = { 0 }, }; for (size_t i = 0; c->args[i] && i < LKT_MESSAGE_ARGS_MAX; i++) diff --git a/src/net/listen.c b/src/net/listen.c index 91a9973a6cda0841b1ae5374c38f87db87585b10..25b4b864528323618d81b4cd5a19a6f8a1880e87 100644 --- a/src/net/listen.c +++ b/src/net/listen.c @@ -93,8 +93,7 @@ static inline void send_continue(struct lkt_state *srv, size_t c, int i) { struct lkt_message *cont = lkt_message_new(); - cont->data_len = safe_snprintf(cont->data, LKT_MESSAGE_MAX, - "continue: %d\n", i); + cont->data_len = safe_snprintf(cont->data, LKT_MESSAGE_MAX, "continue: %d\n", i); lkt_state_send(srv, c, cont); } @@ -116,8 +115,7 @@ static void send_ack(struct lkt_state *srv, size_t c, const char *command) { struct lkt_message *ack = lkt_message_new(); - ack->data_len = snprintf(ack->data, LKT_MESSAGE_MAX, - "ACK [1@0] {%s} failed\n", command); + ack->data_len = snprintf(ack->data, LKT_MESSAGE_MAX, "ACK [1@0] {%s} failed\n", command); lkt_state_send(srv, c, ack); } @@ -128,8 +126,7 @@ send_status(struct lkt_state *srv, size_t c, int status, const char *cmd_name) LOG_DEBUG("COMMAND", "Command '%s'", cmd_name); send_ok(srv, c); } else { - LOG_DEBUG("COMMAND", "Command '%s' %s", cmd_name, - status == 2 ? "is unknown" : "has failed"); + LOG_DEBUG("COMMAND", "Command '%s' %s", cmd_name, status == 2 ? "is unknown" : "has failed"); send_ack(srv, c, cmd_name); } } @@ -158,153 +155,145 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) case MPD_IDLE_NONE: /* Commands that requires authentification. */ if (STR_MATCH(cmd.name, "__adduser")) - err = ! command_user_add(srv, c, cmd.args); + err = !command_user_add(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "__restart")) - err = ! command_restart(srv, c, NULL); + err = !command_restart(srv, c, NULL); else if (STR_MATCH(cmd.name, "kill")) - err = ! command_kill(srv, c, NULL); + err = !command_kill(srv, c, NULL); else if (STR_MATCH(cmd.name, "update")) - err = ! command_update(srv, c, cmd.args); + err = !command_update(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "rescan")) - err = ! command_rescan(srv, c, cmd.args, false); + err = !command_rescan(srv, c, cmd.args, false); else if (STR_MATCH(cmd.name, "__import")) - err = ! command_import(srv, c, cmd.args); + err = !command_import(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "__rescan")) - err = ! command_rescan(srv, c, cmd.args, true); + err = !command_rescan(srv, c, cmd.args, true); else if (STR_MATCH(cmd.name, "config")) - err = ! command_config(srv, c, NULL); + err = !command_config(srv, c, NULL); /* Commands that are available if not in idle mode */ else if (STR_MATCH(cmd.name, "currentsong")) - err = ! command_currentsong(srv, c, NULL); + err = !command_currentsong(srv, c, NULL); else if (STR_MATCH(cmd.name, "status")) - err = ! command_status(srv, c, NULL); + err = !command_status(srv, c, NULL); else if (STR_MATCH(cmd.name, "stats")) - err = ! command_stats(srv, c, NULL); + err = !command_stats(srv, c, NULL); else if (STR_MATCH(cmd.name, "close")) - err = ! lkt_close_client(srv, c); + err = !lkt_close_client(srv, c); else if (STR_MATCH(cmd.name, "ping")) err = 0; else if (STR_MATCH(cmd.name, "next")) - err = ! command_next(srv, NULL); + err = !command_next(srv, NULL); else if (STR_MATCH(cmd.name, "pause")) - err = ! command_pause(srv, cmd.args); + err = !command_pause(srv, cmd.args); else if (STR_MATCH(cmd.name, "previous")) - err = ! command_previous(srv, NULL); + err = !command_previous(srv, NULL); else if (STR_MATCH(cmd.name, "play")) - err = ! command_play(srv, cmd.args); + err = !command_play(srv, cmd.args); else if (STR_MATCH(cmd.name, "playid")) - err = ! command_playid(srv, cmd.args); + err = !command_playid(srv, cmd.args); else if (STR_MATCH(cmd.name, "stop")) - err = ! command_stop(srv, NULL); + err = !command_stop(srv, NULL); else if (STR_MATCH(cmd.name, "clear")) - err = ! command_clear(srv, NULL); + err = !command_clear(srv, NULL); else if (STR_MATCH(cmd.name, "crop")) - err = ! command_crop(srv, NULL); + err = !command_crop(srv, NULL); else if (STR_MATCH(cmd.name, "move")) - err = ! command_move(srv, cmd.args); + err = !command_move(srv, cmd.args); else if (STR_MATCH(cmd.name, "shuffle")) - err = ! command_shuffle(srv, NULL); + err = !command_shuffle(srv, NULL); else if (STR_MATCH(cmd.name, "swap")) - err = ! command_swap(srv, cmd.args); + err = !command_swap(srv, cmd.args); else if (STR_MATCH(cmd.name, "swapid")) - err = ! command_swapid(srv, cmd.args); + err = !command_swapid(srv, cmd.args); else if (STR_MATCH(cmd.name, "__flat")) - err = ! command_flat(srv, cmd.args); + err = !command_flat(srv, cmd.args); else if (STR_MATCH(cmd.name, "seek")) - err = ! command_seek(srv, cmd.args); + err = !command_seek(srv, cmd.args); else if (STR_MATCH(cmd.name, "seekid")) - err = ! command_seekid(srv, cmd.args); + err = !command_seekid(srv, cmd.args); else if (STR_MATCH(cmd.name, "seekcur")) - err = ! command_seekcur(srv, cmd.args); + err = !command_seekcur(srv, cmd.args); else if (STR_MATCH(cmd.name, "playlistid")) - err = ! command_queue_listid(srv, c, cmd.args); + err = !command_queue_listid(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "playlist") || STR_MATCH(cmd.name, "playlistinfo")) - err = ! command_queue_list(srv, c, cmd.args); + err = !command_queue_list(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "playlistfind") || STR_MATCH(cmd.name, "playlistsearch")) - err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_queue_init); + err = !command_find(srv, c, cmd.args, cmd.cont, database_search_queue_init); else if (STR_MATCH(cmd.name, "sticker") && cmd.args[0]) { - if (STR_MATCH(cmd.args[0], "get") || - STR_MATCH(cmd.args[0], "list") || - STR_MATCH(cmd.args[0], "find")) - err = ! command_sticker_get(srv, c, &cmd.args[1]); + if (STR_MATCH(cmd.args[0], "get") || STR_MATCH(cmd.args[0], "list") || STR_MATCH(cmd.args[0], "find")) + err = !command_sticker_get(srv, c, &cmd.args[1]); else if (STR_MATCH(cmd.args[0], "set")) - err = ! command_sticker_set(srv, c, &cmd.args[1]); + err = !command_sticker_set(srv, c, &cmd.args[1]); else if (STR_MATCH(cmd.args[0], "delete")) - err = ! command_sticker_delete(srv, c, &cmd.args[1]); + err = !command_sticker_delete(srv, c, &cmd.args[1]); else if (STR_MATCH(cmd.args[0], "__create")) - err = ! command_sticker_create(srv, c, &cmd.args[1]); + err = !command_sticker_create(srv, c, &cmd.args[1]); } else if (STR_MATCH(cmd.name, "help")) - err = ! command_help(srv, c, NULL); + err = !command_help(srv, c, NULL); else if (STR_MATCH(cmd.name, "__insert")) - err = ! command_add(srv, cmd.args, 5); - else if (STR_MATCH(cmd.name, "searchadd") || - STR_MATCH(cmd.name, "findadd") || - STR_MATCH(cmd.name, "add")) - err = ! command_add(srv, cmd.args, 1); + err = !command_add(srv, cmd.args, 5); + else if (STR_MATCH(cmd.name, "searchadd") || STR_MATCH(cmd.name, "findadd") || STR_MATCH(cmd.name, "add")) + err = !command_add(srv, cmd.args, 1); else if (STR_MATCH(cmd.name, "addid")) - err = ! command_addid(srv, cmd.args); + err = !command_addid(srv, cmd.args); else if (STR_MATCH(cmd.name, "deleteid")) - err = ! command_delid(srv, cmd.args); + err = !command_delid(srv, cmd.args); else if (STR_MATCH(cmd.name, "delete")) - err = ! command_del(srv, cmd.args); + err = !command_del(srv, cmd.args); else if (STR_MATCH(cmd.name, "playlistclear")) - err = ! command_plt_clear(srv, cmd.args); + err = !command_plt_clear(srv, cmd.args); else if (STR_MATCH(cmd.name, "rename")) - err = ! command_plt_rename(srv, cmd.args); + err = !command_plt_rename(srv, cmd.args); else if (STR_MATCH(cmd.name, "playlistdelete")) - err = ! command_plt_remove(srv, cmd.args); + err = !command_plt_remove(srv, cmd.args); else if (STR_MATCH(cmd.name, "playlistadd")) - err = ! command_plt_add(srv, cmd.args); + err = !command_plt_add(srv, cmd.args); else if (STR_MATCH(cmd.name, "rm") && cmd.args[0] != NULL && cmd.args[1] == NULL) - err = ! command_plt_remove(srv, cmd.args); + err = !command_plt_remove(srv, cmd.args); else if (STR_MATCH(cmd.name, "save")) - err = ! command_plt_export(srv, cmd.args); + err = !command_plt_export(srv, cmd.args); else if (STR_MATCH(cmd.name, "__import")) - err = ! command_plt_import(srv, cmd.args); + err = !command_plt_import(srv, cmd.args); else if (STR_MATCH(cmd.name, "__dump")) - err = ! command_dump(srv, cmd.args); + err = !command_dump(srv, cmd.args); else if (STR_MATCH(cmd.name, "listplaylistinfo")) - err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_playlist_init); + err = !command_find(srv, c, cmd.args, cmd.cont, database_search_playlist_init); else if (STR_MATCH(cmd.name, "listplaylists")) - err = ! command_plt_list(srv, c, NULL, cmd.cont); + err = !command_plt_list(srv, c, NULL, cmd.cont); else if (STR_MATCH(cmd.name, "listplaylist")) - err = ! command_plt_ctx(srv, c, cmd.args, cmd.cont); + err = !command_plt_ctx(srv, c, cmd.args, cmd.cont); else if (STR_MATCH(cmd.name, "random")) - err = ! command_set_playback_option(srv, c, lkt_playback_option_random, cmd.args); + err = !command_set_playback_option(srv, c, lkt_playback_option_random, cmd.args); else if (STR_MATCH(cmd.name, "repeat")) - err = ! command_set_playback_option(srv, c, lkt_playback_option_repeat, cmd.args); + err = !command_set_playback_option(srv, c, lkt_playback_option_repeat, cmd.args); else if (STR_MATCH(cmd.name, "setvol")) - err = ! command_set_playback_option(srv, c, lkt_playback_option_volume, cmd.args); + err = !command_set_playback_option(srv, c, lkt_playback_option_volume, cmd.args); else if (STR_MATCH(cmd.name, "single")) - err = ! command_set_playback_option(srv, c, lkt_playback_option_single, cmd.args); + err = !command_set_playback_option(srv, c, lkt_playback_option_single, cmd.args); else if (STR_MATCH(cmd.name, "consume")) - err = ! command_set_playback_option(srv, c, lkt_playback_option_consume, cmd.args); + err = !command_set_playback_option(srv, c, lkt_playback_option_consume, cmd.args); else if (STR_MATCH(cmd.name, "password")) - err = ! command_password(srv, c, cmd.args); + err = !command_password(srv, c, cmd.args); else if (STR_MATCH(cmd.name, "idle")) { - err = ! command_idle(srv, c, &cmd); + err = !command_idle(srv, c, &cmd); goto end_no_send_status; - } else if (STR_MATCH(cmd.name, "search") || - STR_MATCH(cmd.name, "find") || - STR_MATCH(cmd.name, "list") || - STR_MATCH(cmd.name, "listall") || - STR_MATCH(cmd.name, "listallinfo") || - STR_MATCH(cmd.name, "listfiles") || - STR_MATCH(cmd.name, "lsinfo") ) - err = ! command_find(srv, c, cmd.args, cmd.cont, database_search_database_init); + } else if (STR_MATCH(cmd.name, "search") || STR_MATCH(cmd.name, "find") || STR_MATCH(cmd.name, "list") || + STR_MATCH(cmd.name, "listall") || STR_MATCH(cmd.name, "listallinfo") || + STR_MATCH(cmd.name, "listfiles") || STR_MATCH(cmd.name, "lsinfo")) + err = !command_find(srv, c, cmd.args, cmd.cont, database_search_database_init); else err = 2; @@ -313,10 +302,10 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) default: /* commands available only in idle mode */ if (STR_MATCH(cmd.name, "idle")) { - err = ! command_idle(srv, c, &cmd); + err = !command_idle(srv, c, &cmd); goto end_no_send_status; } else if (STR_MATCH(cmd.name, "noidle")) - err = ! command_noidle(srv, c); + err = !command_noidle(srv, c); else err = 2; @@ -325,8 +314,7 @@ handle_simple_command(struct lkt_state *srv, size_t c, struct lkt_command cmd) continuation = lkt_get_continuation(srv, c); if (continuation > 0) { - LOG_DEBUG("NETWORK", "Client should continue from '%d'", - continuation); + LOG_DEBUG("NETWORK", "Client should continue from '%d'", continuation); send_continue(srv, c, continuation); } send_status(srv, c, err, cmd.name); @@ -338,7 +326,7 @@ static int command_list_end(struct lkt_state *srv, size_t c) { struct lkt_client *cli = &srv->clients[c - 1]; - int err = 0; + int err = 0; if (cli->command_list_mode == LKT_COMMAND_LIST_OFF) return -1; @@ -349,7 +337,7 @@ command_list_end(struct lkt_state *srv, size_t c) } cli->command_list_mode = LKT_COMMAND_LIST_OFF; - cli->command_list_len = 0; + cli->command_list_len = 0; if (!err) send_ok(srv, c); @@ -361,7 +349,7 @@ static int handle_command(struct lkt_state *srv, size_t i, struct lkt_command cmd) { struct lkt_client *cli = &srv->clients[i - 1]; - int err = 0; + int err = 0; if (STR_MATCH(cmd.name, "command_list_begin")) err = command_list_begin(srv, i, 0); @@ -386,8 +374,7 @@ handle_incoming_data(struct lkt_state *srv, size_t i) for (;;) { /* Recieve some data. */ - n = recv(srv->fds[i].fd, cli->buffer_in + cli->buffer_in_len, - LKT_MESSAGE_MAX - cli->buffer_in_len, 0); + n = recv(srv->fds[i].fd, cli->buffer_in + cli->buffer_in_len, LKT_MESSAGE_MAX - cli->buffer_in_len, 0); if (n < 0) { if (errno == EWOULDBLOCK || errno == EAGAIN) return 0; @@ -438,12 +425,11 @@ handle_outgoing_data(struct lkt_state *srv, size_t c) for (size_t i = 0; i < cli->buffer_out_len; i++) { struct lkt_message *msg = cli->buffer_out[i]; - int n = send(srv->fds[c].fd, msg->data, msg->data_len, MSG_NOSIGNAL); + int n = send(srv->fds[c].fd, msg->data, msg->data_len, MSG_NOSIGNAL); if (n <= 0) { if (errno == EWOULDBLOCK || errno == EAGAIN) { cli->buffer_out_len -= i; - memmove(cli->buffer_out, cli->buffer_out + i, - cli->buffer_out_len); + memmove(cli->buffer_out, cli->buffer_out + i, cli->buffer_out_len); return 0; } if (errno == EPIPE) { @@ -461,18 +447,16 @@ handle_outgoing_data(struct lkt_state *srv, size_t c) return 0; } -typedef int(*init_socket_func)(const char *, const char *); +typedef int (*init_socket_func)(const char *, const char *); -static int +static void init_permission_socket_unix(const char *file, int perms) { errno = 0; if (chmod(file, perms) < 0) { - LOG_ERROR("INIT", "Failed to set '%s' to 0%o: %s", file, perms, strerror(errno)); - return 1; + LOG_FATAL("INIT", "Failed to set '%s' to 0%o: %s", file, perms, strerror(errno)); } LOG_INFO("INIT", "Set socket '%s' to perms 0%o", file, perms); - return 0; } static inline int @@ -523,7 +507,7 @@ init_listening_socket_unix(const char *file, const char UNUSED *type /* == "unix goto failure; } - if (bind(fd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) < 0) { + if (bind(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) { LOG_ERROR("INIT", "Failed to bind unix socket %s: %s", file, strerror(errno)); goto failure; } @@ -542,11 +526,11 @@ failure: static int init_listening_socket_net(const char *host, const char *port) { - errno = 0; + errno = 0; const int yes = 1; - int fd = -1; + int fd = -1; struct addrinfo *available; - struct addrinfo hints = {0}; + struct addrinfo hints = { 0 }; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; @@ -612,7 +596,7 @@ accept_all(int listen_fd, struct pollfd *fds, size_t fds_max, size_t *fds_len) fds += *fds_len; for (int n = 0;; n++) { - fd = accept(listen_fd, (struct sockaddr *) &peer_addr, &pa_size); + fd = accept(listen_fd, (struct sockaddr *)&peer_addr, &pa_size); if (fd < 0) { if (errno == EWOULDBLOCK || errno == EAGAIN) return n; @@ -637,11 +621,11 @@ accept_all(int listen_fd, struct pollfd *fds, size_t fds_max, size_t *fds_len) break; } - char *host = inet_ntoa(peer_addr.sin_addr); + char *host = inet_ntoa(peer_addr.sin_addr); uint16_t port = htons(peer_addr.sin_port); LOG_INFO("NETWORK", "New connection from %s:%d", host, port); - fds->fd = fd; + fds->fd = fd; fds->events = POLLIN; fds++; (*fds_len)++; @@ -664,16 +648,13 @@ handle_network_events(struct lkt_state *srv) return 0; if (srv->fds[0].revents & POLLIN) { - int n = accept_all(srv->fds[0].fd, srv->fds, - srv->fds_max, &srv->fds_len); + int n = accept_all(srv->fds[0].fd, srv->fds, srv->fds_max, &srv->fds_len); if (n < 0) return -1; struct lkt_message *msg = lkt_message_new(); - msg->data_len = snprintf(msg->data, LKT_MESSAGE_MAX, - "OK MPD " MPD_VERSION "\n"); + msg->data_len = snprintf(msg->data, LKT_MESSAGE_MAX, "OK MPD " MPD_VERSION "\n"); for (; n; n--) { - memset(&srv->clients[srv->fds_len - n - 1], 0, - sizeof(struct lkt_client)); + memset(&srv->clients[srv->fds_len - n - 1], 0, sizeof(struct lkt_client)); lkt_state_send(srv, srv->fds_len - n, lkt_message_clone(msg)); } lkt_message_free(msg); @@ -685,7 +666,7 @@ handle_network_events(struct lkt_state *srv) if (srv->fds[i].revents & (POLLHUP | POLLERR)) { close(srv->fds[i].fd); srv->fds[i].fd = -1; - srv->fds[i].revents &= ~ (POLLHUP | POLLERR); + srv->fds[i].revents &= ~(POLLHUP | POLLERR); handle_disconnected_client(srv, i); LOG_WARN("NETWORK", "Client %ld is out", i); continue; @@ -715,7 +696,7 @@ handle_network_events(struct lkt_state *srv) continue; LOG_WARN("NETWORK", "Connection closed by client %ld", i); - srv->fds[i] = srv->fds[srv->fds_len - 1]; + srv->fds[i] = srv->fds[srv->fds_len - 1]; srv->clients[i - 1] = srv->clients[srv->fds_len - 2]; srv->fds_len--; i--; @@ -781,7 +762,7 @@ handle_idle_events(struct lkt_state *srv) msg->data_len = strlen(msg->data); LOG_DEBUG("COMMAND", "Sending '%s' (len: %ld) to client %ld", msg->data, msg->data_len, i); msg->data[msg->data_len - 1] = '\n'; - msg->data[msg->data_len] = '\0'; + msg->data[msg->data_len] = '\0'; lkt_state_send(srv, i, msg); send_ok(srv, i); } @@ -825,18 +806,22 @@ lkt_client_auth(struct lkt_state *srv, size_t c, bool set) static inline void handle_queue_events(struct lkt_state *srv) { -#define __CASE(type, func) \ - case lkt_event_ ## type: \ - if (evt.attr != NULL) { \ - LOG_DEBUG("EVENT", "Got event " #type " (%d) with attr (int: %d, ptr %0*p)", \ - lkt_event_##type, evt.attr, sizeof(size_t) * CHAR_BIT / 4, evt.attr); \ - } else { \ - LOG_DEBUG("EVENT", "Got event " #type " (%d) with NULL attr", lkt_event_##type);\ - } \ - func; \ +#define __CASE(type, func) \ + case lkt_event_##type: \ + if (evt.attr != NULL) { \ + LOG_DEBUG("EVENT", "Got event " #type " (%d) with attr (int: %d, ptr %0*p)", lkt_event_##type, evt.attr, \ + sizeof(size_t) * CHAR_BIT / 4, evt.attr); \ + } else { \ + LOG_DEBUG("EVENT", "Got event " #type " (%d) with NULL attr", lkt_event_##type); \ + } \ + func; \ break; -#define __ATTR_IS_STATE(state, func) { \ - if ((__LKT_PLAY_ ## state) == (size_t) evt.attr) { func; }} +#define __ATTR_IS_STATE(state, func) \ + { \ + if ((__LKT_PLAY_##state) == (size_t)evt.attr) { \ + func; \ + } \ + } lkt_event evt; char *string = NULL; @@ -844,49 +829,45 @@ handle_queue_events(struct lkt_state *srv) redo: evt = lkt_queue_handle(&srv->queue); switch (evt.type) { - // *INDENT-OFF* - __CASE(play_pos, { - RETURN_UNLESS((string = malloc(BUFFER_MAX * sizeof(char))), "Out of memory", NOTHING); - safe_snprintf(string, BUFFER_MAX, "%ld", (size_t) evt.attr); - command_play(srv, &string); - free(string); - }) - - __CASE(play_next, command_next(srv, NULL) ) - __CASE(play_prev, command_previous(srv, NULL)) - - __CASE(play_toggle, { - __ATTR_IS_STATE(PAUSE, database_queue_set_paused(srv->db, 1)) - __ATTR_IS_STATE(PLAY, database_queue_set_paused(srv->db, 0)) - __ATTR_IS_STATE(TOGGLE, database_queue_toggle_pause(srv->db) ) - __ATTR_IS_STATE(STOP, database_queue_stop(srv->db) ) - }) - - __CASE(prop_vol, database_config_queue(srv->db, "volume", (size_t) evt.attr)) - __CASE(prop_dur, database_config_queue(srv->db, "duration", (size_t) evt.attr)) - __CASE(prop_time, database_config_queue(srv->db, "elapsed", (size_t) evt.attr)) - - __CASE(skip_current, { - RETURN_UNLESS((string = malloc(PATH_MAX * sizeof(char))), "Out of memory", NOTHING); - database_queue_skip_current(srv->db, string); - MOD_CALL(srv->window_mod, "load", string); - free(string); - }) - - __CASE(db_update_total, { srv->update_total += (size_t) evt.attr; }) - __CASE(db_updating, { srv->is_updating = (((uint8_t) (size_t) evt.attr) > 0); }) - __CASE(db_update_tick, { - if (srv->update_current != ((size_t) -1)) - srv->update_current++; - if (srv->update_current >= srv->update_total) - (LOG_WARN("EVENT", "Force updating state because tikcs exceded the update count"), - srv->is_updating = 0, - srv->update_total = 0, - srv->update_current = 0); - }) - - /* The null event / ignored events, just return / continue */ - __CASE(play_file, {}) + // clang-format off + __CASE(play_pos, { + RETURN_UNLESS((string = malloc(BUFFER_MAX * sizeof(char))), "Out of memory", NOTHING); + safe_snprintf(string, BUFFER_MAX, "%ld", (size_t)evt.attr); + command_play(srv, &string); + free(string); + }) + + __CASE(play_next, command_next(srv, NULL)) + __CASE(play_prev, command_previous(srv, NULL)) + + __CASE(play_toggle, { __ATTR_IS_STATE(PAUSE, database_queue_set_paused(srv->db, 1)) + __ATTR_IS_STATE(PLAY, database_queue_set_paused(srv->db, 0)) + __ATTR_IS_STATE(TOGGLE, database_queue_toggle_pause(srv->db)) + __ATTR_IS_STATE(STOP, database_queue_stop(srv->db)) }) + + __CASE(prop_vol, database_config_queue(srv->db, "volume", (size_t)evt.attr)) + __CASE(prop_dur, database_config_queue(srv->db, "duration", (size_t)evt.attr)) + __CASE(prop_time, database_config_queue(srv->db, "elapsed", (size_t)evt.attr)) + + __CASE(skip_current, { + RETURN_UNLESS((string = malloc(PATH_MAX * sizeof(char))), "Out of memory", NOTHING); + database_queue_skip_current(srv->db, string); + MOD_CALL(srv->window_mod, "load", string); + free(string); + }) + + __CASE(db_update_total, { srv->update_total += (size_t)evt.attr; }) + __CASE(db_updating, { srv->is_updating = (((uint8_t)(size_t)evt.attr) > 0); }) + __CASE(db_update_tick, { + if (srv->update_current != ((size_t)-1)) + srv->update_current++; + if (srv->update_current >= srv->update_total) + (LOG_WARN("EVENT", "Force updating state because tikcs exceded the update count"), srv->is_updating = 0, + srv->update_total = 0, srv->update_current = 0); + }) + + /* The null event / ignored events, just return / continue */ + __CASE(play_file, {}) case lkt_event_null: return; @@ -894,7 +875,7 @@ redo: default: LOG_FATAL("Got unknown type event: %ld", evt.type); return; - // *INDENT-ON* + // clang-format on } goto redo; @@ -915,10 +896,10 @@ static int __lkt_signal_USR2 = 0; /* SIGUSR2 => not used */ static void __signal_handler(int sig) { -#define __HANDLE(signal) \ - case SIG##signal: \ - LOG_INFO("SIGNAL", "Got signal SIG"#signal); \ - __lkt_signal_##signal = 1; \ +#define __HANDLE(signal) \ + case SIG##signal: \ + LOG_INFO("SIGNAL", "Got signal SIG" #signal); \ + __lkt_signal_##signal = 1; \ break; switch (sig) { @@ -939,7 +920,7 @@ static void __lkt_handle_INT(struct lkt_state *srv) { LOG_INFO("SIGNAL", "Stopping lektord"); - MOD_PROC(srv->repo_mod, "free"); + MOD_PROC(srv->repo_mod, "free"); MOD_PROC(srv->window_mod, "free"); close(srv->fds[0].fd); lkt_queue_free(&srv->queue); @@ -949,7 +930,7 @@ __lkt_handle_INT(struct lkt_state *srv) /* Register default handle for SIGINT, so if you double ctrl+c it exit like * it crashed. */ LOG_INFO("SIGNAL", "Now use default handler for SIGINT and SIGQUIT"); - signal(SIGINT, SIG_DFL); + signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); /* TODO: Clean close of fds... */ @@ -981,14 +962,14 @@ __lkt_handle_USR2(struct lkt_state UNUSED *srv) static inline void handle_signals(struct lkt_state *srv) { -#define __HANDLE(srv, signal) \ - if (__lkt_signal_##signal) { \ - LOG_INFO("SIGNAL", "Server in handle phase for signal SIG"#signal); \ - if (srv->__signal_##signal) \ - srv->__signal_##signal(srv); \ - else \ - LOG_WARN("SIGNAL", "No signal handler in server for SIG"#signal); \ - } \ +#define __HANDLE(srv, signal) \ + if (__lkt_signal_##signal) { \ + LOG_INFO("SIGNAL", "Server in handle phase for signal SIG" #signal); \ + if (srv->__signal_##signal) \ + srv->__signal_##signal(srv); \ + else \ + LOG_WARN("SIGNAL", "No signal handler in server for SIG" #signal); \ + } \ __lkt_signal_##signal = 0; __HANDLE(srv, INT) @@ -1017,16 +998,16 @@ lkt_listen(struct lkt_state *srv) srv->__signal_USR1 = __lkt_handle_USR1; srv->__signal_USR2 = __lkt_handle_USR2; srv->__signal_ILL = __lkt_handle_ILL; - signal(SIGINT, __signal_handler); - signal(SIGILL, __signal_handler); + signal(SIGINT, __signal_handler); + signal(SIGILL, __signal_handler); signal(SIGUSR1, __signal_handler); signal(SIGUSR2, __signal_handler); signal(SIGQUIT, __signal_handler); LOG_INFO("INIT", "Signal handlers registered"); int is_unix_socket = STR_NMATCH(srv->port, "unix", 4); - char perms_s[6] = {0}; - int perms = 0600; + char perms_s[6] = { 0 }; + int perms = 0600; /* FIXME: Use the server register, and add a socket type (which is * unix/tcp) and place the 'socket name' in a [server.socket] and not @@ -1042,20 +1023,18 @@ lkt_listen(struct lkt_state *srv) } } - init_socket_func init_sock = is_unix_socket - ? init_listening_socket_unix - : init_listening_socket_net; + init_socket_func init_sock = is_unix_socket ? init_listening_socket_unix : init_listening_socket_net; if ((srv->fds[0].fd = init_sock(srv->host, srv->port)) < 0) return; - if (is_unix_socket && init_permission_socket_unix(srv->host, perms)) - return; + if (is_unix_socket) + init_permission_socket_unix(srv->host, perms); srv->fds[0].events = POLLIN; srv->fds_len = 1; srv->start_date = time(NULL); - if (srv->start_date == (time_t) -1) + if (srv->start_date == (time_t)-1) LOG_FATAL("Overflow or error on call to time function"); /* Listen */ diff --git a/src/net/message.c b/src/net/message.c index 21d3bf32488ed13450827e790d684b069a7438e5..a73f04b1937b447926706dda19053f8a56551f3a 100644 --- a/src/net/message.c +++ b/src/net/message.c @@ -6,10 +6,10 @@ struct lkt_message * lkt_message_new() { - struct lkt_message *res = malloc(sizeof(struct lkt_message)); - res->ref_count = 1; - *(res->data) = 0; - res->data_len = 0; + struct lkt_message *res = safe_malloc(sizeof(struct lkt_message)); + res->ref_count = 1; + *(res->data) = 0; + res->data_len = 0; return res; } diff --git a/utils/scripts/style.bash b/utils/scripts/style.bash index 5e2da23da1b9e50f4c7f0299d67dab3fb1076456..335fce6a0a66bad4fe9da9081ec7776ebe46c75e 100755 --- a/utils/scripts/style.bash +++ b/utils/scripts/style.bash @@ -1,33 +1,5 @@ -#!/bin/bash - -OPTIONS=' - --style=linux -s4 - --pad-oper --pad-header --pad-comma - --align-pointer=name --align-reference=name - --break-one-line-headers - --remove-braces - --break-return-type - --convert-tabs - --close-templates - --max-code-length=101 - --mode=c - --lineend=linux - --attach-inlines - --indent-labels - --indent-col1-comments - --indent-preproc-block' - -## Check only C files -if [ $# -gt 0 ] && [ "$1" = "--check" ] ; then - astyle $OPTIONS --dry-run -R ./*.c | grep Formatted - [ $? -eq 1 ] && exit 0 || exit 1 -fi - -## Astyle -find ./src ./inc/lektor -name '*.c' -exec astyle $OPTIONS --quiet {} \; -find ./src ./inc/lektor -name '*.h' -exec astyle $OPTIONS --quiet {} \; -find ./src ./inc/lektor -name '*.orig' -exec rm {} \; - -## Clang-Format -find ./src -name '*.cpp' -exec clang-format -i {} \; -find ./inc/lektor ./src -name '*.hpp' -exec clang-format -i {} \; +#!/bin/sh +set -e +_ROOT="$(git rev-parse --show-toplevel)" +cd "$_ROOT" +find ./src \( -name '*.cpp' -o -name '*.cc' -o -name '*.c' -o -name '*.h' -o -name '*.h' \) -exec clang-format -i {} \;