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().
This commit is contained in:
Max Kellermann 2008-10-09 19:17:44 +02:00
parent 79a28e5c72
commit f1022bcc12
4 changed files with 16 additions and 20 deletions

View File

@ -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,

View File

@ -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 {

View File

@ -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;

View File

@ -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);