X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=aft.c;h=cfb1f69773a73a2f6401bf2b93bfc1be21217412;hb=fdb03951ee708a42795d4abb36d3a8637c478975;hp=acf751566c61d82e23cc34565c1189f2db147917;hpb=bb3daee7cc11561159f168fe4f5427b53e54917f;p=paraslash.git diff --git a/aft.c b/aft.c index acf75156..cfb1f697 100644 --- a/aft.c +++ b/aft.c @@ -1439,18 +1439,26 @@ int com_ls(struct command_context *cc) i++; break; } + /* + * Compatibility: Prior to 0.5.5 it was necessary to specify + * the listing mode without the '=' character as in -lv, for + * example. Now the variant with '=' is preferred and + * documented but we still accept the old way to specify the + * listing mode. + * + * Support for the legacy syntax can be dropped at 0.6.0 + * or later. + */ if (!strncmp(arg, "-l", 2)) { - if (!*(arg + 2)) { - mode = LS_MODE_LONG; - continue; - } - if (*(arg + 3)) - return -E_AFT_SYNTAX; - switch(*(arg + 2)) { + arg += 2; + if (*arg == '=') + arg++; + switch (*arg) { case 's': mode = LS_MODE_SHORT; continue; case 'l': + case '\0': mode = LS_MODE_LONG; continue; case 'v': @@ -1485,10 +1493,12 @@ int com_ls(struct command_context *cc) flags |= LS_FLAG_UNIXDATE; continue; } + /* The compatibility remark above applies also to -s. */ if (!strncmp(arg, "-s", 2)) { - if (!*(arg + 2) || *(arg + 3)) - return -E_AFT_SYNTAX; - switch(*(arg + 2)) { + arg += 2; + if (*arg == '=') + arg++; + switch (*arg) { case 'p': sort = LS_SORT_BY_PATH; continue; @@ -1876,8 +1886,10 @@ static int add_one_audio_file(const char *path, void *private_data) unsigned char hash[HASH_SIZE]; ret = guess_audio_format(path); - if (ret < 0 && !(pad->flags & ADD_FLAG_ALL)) + if (ret < 0 && !(pad->flags & ADD_FLAG_ALL)) { + ret = 0; goto out_free; + } query.data = (char *)path; query.size = strlen(path) + 1; ret = send_callback_request(path_brother_callback, &query, @@ -2546,8 +2558,10 @@ static void com_setatt_callback(int fd, const struct osl_object *query) break; p[len - 1] = '\0'; ret = get_attribute_bitnum_by_name(p, &bitnum); - if (ret < 0) + if (ret < 0) { + para_printf(&cad.pb, "attribute not found: %s\n", p); goto out; + } if (c == '+') cad.add_mask |= (1UL << bitnum); else @@ -2557,7 +2571,8 @@ static void com_setatt_callback(int fd, const struct osl_object *query) if (!cad.add_mask && !cad.del_mask) goto out; pmd.patterns.data = p; - assert(p < (char *)query->data + query->size); + if (p >= (char *)query->data + query->size) + goto out; pmd.patterns.size = (char *)query->data + query->size - p; ret = for_each_matching_row(&pmd); if (ret < 0) @@ -2718,9 +2733,9 @@ static int aft_open(const char *dir) PARA_INFO_LOG("audio file table contains %d files\n", num); return ret; } - PARA_INFO_LOG("failed to open audio file table\n"); + PARA_NOTICE_LOG("failed to open audio file table\n"); audio_file_table = NULL; - if (ret >= 0 || ret == -OSL_ERRNO_TO_PARA_ERROR(E_OSL_NOENT)) + if (ret == -OSL_ERRNO_TO_PARA_ERROR(E_OSL_NOENT)) return 1; return ret; }