845
1272
stream << indent_str;
847
1274
stream << indent_str;
848
stream << " return (found ? -2 : -1); /* return many values are matched */";
850
stream << indent_str;
853
stream << indent_str;
855
stream << indent_str;
1275
stream << " return (found ? -2 : -1); /* return many values or none matched */";
1277
stream << indent_str;
1280
stream << indent_str;
1282
stream << indent_str;
1285
stream << indent_str;
1286
stream << "static void";
1288
stream << indent_str;
1289
stream << "write_into_file(FILE *outfile, const char *opt, const char *arg, char *values[])";
1291
stream << indent_str;
1294
stream << indent_str;
1295
if (check_possible_values)
1297
stream << " int found = -1;";
1299
stream << indent_str;
1301
stream << " if (arg) {";
1303
stream << indent_str;
1304
if (check_possible_values)
1306
stream << " if (values) {";
1308
stream << indent_str;
1309
stream << " found = check_possible_values(arg, values); ";
1311
stream << indent_str;
1314
stream << indent_str;
1315
stream << " if (found >= 0)";
1317
stream << indent_str;
1318
stream << " fprintf(outfile, \"%s=\\\"%s\\\" # %s\\n\", opt, arg, values[found]);";
1320
stream << indent_str;
1323
stream << indent_str;
1324
stream << " fprintf(outfile, \"%s=\\\"%s\\\"\\n\", opt, arg);";
1326
stream << indent_str;
1330
stream << " fprintf(outfile, \"%s=\\\"%s\\\"\\n\", opt, arg);";
1332
stream << indent_str;
1334
stream << " } else {";
1336
stream << indent_str;
1337
stream << " fprintf(outfile, \"%s\\n\", opt);";
1339
stream << indent_str;
1342
stream << indent_str;
1345
stream << indent_str;
1347
stream << indent_str;
1348
if (multiple_options)
1350
stream << "static void";
1352
stream << indent_str;
1353
stream << "write_multiple_into_file(FILE *outfile, int len, const char *opt, char **arg, char *values[])";
1355
stream << indent_str;
1358
stream << indent_str;
1359
stream << " int i;";
1361
stream << indent_str;
1366
stream << indent_str;
1367
stream << " for (i = 0; i < len; ++i)";
1369
stream << indent_str;
1370
stream << " write_into_file(outfile, opt, (arg ? arg[i] : 0), values);";
1372
stream << indent_str;
1375
stream << indent_str;
1378
stream << indent_str;
1381
stream << indent_str;
1382
generate_string (parser_name, stream, indent + indent_str.length ());
1383
stream << "_dump(FILE *outfile, struct ";
1384
generate_string (args_info, stream, indent + indent_str.length ());
1385
stream << " *args_info)";
1387
stream << indent_str;
1390
stream << indent_str;
1391
stream << " int i = 0;";
1393
stream << indent_str;
1395
stream << indent_str;
1396
stream << " if (!outfile)";
1398
stream << indent_str;
1401
stream << indent_str;
1402
stream << " fprintf (stderr, \"%s: cannot dump options to stream\\n\", ";
1403
generate_string (package_var_name, stream, indent + indent_str.length ());
1406
stream << indent_str;
1407
stream << " return EXIT_FAILURE;";
1409
stream << indent_str;
1412
stream << indent_str;
1414
stream << indent_str;
1417
if (file_save_loop.size () > 0)
1418
generate_string (file_save_loop, stream, indent + indent_str.length ());
1420
generate_file_save_loop (stream, indent + indent_str.length ());
1423
stream << indent_str;
1425
stream << indent_str;
1426
stream << " i = EXIT_SUCCESS;";
1428
stream << indent_str;
1429
stream << " return i;";
1431
stream << indent_str;
1434
stream << indent_str;
1436
stream << indent_str;
1439
stream << indent_str;
1440
generate_string (parser_name, stream, indent + indent_str.length ());
1441
stream << "_file_save(const char *filename, struct ";
1442
generate_string (args_info, stream, indent + indent_str.length ());
1443
stream << " *args_info)";
1445
stream << indent_str;
1448
stream << indent_str;
1449
stream << " FILE *outfile;";
1451
stream << indent_str;
1452
stream << " int i = 0;";
1454
stream << indent_str;
1456
stream << indent_str;
1457
stream << " outfile = fopen(filename, \"w\");";
1459
stream << indent_str;
1461
stream << indent_str;
1462
stream << " if (!outfile)";
1464
stream << indent_str;
1467
stream << indent_str;
1468
stream << " fprintf (stderr, \"%s: cannot open file for writing: %s\\n\", ";
1469
generate_string (package_var_name, stream, indent + indent_str.length ());
1470
stream << ", filename);";
1472
stream << indent_str;
1473
stream << " return EXIT_FAILURE;";
1475
stream << indent_str;
1478
stream << indent_str;
1480
stream << indent_str;
1482
generate_string (parser_name, stream, indent + indent_str.length ());
1483
stream << "_dump(outfile, args_info);";
1485
stream << indent_str;
1486
stream << " fclose (outfile);";
1488
stream << indent_str;
1490
stream << indent_str;
1491
stream << " return i;";
1493
stream << indent_str;
1496
stream << indent_str;
1498
stream << indent_str;
1501
stream << indent_str;
1502
generate_string (parser_name, stream, indent + indent_str.length ());
1503
stream << "_free (struct ";
1504
generate_string (args_info, stream, indent + indent_str.length ());
1505
stream << " *args_info)";
1507
stream << indent_str;
1510
stream << indent_str;
1513
generate_string (parser_name, stream, indent + indent_str.length ());
1514
stream << "_release (args_info);";
1517
stream << indent_str;
1520
stream << indent_str;
858
1522
stream << indent_str;
859
1523
if (do_generate_strdup)
861
stream << "/* gengetopt_strdup() */";
863
stream << indent_str;
864
stream << "/* strdup.c replacement of strdup, which is not standard */";
1527
stream << "brief replacement of strdup, which is not standard */";
866
1529
stream << indent_str;
867
1530
stream << "char *";
1529
2192
stream << "\n";
1530
2193
stream << indent_str;
2196
stream << indent_str;
2197
stream << "static char *package_name = 0;";
2199
stream << indent_str;
2201
stream << indent_str;
2202
if (( ! no_options ))
2206
stream << indent_str;
2209
stream << "brief updates an option";
2211
stream << indent_str;
2214
stream << "param field the generic pointer to the field to update";
2216
stream << indent_str;
2219
stream << "param orig_field the pointer to the orig field";
2221
stream << indent_str;
2224
stream << "param field_given the pointer to the number of occurrence of this option";
2226
stream << indent_str;
2229
stream << "param prev_given the pointer to the number of occurrence already seen";
2231
stream << indent_str;
2234
stream << "param value the argument for this option (if null no arg was specified)";
2236
stream << indent_str;
2239
stream << "param possible_values the possible values for this option (if specified)";
2241
stream << indent_str;
2244
stream << "param default_value the default value (in case the option only accepts fixed values)";
2246
stream << indent_str;
2249
stream << "param arg_type the type of this option";
2251
stream << indent_str;
2254
stream << "param check_ambiguity ";
2257
generate_string (parser_name, stream, indent + indent_str.length ());
2258
stream << "_params.check_ambiguity";
2260
stream << indent_str;
2263
stream << "param override ";
2266
generate_string (parser_name, stream, indent + indent_str.length ());
2267
stream << "_params.override";
2269
stream << indent_str;
2272
stream << "param no_free whether to free a possible previous value";
2274
stream << indent_str;
2277
stream << "param multiple_option whether this is a multiple option";
2279
stream << indent_str;
2282
stream << "param long_opt the corresponding long option";
2284
stream << indent_str;
2287
stream << "param short_opt the corresponding short option (or '-' if none)";
2289
stream << indent_str;
2292
stream << "param additional_error possible further error specification";
2294
stream << indent_str;
2297
stream << indent_str;
2300
stream << indent_str;
2301
stream << "int update_arg(void *field, char **orig_field,";
2303
stream << indent_str;
2304
stream << " unsigned int *field_given, unsigned int *prev_given, ";
2306
stream << indent_str;
2307
stream << " char *value, char *possible_values[], const char *default_value,";
2309
stream << indent_str;
2312
generate_string (parser_name, stream, indent + indent_str.length ());
2313
stream << "_arg_type arg_type,";
2316
stream << indent_str;
2317
stream << " int check_ambiguity, int override,";
2319
stream << indent_str;
2320
stream << " int no_free, int multiple_option,";
2322
stream << indent_str;
2323
stream << " const char *long_opt, char short_opt,";
2325
stream << indent_str;
2326
stream << " const char *additional_error)";
2328
stream << indent_str;
2331
stream << indent_str;
2332
stream << " char *stop_char = 0;";
2334
stream << indent_str;
2335
stream << " const char *val = value;";
2337
stream << indent_str;
2338
stream << " int found;";
2340
stream << indent_str;
2343
stream << " char **string_field;";
2345
stream << indent_str;
2348
stream << indent_str;
2349
stream << " stop_char = 0;";
2351
stream << indent_str;
2352
stream << " found = 0;";
2354
stream << indent_str;
2356
stream << indent_str;
2357
stream << " if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given)))";
2359
stream << indent_str;
2362
stream << indent_str;
2363
stream << " if (short_opt != '-')";
2365
stream << indent_str;
2366
stream << " fprintf (stderr, \"%s: `--%s' (`-%c') option given more than once%s\\n\", ";
2368
stream << indent_str;
2369
stream << " package_name, long_opt, short_opt,";
2371
stream << indent_str;
2372
stream << " (additional_error ? additional_error : \"\"));";
2374
stream << indent_str;
2377
stream << indent_str;
2378
stream << " fprintf (stderr, \"%s: `--%s' option given more than once%s\\n\", ";
2380
stream << indent_str;
2381
stream << " package_name, long_opt,";
2383
stream << indent_str;
2384
stream << " (additional_error ? additional_error : \"\"));";
2386
stream << indent_str;
2387
stream << " return 1; /* failure */";
2389
stream << indent_str;
2392
stream << indent_str;
2394
stream << indent_str;
2395
if (check_possible_values)
2397
stream << " if (possible_values && (found = check_possible_values((value ? value : default_value), possible_values)) < 0)";
2399
stream << indent_str;
2402
stream << indent_str;
2403
stream << " if (short_opt != '-')";
2405
stream << indent_str;
2406
stream << " fprintf (stderr, \"%s: %s argument, \\\"%s\\\", for option `--%s' (`-%c')%s\\n\", ";
2408
stream << indent_str;
2409
stream << " package_name, (found == -2) ? \"ambiguous\" : \"invalid\", value, long_opt, short_opt,";
2411
stream << indent_str;
2412
stream << " (additional_error ? additional_error : \"\"));";
2414
stream << indent_str;
2417
stream << indent_str;
2418
stream << " fprintf (stderr, \"%s: %s argument, \\\"%s\\\", for option `--%s'%s\\n\", ";
2420
stream << indent_str;
2421
stream << " package_name, (found == -2) ? \"ambiguous\" : \"invalid\", value, long_opt,";
2423
stream << indent_str;
2424
stream << " (additional_error ? additional_error : \"\"));";
2426
stream << indent_str;
2427
stream << " return 1; /* failure */";
2429
stream << indent_str;
2432
stream << indent_str;
2436
stream << indent_str;
2437
stream << " if (field_given && *field_given && ! override)";
2439
stream << indent_str;
2440
stream << " return 0;";
2442
stream << indent_str;
2443
stream << " if (prev_given)";
2445
stream << indent_str;
2446
stream << " (*prev_given)++;";
2448
stream << indent_str;
2449
stream << " if (field_given)";
2451
stream << indent_str;
2452
stream << " (*field_given)++;";
2454
stream << indent_str;
2455
stream << " if (possible_values)";
2457
stream << indent_str;
2458
stream << " val = possible_values[found];";
2460
stream << indent_str;
2462
stream << indent_str;
2463
stream << " switch(arg_type) {";
2465
stream << indent_str;
2468
stream << " case ARG_FLAG:";
2470
stream << indent_str;
2471
stream << " *((int *)field) = !*((int *)field);";
2473
stream << indent_str;
2474
stream << " break;";
2476
stream << indent_str;
2480
stream << " case ARG_INT:";
2482
stream << indent_str;
2483
stream << " if (val) *((int *)field) = strtol (val, &stop_char, 0);";
2485
stream << indent_str;
2486
stream << " break;";
2488
stream << indent_str;
2492
stream << " case ARG_SHORT:";
2494
stream << indent_str;
2495
stream << " if (val) *((short *)field) = (short)strtol (val, &stop_char, 0);";
2497
stream << indent_str;
2498
stream << " break;";
2500
stream << indent_str;
2504
stream << " case ARG_LONG:";
2506
stream << indent_str;
2507
stream << " if (val) *((long *)field) = (long)strtol (val, &stop_char, 0);";
2509
stream << indent_str;
2510
stream << " break;";
2512
stream << indent_str;
2516
stream << " case ARG_FLOAT:";
2518
stream << indent_str;
2519
stream << " if (val) *((float *)field) = (float)strtod (val, &stop_char);";
2521
stream << indent_str;
2522
stream << " break;";
2524
stream << indent_str;
2528
stream << " case ARG_DOUBLE:";
2530
stream << indent_str;
2531
stream << " if (val) *((double *)field) = strtod (val, &stop_char);";
2533
stream << indent_str;
2534
stream << " break;";
2536
stream << indent_str;
2538
if (has_arg_longdouble)
2540
stream << " case ARG_LONGDOUBLE:";
2542
stream << indent_str;
2543
stream << " if (val) *((long double *)field) = (long double)strtod (val, &stop_char);";
2545
stream << indent_str;
2546
stream << " break;";
2548
stream << indent_str;
2550
if (has_arg_longlong)
2552
stream << " case ARG_LONGLONG:";
2554
stream << indent_str;
2555
stream << "#ifdef HAVE_LONG_LONG";
2557
stream << indent_str;
2558
stream << " if (val) *((long long int*)field) = (long long int) strtol (val, &stop_char, 0);";
2560
stream << indent_str;
2563
stream << indent_str;
2564
stream << " if (val) *((long *)field) = (long)strtol (val, &stop_char, 0);";
2566
stream << indent_str;
2569
stream << indent_str;
2570
stream << " break;";
2572
stream << indent_str;
2576
stream << " case ARG_ENUM:";
2578
stream << indent_str;
2579
stream << " if (val) *((int *)field) = found;";
2581
stream << indent_str;
2582
stream << " break;";
2584
stream << indent_str;
2588
stream << " case ARG_STRING:";
2590
stream << indent_str;
2591
stream << " if (val) {";
2593
stream << indent_str;
2594
stream << " string_field = (char **)field;";
2596
stream << indent_str;
2597
stream << " if (!no_free && *string_field)";
2599
stream << indent_str;
2600
stream << " free (*string_field); /* free previous string */";
2602
stream << indent_str;
2603
stream << " *string_field = gengetopt_strdup (val);";
2605
stream << indent_str;
2608
stream << indent_str;
2609
stream << " break;";
2611
stream << indent_str;
2613
stream << " default:";
2615
stream << indent_str;
2616
stream << " break;";
2618
stream << indent_str;
2621
stream << indent_str;
2623
stream << indent_str;
2624
if (( ( ( ( ( ( has_arg_int || has_arg_short ) || has_arg_long ) || has_arg_float ) || has_arg_double ) || has_arg_longdouble ) || has_arg_longlong ))
2626
stream << " /* check numeric conversion */";
2628
stream << indent_str;
2629
stream << " switch(arg_type) {";
2631
stream << indent_str;
2634
stream << " case ARG_INT:";
2636
stream << indent_str;
2640
stream << " case ARG_SHORT:";
2642
stream << indent_str;
2646
stream << " case ARG_LONG:";
2648
stream << indent_str;
2652
stream << " case ARG_FLOAT:";
2654
stream << indent_str;
2658
stream << " case ARG_DOUBLE:";
2660
stream << indent_str;
2662
if (has_arg_longdouble)
2664
stream << " case ARG_LONGDOUBLE:";
2666
stream << indent_str;
2668
if (has_arg_longlong)
2670
stream << " case ARG_LONGLONG:";
2672
stream << indent_str;
2674
stream << " if (val && !(stop_char && *stop_char == '\\0')) {";
2676
stream << indent_str;
2677
stream << " fprintf(stderr, \"%s: invalid numeric value: %s\\n\", package_name, val);";
2679
stream << indent_str;
2680
stream << " return 1; /* failure */";
2682
stream << indent_str;
2685
stream << indent_str;
2686
stream << " break;";
2688
stream << indent_str;
2689
stream << " default:";
2691
stream << indent_str;
2694
stream << indent_str;
2697
stream << indent_str;
2700
stream << indent_str;
2701
stream << " /* store the original value */";
2703
stream << indent_str;
2704
stream << " switch(arg_type) {";
2706
stream << indent_str;
2707
stream << " case ARG_NO:";
2709
stream << indent_str;
2712
stream << " case ARG_FLAG:";
2714
stream << indent_str;
2716
stream << " break;";
2718
stream << indent_str;
2719
stream << " default:";
2721
stream << indent_str;
2722
stream << " if (value && orig_field) {";
2724
stream << indent_str;
2725
stream << " if (no_free) {";
2727
stream << indent_str;
2728
stream << " *orig_field = value;";
2730
stream << indent_str;
2731
stream << " } else {";
2733
stream << indent_str;
2734
stream << " if (*orig_field)";
2736
stream << indent_str;
2737
stream << " free (*orig_field); /* free previous string */";
2739
stream << indent_str;
2740
stream << " *orig_field = gengetopt_strdup (value);";
2742
stream << indent_str;
2745
stream << indent_str;
2748
stream << indent_str;
2751
stream << indent_str;
2753
stream << indent_str;
2754
stream << " return 0; /* OK */";
2756
stream << indent_str;
2759
stream << indent_str;
2762
stream << indent_str;
2763
if (multiple_token_functions)
2767
stream << indent_str;
2770
stream << "brief store information about a multiple option in a temporary list";
2772
stream << indent_str;
2775
stream << "param list where to (temporarily) store multiple options";
2777
stream << indent_str;
2780
stream << indent_str;
2783
stream << indent_str;
2784
stream << "int update_multiple_arg_temp(struct generic_list **list,";
2786
stream << indent_str;
2787
stream << " unsigned int *prev_given, const char *val,";
2789
stream << indent_str;
2790
stream << " char *possible_values[], const char *default_value,";
2792
stream << indent_str;
2795
generate_string (parser_name, stream, indent + indent_str.length ());
2796
stream << "_arg_type arg_type,";
2799
stream << indent_str;
2800
stream << " const char *long_opt, char short_opt,";
2802
stream << indent_str;
2803
stream << " const char *additional_error)";
2805
stream << indent_str;
2808
stream << indent_str;
2809
stream << " char *multi_token, *multi_next; /* store single arguments */";
2811
stream << indent_str;
2813
stream << indent_str;
2814
stream << " if (arg_type == ARG_NO) {";
2816
stream << indent_str;
2817
stream << " (*prev_given)++;";
2819
stream << indent_str;
2820
stream << " return 0; /* OK */";
2822
stream << indent_str;
2825
stream << indent_str;
2827
stream << indent_str;
2828
stream << " multi_token = get_multiple_arg_token(val);";
2830
stream << indent_str;
2831
stream << " multi_next = get_multiple_arg_token_next (val);";
2833
stream << indent_str;
2835
stream << indent_str;
2836
stream << " while (1)";
2838
stream << indent_str;
2841
stream << indent_str;
2842
stream << " add_node (list);";
2844
stream << indent_str;
2845
stream << " if (update_arg((void *)&((*list)->arg), &((*list)->orig), 0,";
2847
stream << indent_str;
2848
stream << " prev_given, multi_token, possible_values, default_value, ";
2850
stream << indent_str;
2851
stream << " arg_type, 0, 1, 1, 1, long_opt, short_opt, additional_error)) {";
2853
stream << indent_str;
2854
stream << " if (multi_token) free(multi_token);";
2856
stream << indent_str;
2857
stream << " return 1; /* failure */";
2859
stream << indent_str;
2862
stream << indent_str;
2864
stream << indent_str;
2865
stream << " if (multi_next)";
2867
stream << indent_str;
2870
stream << indent_str;
2871
stream << " multi_token = get_multiple_arg_token(multi_next);";
2873
stream << indent_str;
2874
stream << " multi_next = get_multiple_arg_token_next (multi_next);";
2876
stream << indent_str;
2879
stream << indent_str;
2882
stream << indent_str;
2883
stream << " break;";
2885
stream << indent_str;
2888
stream << indent_str;
2890
stream << indent_str;
2891
stream << " return 0; /* OK */";
2893
stream << indent_str;
2896
stream << indent_str;
2898
stream << indent_str;
2901
stream << indent_str;
2904
stream << "brief free the passed list (including possible string argument)";
2906
stream << indent_str;
2909
stream << indent_str;
2912
stream << indent_str;
2913
stream << "void free_list(struct generic_list *list, short string_arg)";
2915
stream << indent_str;
2918
stream << indent_str;
2919
stream << " if (list) {";
2921
stream << indent_str;
2922
stream << " struct generic_list *tmp;";
2924
stream << indent_str;
2925
stream << " while (list)";
2927
stream << indent_str;
2930
stream << indent_str;
2931
stream << " tmp = list;";
2933
stream << indent_str;
2934
stream << " if (string_arg && list->arg.string_arg)";
2936
stream << indent_str;
2937
stream << " free (list->arg.string_arg);";
2939
stream << indent_str;
2940
stream << " if (list->orig)";
2942
stream << indent_str;
2943
stream << " free (list->orig);";
2945
stream << indent_str;
2946
stream << " list = list->next;";
2948
stream << indent_str;
2949
stream << " free (tmp);";
2951
stream << indent_str;
2954
stream << indent_str;
2957
stream << indent_str;
2960
stream << indent_str;
2962
stream << indent_str;
2965
stream << indent_str;
2968
stream << "brief updates a multiple option starting from the passed list";
2970
stream << indent_str;
2973
stream << indent_str;
2976
stream << indent_str;
2977
stream << "void update_multiple_arg(void *field, char ***orig_field,";
2979
stream << indent_str;
2980
stream << " unsigned int field_given, unsigned int prev_given, union generic_value *default_value,";
2982
stream << indent_str;
2985
generate_string (parser_name, stream, indent + indent_str.length ());
2986
stream << "_arg_type arg_type,";
2989
stream << indent_str;
2990
stream << " struct generic_list *list)";
2992
stream << indent_str;
2995
stream << indent_str;
2996
stream << " int i;";
2998
stream << indent_str;
2999
stream << " struct generic_list *tmp;";
3001
stream << indent_str;
3003
stream << indent_str;
3004
stream << " if (prev_given && list) {";
3006
stream << indent_str;
3007
stream << " *orig_field = (char **) realloc (*orig_field, (field_given + prev_given) * sizeof (char *));";
3009
stream << indent_str;
3011
stream << indent_str;
3012
stream << " switch(arg_type) {";
3014
stream << indent_str;
3015
if (( has_arg_int || has_arg_enum ))
3019
stream << " case ARG_INT:";
3021
stream << indent_str;
3025
stream << " case ARG_ENUM:";
3027
stream << indent_str;
3029
stream << " *((int **)field) = (int *)realloc (*((int **)field), (field_given + prev_given) * sizeof (int)); break;";
3031
stream << indent_str;
3035
stream << " case ARG_SHORT:";
3037
stream << indent_str;
3038
stream << " *((short **)field) = (short *)realloc (*((short **)field), (field_given + prev_given) * sizeof (short)); break;";
3040
stream << indent_str;
3044
stream << " case ARG_LONG:";
3046
stream << indent_str;
3047
stream << " *((long **)field) = (long *)realloc (*((long **)field), (field_given + prev_given) * sizeof (long)); break;";
3049
stream << indent_str;
3053
stream << " case ARG_FLOAT:";
3055
stream << indent_str;
3056
stream << " *((float **)field) = (float *)realloc (*((float **)field), (field_given + prev_given) * sizeof (float)); break;";
3058
stream << indent_str;
3062
stream << " case ARG_DOUBLE:";
3064
stream << indent_str;
3065
stream << " *((double **)field) = (double *)realloc (*((double **)field), (field_given + prev_given) * sizeof (double)); break;";
3067
stream << indent_str;
3069
if (has_arg_longdouble)
3071
stream << " case ARG_LONGDOUBLE:";
3073
stream << indent_str;
3074
stream << " *((long double **)field) = (long double *)realloc (*((long double **)field), (field_given + prev_given) * sizeof (long double)); break;";
3076
stream << indent_str;
3078
if (has_arg_longlong)
3080
stream << " case ARG_LONGLONG:";
3082
stream << indent_str;
3083
stream << "#ifdef HAVE_LONG_LONG";
3085
stream << indent_str;
3086
stream << " *((long long int **)field) = (long long int *)realloc (*((long long int **)field), (field_given + prev_given) * sizeof (long long int)); break;";
3088
stream << indent_str;
3091
stream << indent_str;
3092
stream << " *((long **)field) = (long *)realloc (*((long **)field), (field_given + prev_given) * sizeof (long)); break;";
3094
stream << indent_str;
3097
stream << indent_str;
3101
stream << " case ARG_STRING:";
3103
stream << indent_str;
3104
stream << " *((char ***)field) = (char **)realloc (*((char ***)field), (field_given + prev_given) * sizeof (char *)); break;";
3106
stream << indent_str;
3108
stream << " default:";
3110
stream << indent_str;
3111
stream << " break;";
3113
stream << indent_str;
3116
stream << indent_str;
3121
stream << indent_str;
3122
stream << " for (i = (prev_given - 1); i >= 0; --i)";
3124
stream << indent_str;
3127
stream << indent_str;
3128
stream << " tmp = list;";
3130
stream << indent_str;
3135
stream << indent_str;
3136
stream << " switch(arg_type) {";
3138
stream << indent_str;
3141
stream << " case ARG_INT:";
3143
stream << indent_str;
3144
stream << " (*((int **)field))[i + field_given] = tmp->arg.int_arg; break;";
3146
stream << indent_str;
3150
stream << " case ARG_SHORT:";
3152
stream << indent_str;
3153
stream << " (*((short **)field))[i + field_given] = tmp->arg.short_arg; break;";
3155
stream << indent_str;
3159
stream << " case ARG_LONG:";
3161
stream << indent_str;
3162
stream << " (*((long **)field))[i + field_given] = tmp->arg.long_arg; break;";
3164
stream << indent_str;
3168
stream << " case ARG_FLOAT:";
3170
stream << indent_str;
3171
stream << " (*((float **)field))[i + field_given] = tmp->arg.float_arg; break;";
3173
stream << indent_str;
3177
stream << " case ARG_DOUBLE:";
3179
stream << indent_str;
3180
stream << " (*((double **)field))[i + field_given] = tmp->arg.double_arg; break;";
3182
stream << indent_str;
3184
if (has_arg_longdouble)
3186
stream << " case ARG_LONGDOUBLE:";
3188
stream << indent_str;
3189
stream << " (*((long double **)field))[i + field_given] = tmp->arg.longdouble_arg; break;";
3191
stream << indent_str;
3193
if (has_arg_longlong)
3195
stream << " case ARG_LONGLONG:";
3197
stream << indent_str;
3198
stream << "#ifdef HAVE_LONG_LONG";
3200
stream << indent_str;
3201
stream << " (*((long long int **)field))[i + field_given] = tmp->arg.longlong_arg; break;";
3203
stream << indent_str;
3206
stream << indent_str;
3207
stream << " (*((long **)field))[i + field_given] = tmp->arg.longlong_arg; break;";
3209
stream << indent_str;
3212
stream << indent_str;
3216
stream << " case ARG_ENUM:";
3218
stream << indent_str;
3219
stream << " (*((int **)field))[i + field_given] = tmp->arg.int_arg; break;";
3221
stream << indent_str;
3225
stream << " case ARG_STRING:";
3227
stream << indent_str;
3228
stream << " (*((char ***)field))[i + field_given] = tmp->arg.string_arg; break;";
3230
stream << indent_str;
3232
stream << " default:";
3234
stream << indent_str;
3235
stream << " break;";
3237
stream << indent_str;
3240
stream << indent_str;
3241
stream << " (*orig_field) [i + field_given] = list->orig;";
3243
stream << indent_str;
3244
stream << " list = list->next;";
3246
stream << indent_str;
3247
stream << " free (tmp);";
3249
stream << indent_str;
3252
stream << indent_str;
3253
stream << " } else { /* set the default value */";
3255
stream << indent_str;
3256
stream << " if (default_value && ! field_given) {";
3258
stream << indent_str;
3259
stream << " switch(arg_type) {";
3261
stream << indent_str;
3262
if (( has_arg_int || has_arg_enum ))
3266
stream << " case ARG_INT:";
3268
stream << indent_str;
3272
stream << " case ARG_ENUM:";
3274
stream << indent_str;
3276
stream << " if (! *((int **)field)) {";
3278
stream << indent_str;
3279
stream << " *((int **)field) = (int *)malloc (sizeof (int));";
3281
stream << indent_str;
3282
stream << " (*((int **)field))[0] = default_value->int_arg; ";
3284
stream << indent_str;
3287
stream << indent_str;
3288
stream << " break;";
3290
stream << indent_str;
3294
stream << " case ARG_SHORT:";
3296
stream << indent_str;
3297
stream << " if (! *((short **)field)) {";
3299
stream << indent_str;
3300
stream << " *((short **)field) = (short *)malloc (sizeof (short));";
3302
stream << indent_str;
3303
stream << " (*((short **)field))[0] = default_value->short_arg;";
3305
stream << indent_str;
3308
stream << indent_str;
3309
stream << " break;";
3311
stream << indent_str;
3315
stream << " case ARG_LONG:";
3317
stream << indent_str;
3318
stream << " if (! *((long **)field)) {";
3320
stream << indent_str;
3321
stream << " *((long **)field) = (long *)malloc (sizeof (long));";
3323
stream << indent_str;
3324
stream << " (*((long **)field))[0] = default_value->long_arg;";
3326
stream << indent_str;
3329
stream << indent_str;
3330
stream << " break;";
3332
stream << indent_str;
3336
stream << " case ARG_FLOAT:";
3338
stream << indent_str;
3339
stream << " if (! *((float **)field)) {";
3341
stream << indent_str;
3342
stream << " *((float **)field) = (float *)malloc (sizeof (float));";
3344
stream << indent_str;
3345
stream << " (*((float **)field))[0] = default_value->float_arg;";
3347
stream << indent_str;
3350
stream << indent_str;
3351
stream << " break;";
3353
stream << indent_str;
3357
stream << " case ARG_DOUBLE:";
3359
stream << indent_str;
3360
stream << " if (! *((double **)field)) {";
3362
stream << indent_str;
3363
stream << " *((double **)field) = (double *)malloc (sizeof (double));";
3365
stream << indent_str;
3366
stream << " (*((double **)field))[0] = default_value->double_arg;";
3368
stream << indent_str;
3371
stream << indent_str;
3372
stream << " break;";
3374
stream << indent_str;
3376
if (has_arg_longdouble)
3378
stream << " case ARG_LONGDOUBLE:";
3380
stream << indent_str;
3381
stream << " if (! *((long double **)field)) {";
3383
stream << indent_str;
3384
stream << " *((long double **)field) = (long double *)malloc (sizeof (long double));";
3386
stream << indent_str;
3387
stream << " (*((long double **)field))[0] = default_value->longdouble_arg;";
3389
stream << indent_str;
3392
stream << indent_str;
3393
stream << " break;";
3395
stream << indent_str;
3397
if (has_arg_longlong)
3399
stream << " case ARG_LONGLONG:";
3401
stream << indent_str;
3402
stream << "#ifdef HAVE_LONG_LONG";
3404
stream << indent_str;
3405
stream << " if (! *((long long int **)field)) {";
3407
stream << indent_str;
3408
stream << " *((long long int **)field) = (long long int *)malloc (sizeof (long long int));";
3410
stream << indent_str;
3411
stream << " (*((long long int **)field))[0] = default_value->longlong_arg;";
3413
stream << indent_str;
3416
stream << indent_str;
3419
stream << indent_str;
3420
stream << " if (! *((long **)field)) {";
3422
stream << indent_str;
3423
stream << " *((long **)field) = (long *)malloc (sizeof (long));";
3425
stream << indent_str;
3426
stream << " (*((long **)field))[0] = default_value->longlong_arg;";
3428
stream << indent_str;
3431
stream << indent_str;
3434
stream << indent_str;
3435
stream << " break;";
3437
stream << indent_str;
3441
stream << " case ARG_STRING:";
3443
stream << indent_str;
3444
stream << " if (! *((char ***)field)) {";
3446
stream << indent_str;
3447
stream << " *((char ***)field) = (char **)malloc (sizeof (char *));";
3449
stream << indent_str;
3450
stream << " (*((char ***)field))[0] = gengetopt_strdup(default_value->string_arg);";
3452
stream << indent_str;
3455
stream << indent_str;
3456
stream << " break;";
3458
stream << indent_str;
3460
stream << " default: break;";
3462
stream << indent_str;
3465
stream << indent_str;
3466
stream << " if (!(*orig_field)) {";
3468
stream << indent_str;
3469
stream << " *orig_field = (char **) malloc (sizeof (char *));";
3471
stream << indent_str;
3472
stream << " (*orig_field)[0] = NULL;";
3474
stream << indent_str;
3477
stream << indent_str;
3480
stream << indent_str;
3483
stream << indent_str;
3486
stream << indent_str;
3491
stream << indent_str;
3492
stream << "static int check_modes(int given1[], const char *options1[],";
3494
stream << indent_str;
3495
stream << " int given2[], const char *options2[])";
3497
stream << indent_str;
3500
stream << indent_str;
3501
stream << " int i = 0, j = 0, errors = 0;";
3503
stream << indent_str;
3508
stream << indent_str;
3509
stream << " while (given1[i] >= 0) {";
3511
stream << indent_str;
3512
stream << " if (given1[i]) {";
3514
stream << indent_str;
3515
stream << " while (given2[j] >= 0) {";
3517
stream << indent_str;
3518
stream << " if (given2[j]) {";
3520
stream << indent_str;
3521
stream << " ++errors;";
3523
stream << indent_str;
3524
stream << " fprintf(stderr, \"%s: option %s conflicts with option %s\\n\",";
3526
stream << indent_str;
3527
stream << " package_name, options1[i], options2[j]);";
3529
stream << indent_str;
3532
stream << indent_str;
3535
stream << indent_str;
3538
stream << indent_str;
3541
stream << indent_str;
3544
stream << indent_str;
3547
stream << indent_str;
3552
stream << indent_str;
3553
stream << " return errors;";
3555
stream << indent_str;
3558
stream << indent_str;
3561
stream << indent_str;
1532
3562
stream << "int";
1533
3563
stream << "\n";
1534
3564
stream << indent_str;