Commit f1022bcc authored by Max Kellermann's avatar Max Kellermann

update: job ID must be positive

The documentation for directory_update_init() was incorrect: a job ID must be positive, not non-negative. If the update queue is full and no job was created, it makes more sense to return 0 instead of -1, because it is more consistent with the return value of isUpdatingDB().
parent 79a28e5c
......@@ -803,31 +803,27 @@ static int handlePlaylistMove(struct client *client,
return print_playlist_result(client, result);
}
static int print_update_result(struct client *client, int ret)
{
if (ret >= 0) {
client_printf(client, "updating_db: %i\n", ret);
return 0;
}
if (ret == -2)
command_error(client, ACK_ERROR_ARG, "invalid path");
else
command_error(client, ACK_ERROR_UPDATE_ALREADY,
"already updating");
return -1;
}
static int handleUpdate(struct client *client,
mpd_unused int argc, char *argv[])
{
char *path = NULL;
int ret;
assert(argc <= 2);
if (argc == 2 && !(path = sanitizePathDup(argv[1]))) {
command_error(client, ACK_ERROR_ARG, "invalid path");
return -1;
}
return print_update_result(client, directory_update_init(path));
ret = directory_update_init(path);
if (ret > 0) {
client_printf(client, "updating_db: %i\n", ret);
return 0;
} else {
command_error(client, ACK_ERROR_UPDATE_ALREADY,
"already updating");
return -1;
}
}
static int handleNext(mpd_unused struct client *client,
......
......@@ -46,7 +46,7 @@ db_init(void)
music_root = directory_new("", NULL);
ret = directory_update_init(NULL);
if (ret < 0)
if (ret == 0)
FATAL("directory update failed\n");
do {
......
......@@ -436,9 +436,9 @@ int directory_update_init(char *path)
int next_task_id;
if (!path)
return -1;
return 0;
if (update_paths_nr == ARRAY_SIZE(update_paths))
return -1;
return 0;
assert(update_paths_nr < ARRAY_SIZE(update_paths));
update_paths[update_paths_nr++] = path;
next_task_id = update_task_id + update_paths_nr;
......
......@@ -23,8 +23,8 @@
int isUpdatingDB(void);
/*
* returns the non-negative update job ID on success,
* returns -1 if busy
* returns the positive update job ID on success,
* returns 0 if busy
* @path will be freed by this function and should not be reused
*/
int directory_update_init(char *path);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment