X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=common-src%2Famfeatures.c;h=e15667a67063725ab88d6b20145b55d485e9ccb7;hb=refs%2Fheads%2Fmaster;hp=8775912237e27b584b53bd70e1a4e23e7a729acc;hpb=ac973066bc508cb82728e46eaf499e9424d4e0f1;p=debian%2Famanda diff --git a/common-src/amfeatures.c b/common-src/amfeatures.c index 8775912..e15667a 100644 --- a/common-src/amfeatures.c +++ b/common-src/amfeatures.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -72,7 +73,7 @@ am_init_feature_set(void) am_add_feature(f, fe_program_dump); am_add_feature(f, fe_program_gnutar); - am_add_feature(f, fe_program_backup_api); + am_add_feature(f, fe_program_application_api); am_add_feature(f, fe_options_compress_fast); am_add_feature(f, fe_options_compress_best); @@ -89,7 +90,6 @@ am_init_feature_set(void) am_add_feature(f, fe_options_include_list); am_add_feature(f, fe_options_multiple_include); am_add_feature(f, fe_options_optional_include); - am_add_feature(f, fe_options_krb4_auth); am_add_feature(f, fe_options_kencrypt); am_add_feature(f, fe_req_options_maxdumps); @@ -107,7 +107,6 @@ am_init_feature_set(void) am_add_feature(f, fe_amidxtaped_disk); am_add_feature(f, fe_amidxtaped_datestamp); am_add_feature(f, fe_amidxtaped_header); - am_add_feature(f, fe_amidxtaped_nargs); am_add_feature(f, fe_amidxtaped_config); am_add_feature(f, fe_recover_splits); @@ -147,6 +146,27 @@ am_init_feature_set(void) am_add_feature(f, fe_req_options_config); am_add_feature(f, fe_rep_sendsize_quoted_error); + am_add_feature(f, fe_req_xml); + am_add_feature(f, fe_pp_script); + am_add_feature(f, fe_amindexd_DLE); + am_add_feature(f, fe_amrecover_dle_in_header); + am_add_feature(f, fe_xml_estimate); + am_add_feature(f, fe_xml_property_priority); + am_add_feature(f, fe_sendsize_rep_warning); + am_add_feature(f, fe_xml_estimatelist); + am_add_feature(f, fe_xml_level_server); + am_add_feature(f, fe_xml_data_path); + am_add_feature(f, fe_xml_directtcp_list); + am_add_feature(f, fe_amidxtaped_datapath); + am_add_feature(f, fe_sendbackup_noop); + am_add_feature(f, fe_amrecover_origsize_in_header); + am_add_feature(f, fe_amidxtaped_abort); + am_add_feature(f, fe_amrecover_correct_disk_quoting); + am_add_feature(f, fe_amindexd_quote_label); + am_add_feature(f, fe_amrecover_receive_unfiltered); + am_add_feature(f, fe_application_client_name); + am_add_feature(f, fe_script_client_name); + am_add_feature(f, fe_dumptype_property); } return f; } @@ -187,7 +207,6 @@ am_set_default_feature_set(void) am_add_feature(f, fe_options_index); am_add_feature(f, fe_options_exclude_file); am_add_feature(f, fe_options_exclude_list); - am_add_feature(f, fe_options_krb4_auth); am_add_feature(f, fe_options_kencrypt); am_add_feature(f, fe_req_options_maxdumps); @@ -363,11 +382,11 @@ am_feature_to_string( size_t i; if (f == NULL) { - result = stralloc("UNKNOWNFEATURE"); + result = stralloc(_("UNKNOWNFEATURE")); } else { result = alloc((f->size * 2) + 1); for (i = 0; i < f->size; i++) { - snprintf(result + (i * 2), 2 + 1, "%02x", f->bytes[i]); + g_snprintf(result + (i * 2), 2 + 1, "%02x", f->bytes[i]); } result[i * 2] = '\0'; } @@ -401,6 +420,7 @@ am_string_to_feature( am_feature_t *f = NULL; size_t i; int ch1, ch2; + char * orig = s; if (s != NULL && strcmp(s,"UNKNOWNFEATURE") != 0) { f = am_allocate_feature_set(); @@ -411,10 +431,10 @@ am_string_to_feature( ch1 -= 'a'; ch1 += 10; } else if (ch1 >= 'A' && ch1 <= 'F') { - ch1 -= 'a'; + ch1 -= 'A'; ch1 += 10; } else { - break; + goto bad; } ch2 = *s++; if (isdigit(ch2)) { @@ -423,79 +443,28 @@ am_string_to_feature( ch2 -= 'a'; ch2 += 10; } else if (ch2 >= 'A' && ch2 <= 'F') { - ch2 -= 'a'; + ch2 -= 'A'; ch2 += 10; - } else { - amfree(f); /* bad conversion */ + } else if (ch2 == '\0') { + g_warning("odd number of digits in amfeature string; truncating"); break; + } else { + goto bad; } f->bytes[i] = (unsigned char)((ch1 << 4) | ch2); } } return f; + +bad: + g_warning("Bad feature string '%s'", orig); + am_release_feature_set(f); + return NULL; } -#if defined(TEST) -int -main( - int argc, - char **argv) +am_feature_t * +am_features( + am_feature_t *f) { - am_feature_t *f; - am_feature_t *f1; - char *s; - char *s1; - int i; - int n; - - f = am_init_feature_set(); - if (f == NULL) { - fprintf(stderr, "cannot initialize feature set\n"); - return 1; - } - - s = am_feature_to_string(f); - printf("base features=%s\n", s); - - f1 = am_string_to_feature(s); - s1 = am_feature_to_string(f1); - if (strcmp(s, s1) != 0) { - fprintf(stderr, "base feature -> string -> feature set mismatch\n"); - fprintf(stderr, "conv features=%s\n", s); - } - - amfree(s1); - amfree(s); - - for (i = 1; i < argc; i++) { - if (argv[i][0] == '+') { - n = atoi(&argv[i][1]); - if (am_add_feature(f, (am_feature_e)n)) { - printf("added feature number %d\n", n); - } else { - printf("could not add feature number %d\n", n); - } - } else if (argv[i][0] == '-') { - n = atoi(&argv[i][1]); - if (am_remove_feature(f, (am_feature_e)n)) { - printf("removed feature number %d\n", n); - } else { - printf("could not remove feature number %d\n", n); - } - } else { - n = atoi(argv[i]); - if (am_has_feature(f, (am_feature_e)n)) { - printf("feature %d is set\n", n); - } else { - printf("feature %d is not set\n", n); - } - } - } - - s = am_feature_to_string(f); - printf(" new features=%s\n", s); - amfree(s); - - return 0; + return f; } -#endif