Lines Matching full:options

24 #include "options.h"
37 share__getopt format struct; note we don't use short options so we just
41 /* global options */
106 …LAC__bool parse_option(int option_index, const char *option_argument, CommandLineOptions *options);
107 static void append_new_operation(CommandLineOptions *options, Operation operation);
108 static void append_new_argument(CommandLineOptions *options, Argument argument);
109 static Operation *append_major_operation(CommandLineOptions *options, OperationType type);
110 static Operation *append_shorthand_operation(CommandLineOptions *options, OperationType type);
111 static Argument *find_argument(CommandLineOptions *options, ArgumentType type);
112 static Operation *find_shorthand_operation(CommandLineOptions *options, OperationType type);
113 static Argument *append_argument(CommandLineOptions *options, ArgumentType type);
129 void init_options(CommandLineOptions *options) in init_options() argument
131 options->preserve_modtime = false; in init_options()
135 options->prefix_with_filename = 2; in init_options()
137 options->utf8_convert = true; in init_options()
138 options->use_padding = true; in init_options()
139 options->cued_seekpoints = true; in init_options()
140 options->show_long_help = false; in init_options()
141 options->show_version = false; in init_options()
142 options->data_format_is_binary = false; in init_options()
143 options->data_format_is_binary_headerless = false; in init_options()
144 options->application_data_format_is_hexdump = false; in init_options()
146 options->ops.operations = 0; in init_options()
147 options->ops.num_operations = 0; in init_options()
148 options->ops.capacity = 0; in init_options()
150 options->args.arguments = 0; in init_options()
151 options->args.num_arguments = 0; in init_options()
152 options->args.capacity = 0; in init_options()
154 options->args.checks.num_shorthand_ops = 0; in init_options()
155 options->args.checks.num_major_ops = 0; in init_options()
156 options->args.checks.has_block_type = false; in init_options()
157 options->args.checks.has_except_block_type = false; in init_options()
159 options->num_files = 0; in init_options()
160 options->filenames = 0; in init_options()
163 FLAC__bool parse_options(int argc, char *argv[], CommandLineOptions *options) in parse_options() argument
172 had_error |= !parse_option(option_index, share__optarg, options); in parse_options()
184 if(options->prefix_with_filename == 2) in parse_options()
185 options->prefix_with_filename = (argc - share__optind > 1); in parse_options()
187 if(share__optind >= argc && !options->show_long_help && !options->show_version) { in parse_options()
193 options->num_files = argc - share__optind; in parse_options()
195 if(options->num_files > 0) { in parse_options()
197 if(0 == (options->filenames = safe_malloc_mul_2op_(sizeof(char*), /*times*/options->num_files))) in parse_options()
200 options->filenames[i++] = local_strdup(argv[share__optind++]); in parse_options()
203 if(options->args.checks.num_major_ops > 0) { in parse_options()
204 if(options->args.checks.num_major_ops > 1) { in parse_options()
208 else if(options->args.checks.num_shorthand_ops > 0) { in parse_options()
214 /* check for only one FLAC file used with certain options */ in parse_options()
215 if(!had_error && options->num_files > 1) { in parse_options()
216 if(0 != find_shorthand_operation(options, OP__IMPORT_CUESHEET_FROM)) { in parse_options()
220 if(0 != find_shorthand_operation(options, OP__EXPORT_CUESHEET_TO)) { in parse_options()
224 if(0 != find_shorthand_operation(options, OP__EXPORT_PICTURE_TO)) { in parse_options()
229 0 != find_shorthand_operation(options, OP__IMPORT_VC_FROM) && in parse_options()
230 0 == strcmp(find_shorthand_operation(options, OP__IMPORT_VC_FROM)->argument.filename.value, "-") in parse_options()
237 if(options->args.checks.has_block_type && options->args.checks.has_except_block_type) { in parse_options()
250 if(options->cued_seekpoints) { in parse_options()
251 Operation *op = find_shorthand_operation(options, OP__IMPORT_CUESHEET_FROM); in parse_options()
253 Operation *op2 = find_shorthand_operation(options, OP__ADD_SEEKPOINT); in parse_options()
255 op2 = append_shorthand_operation(options, OP__ADD_SEEKPOINT); in parse_options()
263 void free_options(CommandLineOptions *options) in free_options() argument
269 FLAC__ASSERT(0 == options->ops.operations || options->ops.num_operations > 0); in free_options()
270 FLAC__ASSERT(0 == options->args.arguments || options->args.num_arguments > 0); in free_options()
272 for(i = 0, op = options->ops.operations; i < options->ops.num_operations; i++, op++) { in free_options()
316 for(i = 0, arg = options->args.arguments; i < options->args.num_arguments; i++, arg++) { in free_options()
336 if(0 != options->ops.operations) in free_options()
337 free(options->ops.operations); in free_options()
339 if(0 != options->args.arguments) in free_options()
340 free(options->args.arguments); in free_options()
342 if(0 != options->filenames) { in free_options()
343 for(i = 0; i < options->num_files; i++) { in free_options()
344 if(0 != options->filenames[i]) in free_options()
345 free(options->filenames[i]); in free_options()
347 free(options->filenames); in free_options()
355 FLAC__bool parse_option(int option_index, const char *option_argument, CommandLineOptions *options) in parse_option() argument
363 options->preserve_modtime = true; in parse_option()
366 options->prefix_with_filename = true; in parse_option()
369 options->prefix_with_filename = false; in parse_option()
372 options->utf8_convert = false; in parse_option()
375 options->use_padding = false; in parse_option()
378 options->cued_seekpoints = false; in parse_option()
381 (void) append_shorthand_operation(options, OP__SHOW_MD5SUM); in parse_option()
384 (void) append_shorthand_operation(options, OP__SHOW_MIN_BLOCKSIZE); in parse_option()
387 (void) append_shorthand_operation(options, OP__SHOW_MAX_BLOCKSIZE); in parse_option()
390 (void) append_shorthand_operation(options, OP__SHOW_MIN_FRAMESIZE); in parse_option()
393 (void) append_shorthand_operation(options, OP__SHOW_MAX_FRAMESIZE); in parse_option()
396 (void) append_shorthand_operation(options, OP__SHOW_SAMPLE_RATE); in parse_option()
399 (void) append_shorthand_operation(options, OP__SHOW_CHANNELS); in parse_option()
402 (void) append_shorthand_operation(options, OP__SHOW_BPS); in parse_option()
405 (void) append_shorthand_operation(options, OP__SHOW_TOTAL_SAMPLES); in parse_option()
408 op = append_shorthand_operation(options, OP__SET_MD5SUM); in parse_option()
418 op = append_shorthand_operation(options, OP__SET_MIN_BLOCKSIZE); in parse_option()
427 op = append_shorthand_operation(options, OP__SET_MAX_BLOCKSIZE); in parse_option()
436 op = append_shorthand_operation(options, OP__SET_MIN_FRAMESIZE); in parse_option()
445 op = append_shorthand_operation(options, OP__SET_MAX_FRAMESIZE); in parse_option()
454 op = append_shorthand_operation(options, OP__SET_SAMPLE_RATE); in parse_option()
463 op = append_shorthand_operation(options, OP__SET_CHANNELS); in parse_option()
472 op = append_shorthand_operation(options, OP__SET_BPS); in parse_option()
481 op = append_shorthand_operation(options, OP__SET_TOTAL_SAMPLES); in parse_option()
490 (void) append_shorthand_operation(options, OP__SHOW_VC_VENDOR); in parse_option()
494 op = append_shorthand_operation(options, OP__SHOW_VC_FIELD); in parse_option()
503 op = append_shorthand_operation(options, OP__EXPORT_VC_TO); in parse_option()
507 (void) append_shorthand_operation(options, OP__REMOVE_VC_ALL); in parse_option()
511 op = append_shorthand_operation(options, OP__REMOVE_VC_ALL_EXCEPT); in parse_option()
521 op = append_shorthand_operation(options, OP__REMOVE_VC_FIELD); in parse_option()
531 op = append_shorthand_operation(options, OP__REMOVE_VC_FIRSTFIELD); in parse_option()
541 op = append_shorthand_operation(options, OP__SET_VC_FIELD); in parse_option()
552 op = append_shorthand_operation(options, OP__SET_VC_FIELD); in parse_option()
562 op = append_shorthand_operation(options, OP__IMPORT_VC_FROM); in parse_option()
570 op = append_shorthand_operation(options, OP__EXPORT_VC_TO); in parse_option()
578 if(0 != find_shorthand_operation(options, OP__IMPORT_CUESHEET_FROM)) { in parse_option()
582 op = append_shorthand_operation(options, OP__IMPORT_CUESHEET_FROM); in parse_option()
590 op = append_shorthand_operation(options, OP__EXPORT_CUESHEET_TO); in parse_option()
598 op = append_shorthand_operation(options, OP__IMPORT_PICTURE_FROM); in parse_option()
606 arg = find_argument(options, ARG__BLOCK_NUMBER); in parse_option()
607 op = append_shorthand_operation(options, OP__EXPORT_PICTURE_TO); in parse_option()
625 op = find_shorthand_operation(options, OP__ADD_SEEKPOINT); in parse_option()
627 op = append_shorthand_operation(options, OP__ADD_SEEKPOINT); in parse_option()
634 (void) append_shorthand_operation(options, OP__ADD_REPLAY_GAIN); in parse_option()
637 (void) append_shorthand_operation(options, OP__SCAN_REPLAY_GAIN); in parse_option()
649 op = append_shorthand_operation(options, OP__REMOVE_VC_FIELD); in parse_option()
654 op = append_shorthand_operation(options, OP__ADD_PADDING); in parse_option()
662 options->show_long_help = true; in parse_option()
665 options->show_version = true; in parse_option()
668 (void) append_major_operation(options, OP__LIST); in parse_option()
671 (void) append_major_operation(options, OP__APPEND); in parse_option()
674 (void) append_major_operation(options, OP__REMOVE); in parse_option()
677 (void) append_major_operation(options, OP__REMOVE_ALL); in parse_option()
680 (void) append_major_operation(options, OP__MERGE_PADDING); in parse_option()
683 (void) append_major_operation(options, OP__SORT_PADDING); in parse_option()
686 arg = append_argument(options, ARG__BLOCK_NUMBER); in parse_option()
694 arg = append_argument(options, ARG__BLOCK_TYPE); in parse_option()
700 options->args.checks.has_block_type = true; in parse_option()
703 arg = append_argument(options, ARG__EXCEPT_BLOCK_TYPE); in parse_option()
709 options->args.checks.has_except_block_type = true; in parse_option()
712 arg = append_argument(options, ARG__DATA_FORMAT); in parse_option()
718 options->data_format_is_binary = arg->value.data_format.is_binary; in parse_option()
719 options->data_format_is_binary_headerless = arg->value.data_format.is_headerless; in parse_option()
723 …if(!parse_application_data_format(option_argument, &(options->application_data_format_is_hexdump))… in parse_option()
729 arg = append_argument(options, ARG__FROM_FILE); in parse_option()
740 void append_new_operation(CommandLineOptions *options, Operation operation) in append_new_operation() argument
742 if(options->ops.capacity == 0) { in append_new_operation()
743 options->ops.capacity = 50; in append_new_operation()
744 if(0 == (options->ops.operations = malloc(sizeof(Operation) * options->ops.capacity))) in append_new_operation()
746 memset(options->ops.operations, 0, sizeof(Operation) * options->ops.capacity); in append_new_operation()
748 if(options->ops.capacity <= options->ops.num_operations) { in append_new_operation()
749 unsigned original_capacity = options->ops.capacity; in append_new_operation()
750 if(options->ops.capacity > UINT32_MAX / 2) /* overflow check */ in append_new_operation()
752 options->ops.capacity *= 2; in append_new_operation()
753 …if(0 == (options->ops.operations = safe_realloc_mul_2op_(options->ops.operations, sizeof(Operation… in append_new_operation()
755 …memset(options->ops.operations + original_capacity, 0, sizeof(Operation) * (options->ops.capacity … in append_new_operation()
758 options->ops.operations[options->ops.num_operations++] = operation; in append_new_operation()
761 void append_new_argument(CommandLineOptions *options, Argument argument) in append_new_argument() argument
763 if(options->args.capacity == 0) { in append_new_argument()
764 options->args.capacity = 50; in append_new_argument()
765 if(0 == (options->args.arguments = malloc(sizeof(Argument) * options->args.capacity))) in append_new_argument()
767 memset(options->args.arguments, 0, sizeof(Argument) * options->args.capacity); in append_new_argument()
769 if(options->args.capacity <= options->args.num_arguments) { in append_new_argument()
770 unsigned original_capacity = options->args.capacity; in append_new_argument()
771 if(options->args.capacity > UINT32_MAX / 2) /* overflow check */ in append_new_argument()
773 options->args.capacity *= 2; in append_new_argument()
774 …if(0 == (options->args.arguments = safe_realloc_mul_2op_(options->args.arguments, sizeof(Argument)… in append_new_argument()
776 …memset(options->args.arguments + original_capacity, 0, sizeof(Argument) * (options->args.capacity … in append_new_argument()
779 options->args.arguments[options->args.num_arguments++] = argument; in append_new_argument()
782 Operation *append_major_operation(CommandLineOptions *options, OperationType type) in append_major_operation() argument
787 append_new_operation(options, op); in append_major_operation()
788 options->args.checks.num_major_ops++; in append_major_operation()
789 return options->ops.operations + (options->ops.num_operations - 1); in append_major_operation()
792 Operation *append_shorthand_operation(CommandLineOptions *options, OperationType type) in append_shorthand_operation() argument
797 append_new_operation(options, op); in append_shorthand_operation()
798 options->args.checks.num_shorthand_ops++; in append_shorthand_operation()
799 return options->ops.operations + (options->ops.num_operations - 1); in append_shorthand_operation()
802 Argument *find_argument(CommandLineOptions *options, ArgumentType type) in find_argument() argument
805 for(i = 0; i < options->args.num_arguments; i++) in find_argument()
806 if(options->args.arguments[i].type == type) in find_argument()
807 return &options->args.arguments[i]; in find_argument()
811 Operation *find_shorthand_operation(CommandLineOptions *options, OperationType type) in find_shorthand_operation() argument
814 for(i = 0; i < options->ops.num_operations; i++) in find_shorthand_operation()
815 if(options->ops.operations[i].type == type) in find_shorthand_operation()
816 return &options->ops.operations[i]; in find_shorthand_operation()
820 Argument *append_argument(CommandLineOptions *options, ArgumentType type) in append_argument() argument
825 append_new_argument(options, arg); in append_argument()
826 return options->args.arguments + (options->args.num_arguments - 1); in append_argument()