Revision: 65276
          http://sourceforge.net/p/brlcad/code/65276
Author:   starseeker
Date:     2015-06-12 00:48:30 +0000 (Fri, 12 Jun 2015)
Log Message:
-----------
Implement a suggestion from nreed to reorder args in the argv input array 
rather than requiring the user to allocate and pass in a second argv array.

Modified Paths:
--------------
    brlcad/trunk/include/bu/opt.h
    brlcad/trunk/src/conv/g-obj.c
    brlcad/trunk/src/conv/gcv/gcv.cpp
    brlcad/trunk/src/libbu/opt.c
    brlcad/trunk/src/libbu/tests/opt.c
    brlcad/trunk/src/libged/gdiff.c
    brlcad/trunk/src/libged/tire.c
    brlcad/trunk/src/util/dsp_add_opt.c

Modified: brlcad/trunk/include/bu/opt.h
===================================================================
--- brlcad/trunk/include/bu/opt.h       2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/include/bu/opt.h       2015-06-12 00:48:30 UTC (rev 65276)
@@ -145,10 +145,11 @@
  *
  * -1  - fatal error in parsing.  Program must decide to recover or exit.
  *  0  - all argv options handled.
- *  >0 - some unused argv entries returned in unused array (if provided), 
return int is unused argc count.
+ *  >0 - some unused argv entries returned at the beginning of the argv array.
+ *       returned int is unused argc count.
  *
  */
-BU_EXPORT extern int bu_opt_parse(const char ***unused, size_t sizeof_unused, 
struct bu_vls *msgs, int ac, const char **argv, struct bu_opt_desc *ds);
+BU_EXPORT extern int bu_opt_parse(struct bu_vls *msgs, int ac, const char 
**argv, struct bu_opt_desc *ds);
 
 
 /* Standard option validators - if a custom option argument

Modified: brlcad/trunk/src/conv/g-obj.c
===================================================================
--- brlcad/trunk/src/conv/g-obj.c       2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/conv/g-obj.c       2015-06-12 00:48:30 UTC (rev 65276)
@@ -152,8 +152,8 @@
 {
     int c;
     double percent;
-    const char **extra_args;
     struct bu_vls parse_msgs = BU_VLS_INIT_ZERO;
+    const char *prog_name = argv[0];
 
     bu_setprogname(argv[0]);
     bu_setlinebuf(stderr);
@@ -181,17 +181,15 @@
 
     /* Get command line arguments. */
     ++argv; --argc;
-    extra_args = (const char **)bu_calloc(argc, sizeof(char *), "extra args");
 
-    argc = bu_opt_parse(&extra_args, argc, &parse_msgs, argc, argv, options);
+    argc = bu_opt_parse(&parse_msgs, argc, argv, options);
 
     if (bu_vls_strlen(&parse_msgs) > 0) {
        bu_log("%s\n", bu_vls_cstr(&parse_msgs));
     }
     if (argc < 2 || print_help) {
-       print_usage(argv[0]);
+       print_usage(prog_name);
     }
-    argv = extra_args;
 
     if (!output_file)
        fp = stdout;

Modified: brlcad/trunk/src/conv/gcv/gcv.cpp
===================================================================
--- brlcad/trunk/src/conv/gcv/gcv.cpp   2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/conv/gcv/gcv.cpp   2015-06-12 00:48:30 UTC (rev 65276)
@@ -38,7 +38,6 @@
     int argc = 0;
     char **argv = NULL;
     int ret_argc = 0;
-    const char **non_opts;
     static int tol = 0.0;
     static int w_flag;
     struct bu_opt_desc fg4_opt_desc[3] = {
@@ -51,8 +50,7 @@
     argv = (char **)bu_calloc(strlen(input) + 1, sizeof(char *), "argv array");
     argc = bu_argv_from_string(argv, strlen(input), input);
 
-    non_opts = (const char **)bu_calloc(strlen(args) + 1, sizeof(const char 
*), "non_opts array");
-    ret_argc = bu_opt_parse(&non_opts, strlen(args), NULL, argc, (const char 
**)argv, fg4_opt_desc);
+    ret_argc = bu_opt_parse(NULL, argc, (const char **)argv, fg4_opt_desc);
 
     if (w_flag)        bu_log("FASTGEN 4 warn default names set\n");
     bu_log("FASTGEN 4 tol: %d\n", tol);
@@ -60,9 +58,9 @@
     if (ret_argc) {
        bu_log("Unknown args: ");
        for (i = 0; i < ret_argc - 1; i++) {
-           bu_log("%s, ", non_opts[i]);
+           bu_log("%s, ", argv[i]);
        }
-       bu_log("%s\n", non_opts[ret_argc - 1]);
+       bu_log("%s\n", argv[ret_argc - 1]);
     }
 
     bu_free(input, "free array");
@@ -75,7 +73,6 @@
     int argc = 0;
     char **argv = NULL;
     int ret_argc = 0;
-    const char **non_opts;
     static int tol = 0.0;
     static int units = 0;
     struct bu_opt_desc stl_opt_desc[3] = {
@@ -88,8 +85,7 @@
     argv = (char **)bu_calloc(strlen(input) + 1, sizeof(char *), "argv array");
     argc = bu_argv_from_string(argv, strlen(input), input);
 
-    non_opts = (const char **)bu_calloc(strlen(args) + 1, sizeof(const char 
*), "non_opts array");
-    ret_argc = bu_opt_parse(&non_opts, strlen(args), NULL, argc, (const char 
**)argv, stl_opt_desc);
+    ret_argc = bu_opt_parse(NULL, argc, (const char **)argv, stl_opt_desc);
 
     bu_log("STL tol: %d\n", tol);
     bu_log("STL units: %d\n", units);
@@ -97,9 +93,9 @@
     if (ret_argc) {
        bu_log("Unknown args: ");
        for (i = 0; i < ret_argc - 1; i++) {
-           bu_log("%s, ", non_opts[i]);
+           bu_log("%s, ", argv[i]);
        }
-       bu_log("%s\n", non_opts[ret_argc - 1]);
+       bu_log("%s\n", argv[ret_argc - 1]);
     }
 
     bu_free(input, "free array");
@@ -324,7 +320,7 @@
 #define gcv_outopt_str "Options to apply only while preparing output file.  
Quotes around the opts are always necessary, but brackets are only necessary 
when supplying a single option without arguments that would otherwise be 
interpreted as an argv entry by the shell, even with quotes.  Brackets will 
never hurt, and for robustness when scripting they should always be used."
 
 int
-main(int ac, char **av)
+main(int ac, const char **av)
 {
     size_t i;
     int fmt = 0;
@@ -352,7 +348,6 @@
     struct bu_vls output_opts = BU_VLS_INIT_ZERO;
     struct bu_vls parse_msgs = BU_VLS_INIT_ZERO;
     int uac = 0;
-    const char **uav = (const char **)bu_calloc(ac, sizeof(char *), "unknown 
results");
 
     struct bu_opt_desc gcv_opt_desc[9] = {
        {"h", "help",             0, 1, &gcv_help,    (void *)&hs,            
"format",     gcv_help_str,                 },
@@ -379,7 +374,7 @@
        goto cleanup;
     }
 
-    uac = bu_opt_parse(&uav, ac, &parse_msgs, ac, (const char **)av, 
gcv_opt_desc);
+    uac = bu_opt_parse(&parse_msgs, ac, av, gcv_opt_desc);
 
     /* First, see if help was supplied */
     if (hs.flag) {
@@ -433,20 +428,20 @@
      * be the last two arguments supplied */
     if (uac > 0 && !(skip_in && skip_out)) {
        if (skip_in && !skip_out) {
-           bu_vls_sprintf(&out_path_raw, "%s", uav[uac - 1]);
+           bu_vls_sprintf(&out_path_raw, "%s", av[uac - 1]);
            uac--;
        }
        if (!skip_in && skip_out) {
-           bu_vls_sprintf(&in_path_raw, "%s", uav[uac - 1]);
+           bu_vls_sprintf(&in_path_raw, "%s", av[uac - 1]);
            uac--;
        }
        if (!skip_in && !skip_out) {
            if (uac > 1) {
-               bu_vls_sprintf(&in_path_raw, "%s", uav[uac - 2]);
-               bu_vls_sprintf(&out_path_raw, "%s", uav[uac - 1]);
+               bu_vls_sprintf(&in_path_raw, "%s", av[uac - 2]);
+               bu_vls_sprintf(&out_path_raw, "%s", av[uac - 1]);
                uac = uac -2;
            } else {
-               bu_vls_sprintf(&in_path_raw, "%s", uav[uac - 1]);
+               bu_vls_sprintf(&in_path_raw, "%s", av[uac - 1]);
                uac--;
            }
        }
@@ -461,8 +456,8 @@
                bu_vls_printf(&input_opts, " ");
                bu_vls_printf(&output_opts, " ");
            }
-           bu_vls_printf(&input_opts, "%s", uav[i]);
-           bu_vls_printf(&output_opts, "%s", uav[i]);
+           bu_vls_printf(&input_opts, "%s", av[i]);
+           bu_vls_printf(&output_opts, "%s", av[i]);
        }
        if (bu_vls_strlen(&input_opts) > 0) bu_log("Unknown options (input): 
%s\n", bu_vls_addr(&input_opts));
        if (bu_vls_strlen(&output_opts) > 0) bu_log("Unknown options (output): 
%s\n", bu_vls_addr(&output_opts));

Modified: brlcad/trunk/src/libbu/opt.c
===================================================================
--- brlcad/trunk/src/libbu/opt.c        2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/libbu/opt.c        2015-06-12 00:48:30 UTC (rev 65276)
@@ -333,11 +333,12 @@
 
 
 int
-bu_opt_parse(const char ***unused, size_t sizeof_unused, struct bu_vls *msgs, 
int argc, const char **argv, struct bu_opt_desc *ds)
+bu_opt_parse(struct bu_vls *msgs, int argc, const char **argv, struct 
bu_opt_desc *ds)
 {
     int i = 0;
     int offset = 0;
     int ret_argc = 0;
+    struct bu_ptbl known_args = BU_PTBL_INIT_ZERO;
     struct bu_ptbl unknown_args = BU_PTBL_INIT_ZERO;
     if (!argv || !ds) return -1;
 
@@ -398,6 +399,7 @@
        if (eq_arg) arg_cnt = 1;
 
        /* handled the option - any remaining processing is on args, if any*/
+       bu_ptbl_ins(&known_args, (long *)argv[i]);
        i = i + 1;
 
        /* If we already got an arg from the equals mechanism and we aren't
@@ -448,6 +450,9 @@
                            continue;
                        }
                    }
+                   for (k = (int)i; k < (int)(i + arg_offset - arg_cnt); k++) {
+                       bu_ptbl_ins(&known_args, (long *)argv[k]);
+                   }
                    i = i + arg_offset - arg_cnt;
                } else {
                    if (desc->arg_cnt_min == 0) {
@@ -459,13 +464,27 @@
                }
                bu_free(g_argv, "free greedy argv");
            } else {
-               while (arg_cnt < desc->arg_cnt_max && i < argc && 
!can_be_opt(argv[i])) {
-                   i++;
-                   arg_cnt++;
-               }
-               if (arg_cnt < desc->arg_cnt_min) {
-                   if (msgs) bu_vls_printf(msgs, "Option %s requires at least 
%d arguments but only %d were found - halting.\n", argv[i-1], 
desc->arg_cnt_min, arg_cnt);
+               if (desc->arg_cnt_min > 0) {
+                   if (msgs) {
+                       if (desc->arg_cnt_min == 1) {
+                           if (desc->longopt && strlen(desc->longopt) > 0) {
+                               bu_vls_printf(msgs, "Option %s found and 
requires at least one argument, but no arg processing function was defined - 
halting.\n", desc->longopt);
+                           } else {
+                               bu_vls_printf(msgs, "Option %s found and 
requires at least one argument, but no arg processing function was defined - 
halting.\n", desc->shortopt);
+                           }
+                       } else {
+                           if (desc->longopt && strlen(desc->longopt) > 0) {
+                               bu_vls_printf(msgs, "Option %s found and 
requires at least %d arguments, but no arg processing function was defined - 
halting.\n", desc->longopt, desc->arg_cnt_min);
+                           } else {
+                               bu_vls_printf(msgs, "Option %s found and 
requires at least %d arguments, but no arg processing function was defined - 
halting.\n", desc->shortopt, desc->arg_cnt_min);
+                           }
+                       }
+                   }
                    return -1;
+               } else {
+                   /* No desc->arg_process and no minimum arg count - handle 
as a flag */
+                   int *flag_var = (int *)desc->set_var;
+                   if (flag_var) (*flag_var) = 1;
                }
            }
        } else {
@@ -475,18 +494,22 @@
        }
     }
 
-    /* Copy as many of the unknown args as we can fit into the provided argv 
array.
-     * Program must check return value to see if any were lost due to the 
provided
-     * array being too small. */
+    /* Rearrange argv so the unused options are ordered at the front of the 
array. */
     ret_argc = BU_PTBL_LEN(&unknown_args);
-    if (ret_argc > 0 && sizeof_unused > 0 && unused) {
+    if (ret_argc > 0) {
        int avc = 0;
-       int max_avc_cnt = (BU_PTBL_LEN(&unknown_args) < sizeof_unused) ? 
BU_PTBL_LEN(&unknown_args) : sizeof_unused;
-       for (avc = 0; avc < max_avc_cnt; avc++) {
-           (*unused)[avc] = (const char *)BU_PTBL_GET(&unknown_args, avc);
+       int akc = BU_PTBL_LEN(&known_args);
+       for (avc = 0; avc < ret_argc; avc++) {
+           argv[avc] = (const char *)BU_PTBL_GET(&unknown_args, avc);
        }
+       /* Put the option argv pointers at the end of the array, in case they
+        * are still needed for memory freeing by the caller */
+       for (avc = ret_argc; avc < akc + ret_argc; avc++) {
+           argv[avc] = (const char *)BU_PTBL_GET(&unknown_args, avc);
+       }
     }
     bu_ptbl_free(&unknown_args);
+    bu_ptbl_free(&known_args);
 
     return ret_argc;
 }

Modified: brlcad/trunk/src/libbu/tests/opt.c
===================================================================
--- brlcad/trunk/src/libbu/tests/opt.c  2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/libbu/tests/opt.c  2015-06-12 00:48:30 UTC (rev 65276)
@@ -120,7 +120,7 @@
        bu_vls_printf(&parse_msgs, "\nError - expected value \"%d/%d/%d\" and 
got value %.0f/%.0f/%.0f\n", _r, _g, _b, _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
        val_ok = 0; \
     } else { \
-       bu_vls_printf(&parse_msgs, "  \nGot expected value: %s == 
%.0f/%.0f/%.0f)\n", _name,  _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
+       bu_vls_printf(&parse_msgs, "  \nGot expected value: %s == 
%.0f/%.0f/%.0f\n", _name,  _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
     } \
 }
 
@@ -133,7 +133,7 @@
        bu_vls_printf(&parse_msgs, "\nError - expected value \"%d/%d/%d\" and 
got value %.0f/%.0f/%.0f\n", _r, _g, _b, _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
        val_ok = 0; \
     } else { \
-       bu_vls_printf(&parse_msgs, "  \nGot expected value: %s == 
%.0f/%.0f/%.0f)\n", _name,  _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
+       bu_vls_printf(&parse_msgs, "  \nGot expected value: %s == 
%.0f/%.0f/%.0f\n", _name,  _color.buc_rgb[0], _color.buc_rgb[1], 
_color.buc_rgb[2]); \
     }} \
 }
 
@@ -177,31 +177,29 @@
     int ret = -1;
     int containers = 6;
     const char **av;
-    const char **unknown;
     struct bu_vls parse_msgs = BU_VLS_INIT_ZERO;
 
     av = (const char **)bu_calloc(containers, sizeof(char *), "Input array");
-    unknown = (const char **)bu_calloc(containers, sizeof(char *), "unknown 
results");
 
     if (cgy[0] == 'v') {
        switch (test_num) {
            /* Verbosity option tests */
            case 0:
-               ret = bu_opt_parse(&unknown, 0, &parse_msgs, 0, NULL, d);
+               ret = bu_opt_parse(&parse_msgs, 0, NULL, d);
                ret = (ret == -1) ? 0 : -1;
                break;
            case 1:
                ac = 1;
                av[0] = "-v";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 2:
                ac = 1;
                av[0] = "-v1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 3:
@@ -209,14 +207,14 @@
                av[0] = "-v";
                av[1] = "1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 4:
                ac = 1;
                av[0] = "-v=1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 5:
@@ -224,14 +222,14 @@
                av[0] = "--v";
                av[1] = "1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 6:
                ac = 1;
                av[0] = "--v=1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 7:
@@ -239,7 +237,7 @@
                av[0] = "-v";
                av[1] = "2";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 2);
                break;
            case 8:
@@ -247,7 +245,7 @@
                av[0] = "-v";
                av[1] = "4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("verbosity", "4 > 3");
                break;
            case 9:
@@ -255,7 +253,7 @@
                av[0] = "--verb";
                av[1] = "2";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 2);
                break;
            case 10:
@@ -263,35 +261,35 @@
                av[0] = "--verb";
                av[1] = "4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("verbosity", "4 > 3");
                break;
            case 11:
                ac = 1;
                av[0] = "--verb=2";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 2);
                break;
            case 12:
                ac = 1;
                av[0] = "--verb=4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("verbosity", "4 > 3");
                break;
            case 13:
                ac = 1;
                av[0] = "--v";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            case 14:
                ac = 1;
                av[0] = "--verb";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("verbosity", verbosity, 1);
                break;
            default:
@@ -306,35 +304,35 @@
                ac = 1;
                av[0] = "-h";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("print_help", print_help, 1);
                break;
            case 2:
                ac = 1;
                av[0] = "-?";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("print_help", print_help, 1);
                break;
            case 3:
                ac = 1;
                av[0] = "--help";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("print_help", print_help, 1);
                break;
            case 4:
                ac = 1;
                av[0] = "--help=4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("print_help", "extra arg");
                break;
            case 5:
                ac = 1;
                av[0] = "-?4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("print_help", "extra arg");
                break;
            case 6:
@@ -342,21 +340,21 @@
                av[0] = "-?";
                av[1] = "4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT_UNKNOWN("print_help", print_help, 1);
                break;
            case 7:
                ac = 1;
                av[0] = "-?=4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("print_help", "extra arg");
                break;
            case 8:
                ac = 1;
                av[0] = "--?4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE_INT_UNKNOWN("print_help", print_help, 1);
                break;
            case 9:
@@ -364,14 +362,14 @@
                av[0] = "--?";
                av[1] = "4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT_UNKNOWN("print_help", print_help, 1);
                break;
            case 10:
                ac = 1;
                av[0] = "--?=4";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("print_help", "extra arg");
                break;
            default:
@@ -387,7 +385,7 @@
                av[0] = "-b";
                av[1] = "true";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("bool", b, 1);
                break;
            case 2:
@@ -395,7 +393,7 @@
                av[0] = "-b";
                av[1] = "false";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("bool", b, 0);
                break;
            case 3:
@@ -403,7 +401,7 @@
                av[0] = "--bool";
                av[1] = "1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("bool", b, 1);
                break;
            case 4:
@@ -411,7 +409,7 @@
                av[0] = "--bool";
                av[1] = "0";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("bool", b, 0);
                break;
            default:
@@ -426,7 +424,7 @@
                ac = 1;
                av[0] = "-s";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("string", "missing argument");
                break;
            case 2:
@@ -434,7 +432,7 @@
                av[0] = "-s";
                av[1] = "test_str";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_STRING("string", str, "test_str");
                break;
            default:
@@ -449,7 +447,7 @@
                ac = 1;
                av[0] = "-i";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("int_num", "missing arg");
                break;
            case 2:
@@ -457,7 +455,7 @@
                av[0] = "-i";
                av[1] = "-f";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("int_num", "invalid arg");
                break;
            case 3:
@@ -465,7 +463,7 @@
                av[0] = "-i";
                av[1] = "1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("int_num", i, 1);
                break;
            case 4:
@@ -473,7 +471,7 @@
                av[0] = "-i";
                av[1] = "-1";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_INT("int_num", i, -1);
                break;
            case 5:
@@ -481,7 +479,7 @@
                av[0] = "-i";
                av[1] = "214748364700";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_FAILURE("int_num", "number too large for int container");
                break;
 
@@ -500,7 +498,7 @@
                    av[0] = "-l";
                    av[1] = "214748364800";
                    set_msg_str(&parse_msgs, ac, av);
-                   ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, 
av, d);
+                   ret = bu_opt_parse(&parse_msgs, ac, av, d);
                    EXPECT_SUCCESS_INT("long_num", l, 214748364800);
                    break;
                case 2:
@@ -508,7 +506,7 @@
                    av[0] = "-l";
                    av[1] = "-214748364800";
                    set_msg_str(&parse_msgs, ac, av);
-                   ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, 
av, d);
+                   ret = bu_opt_parse(&parse_msgs, ac, av, d);
                    EXPECT_SUCCESS_INT("long_num", l, -214748364800);
                    break;
                default:
@@ -523,7 +521,7 @@
                    av[0] = "-l";
                    av[1] = "21474836";
                    set_msg_str(&parse_msgs, ac, av);
-                   ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, 
av, d);
+                   ret = bu_opt_parse(&parse_msgs, ac, av, d);
                    EXPECT_SUCCESS_INT("long_num", l, 21474836);
                    break;
                case 2:
@@ -531,7 +529,7 @@
                    av[0] = "-l";
                    av[1] = "-21474836";
                    set_msg_str(&parse_msgs, ac, av);
-                   ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, 
av, d);
+                   ret = bu_opt_parse(&parse_msgs, ac, av, d);
                    EXPECT_SUCCESS_INT("long_num", l, -21474836);
                    break;
                default:
@@ -549,7 +547,7 @@
                av[0] = "-f";
                av[1] = "1.234";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_FLOAT("float_num", f, 1.234);
                break;
            case 2:
@@ -557,7 +555,7 @@
                av[0] = "-f";
                av[1] = "-1.234";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_FLOAT("float_num", f, -1.234);
                break;
            case 3:
@@ -565,7 +563,7 @@
                av[0] = "-f";
                av[1] = "-3.0e-3";
                set_msg_str(&parse_msgs, ac, av);
-               ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, 
d);
+               ret = bu_opt_parse(&parse_msgs, ac, av, d);
                EXPECT_SUCCESS_FLOAT("float_num", f, -0.003);
                break;
            default:
@@ -578,9 +576,9 @@
        int u = 0;
        bu_vls_printf(&parse_msgs, "\nUnknown args: ");
        for (u = 0; u < ret - 1; u++) {
-           bu_vls_printf(&parse_msgs, "%s, ", unknown[u]);
+           bu_vls_printf(&parse_msgs, "%s, ", av[u]);
        }
-       bu_vls_printf(&parse_msgs, "%s\n", unknown[ret - 1]);
+       bu_vls_printf(&parse_msgs, "%s\n", av[ret - 1]);
     }
 
     ret = (!val_ok) ? -1 : 0;
@@ -590,7 +588,6 @@
     }
     bu_vls_free(&parse_msgs);
     bu_free(av, "free av");
-    bu_free(unknown, "free av");
     return ret;
 }
 
@@ -655,7 +652,6 @@
     int containers = 7;
     int ac = 0;
     const char **av;
-    const char **unknown;
     struct bu_vls parse_msgs = BU_VLS_INIT_ZERO;
 
     struct bu_opt_desc d[3];
@@ -664,11 +660,10 @@
     BU_OPT_NULL(d[2]);
 
     av = (const char **)bu_calloc(containers, sizeof(char *), "Input array");
-    unknown = (const char **)bu_calloc(containers, sizeof(char *), "unknown 
results");
 
     switch (test_num) {
        case 0:
-           ret = bu_opt_parse(&unknown, 0, &parse_msgs, 0, NULL, d);
+           ret = bu_opt_parse(&parse_msgs, 0, NULL, d);
            ret = (ret == -1) ? 0 : -1;
            break;
        case 1:
@@ -676,7 +671,7 @@
            av[0] = "-C";
            av[1] = "200/10/30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 2:
@@ -686,7 +681,7 @@
            av[2] = "10";
            av[3] = "30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 3:
@@ -696,7 +691,7 @@
            av[2] = "50";
            av[3] = "100";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR_UNKNOWN("color", color, 200, 10, 30);
            break;
        case 4:
@@ -708,7 +703,7 @@
            av[4] = "50";
            av[5] = "100";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR_UNKNOWN("color", color, 200, 10, 30);
            break;
        case 5:
@@ -716,7 +711,7 @@
            av[0] = "--color";
            av[1] = "200/10/30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 6:
@@ -726,7 +721,7 @@
            av[2] = "10";
            av[3] = "30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 7:
@@ -736,7 +731,7 @@
            av[2] = "50";
            av[3] = "100";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR_UNKNOWN("color", color, 200, 10, 30);
            break;
        case 8:
@@ -748,21 +743,21 @@
            av[4] = "50";
            av[5] = "100";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR_UNKNOWN("color", color, 200, 10, 30);
            break;
        case 9:
            ac = 1;
            av[0] = "-C200/10/30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 10:
            ac = 1;
            av[0] = "-C=200/10/30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 11:
@@ -771,7 +766,7 @@
            av[1] = "10";
            av[2] = "30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 12:
@@ -780,21 +775,21 @@
            av[1] = "10";
            av[2] = "30";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_SUCCESS_COLOR("color", color, 200, 10, 30);
            break;
        case 13:
            ac = 1;
            av[0] = "-C";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_FAILURE("color", "missing argument");
            break;
        case 14:
            ac = 1;
            av[0] = "--color";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_FAILURE("color", "missing argument");
            break;
        case 15:
@@ -805,7 +800,7 @@
            av[3] = "30";
            av[4] = "50";
            set_msg_str(&parse_msgs, ac, av);
-           ret = bu_opt_parse(&unknown, containers, &parse_msgs, ac, av, d);
+           ret = bu_opt_parse(&parse_msgs, ac, av, d);
            EXPECT_FAILURE("color", "invalid argument");
            break;
 
@@ -815,9 +810,9 @@
        int u = 0;
        bu_vls_printf(&parse_msgs, "\nUnknown args: ");
        for (u = 0; u < ret - 1; u++) {
-           bu_vls_printf(&parse_msgs, "%s, ", unknown[u]);
+           bu_vls_printf(&parse_msgs, "%s, ", av[u]);
        }
-       bu_vls_printf(&parse_msgs, "%s\n", unknown[ret - 1]);
+       bu_vls_printf(&parse_msgs, "%s\n", av[ret - 1]);
     }
 
     ret = (!val_ok) ? -1 : 0;
@@ -827,7 +822,6 @@
     }
     bu_vls_free(&parse_msgs);
     bu_free(av, "free av");
-    bu_free(unknown, "free av");
     return ret;
 }
 
@@ -860,7 +854,7 @@
 
     switch (desc_num) {
        case 0:
-           ret = bu_opt_parse(NULL, 0, NULL, 0, NULL, NULL);
+           ret = bu_opt_parse(NULL, 0, NULL, NULL);
        case 1:
            ret = desc_1(cgy, test_num);
            break;

Modified: brlcad/trunk/src/libged/gdiff.c
===================================================================
--- brlcad/trunk/src/libged/gdiff.c     2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/libged/gdiff.c     2015-06-12 00:48:30 UTC (rev 65276)
@@ -57,7 +57,6 @@
     const char *right_obj;
     fastf_t len_tol = BN_TOL_DIST;
     int ret_ac = 0;
-    const char **unknown;
 
     struct bu_opt_desc d[6];
     BU_OPT(d[0], "t", "tol", 1, 1, &bu_opt_fastf_t, (void *)&len_tol, "#", 
"Tolerance")
@@ -70,19 +69,17 @@
     GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
     GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
 
-    unknown = (const char **)bu_calloc(argc, sizeof(char *), "non-option argv 
array");
-    ret_ac = bu_opt_parse(&unknown, argc, NULL, argc-1, argv+1, d);
+    ret_ac = bu_opt_parse(NULL, argc-1, argv+1, d);
 
     /* initialize result */
     bu_vls_trunc(gedp->ged_result_str, 0);
 
     if (ret_ac != 2) {
        bu_vls_printf(gedp->ged_result_str, "Usage: %s", gdiff_usage());
-       bu_free((char *)unknown, "free unknown args container");
        return GED_ERROR;
     } else {
-       left_obj = unknown[0];
-       right_obj = unknown[1];
+       left_obj = argv[0];
+       right_obj = argv[1];
     }
 
     tol.dist = len_tol;
@@ -219,7 +216,6 @@
        analyze_raydiff_results_free(results);
     }
 
-    bu_free((char *)unknown, "free unknown args container");
     return GED_OK;
 }
 

Modified: brlcad/trunk/src/libged/tire.c
===================================================================
--- brlcad/trunk/src/libged/tire.c      2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/libged/tire.c      2015-06-12 00:48:30 UTC (rev 65276)
@@ -1851,7 +1851,7 @@
     fastf_t tread_depth_float = tread_depth/32.0;
     int print_help = 0;
     int ret_ac = 0;
-    const char **unknown;
+    const char *cmd_name = argv[0];
 
     struct bu_opt_desc d[17];
     BU_OPT(d[0],  "h", "help",                0, 0, NULL,             (void 
*)&print_help,     "",           "Print help and exit");
@@ -1875,20 +1875,20 @@
     GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
     GED_CHECK_READ_ONLY(gedp, GED_ERROR);
 
-    unknown = (const char **)bu_calloc(argc, sizeof(char *), "non-option argv 
array");
-    ret_ac = bu_opt_parse(&unknown, argc, &str, argc-1, argv+1, d);
+    /* Skip first arg */
+    argv++; argc--;
+
+    ret_ac = bu_opt_parse(&str, argc-1, argv+1, d);
     if (ret_ac < 0) {
        bu_vls_printf(gedp->ged_result_str, "%s\n", bu_vls_addr(&str));
        bu_vls_free(&name);
        bu_vls_free(&str);
-       bu_free((char *)unknown, "free unknown args array");
        return GED_ERROR;
     }
     if (print_help) {
-       _tire_show_help(gedp, argv[0], d);
+       _tire_show_help(gedp, cmd_name, d);
        bu_vls_free(&name);
        bu_vls_free(&str);
-       bu_free((char *)unknown, "free unknown args array");
        return GED_ERROR;
     }
 
@@ -1906,7 +1906,7 @@
      * overridden by the last argument on command line*/
     if (bu_vls_strlen(&name) == 0) {
        if (ret_ac > 0) {
-           bu_vls_printf(&name, "%s", unknown[0]);
+           bu_vls_printf(&name, "%s", argv[0]);
            ret_ac--;
        } else {
            bu_vls_printf(&name,"tire-%d-%dR%d", (int)isoarray[0], 
(int)isoarray[1], (int)isoarray[2]);
@@ -1917,7 +1917,6 @@
        bu_vls_sprintf(gedp->ged_result_str, "unknown args supplied.\n");
        bu_vls_free(&name);
        bu_vls_free(&str);
-       bu_free((char *)unknown, "free unknown args array");
        return GED_ERROR;
     }
 
@@ -1925,7 +1924,6 @@
        bu_vls_sprintf(gedp->ged_result_str, "%s already exists.\n", 
bu_vls_addr(&name));
        bu_vls_free(&name);
        bu_vls_free(&str);
-       bu_free((char *)unknown, "free unknown args array");
        return GED_ERROR;
     }
 
@@ -2009,7 +2007,6 @@
     bu_vls_free(&str);
     bu_vls_free(&name);
     bu_vls_free(&dimen);
-    bu_free((char *)unknown, "free unknown args array");
 
     return GED_OK;
 }

Modified: brlcad/trunk/src/util/dsp_add_opt.c
===================================================================
--- brlcad/trunk/src/util/dsp_add_opt.c 2015-06-11 23:12:56 UTC (rev 65275)
+++ brlcad/trunk/src/util/dsp_add_opt.c 2015-06-12 00:48:30 UTC (rev 65276)
@@ -153,7 +153,6 @@
     const char *f1, *f2;
     static int print_help = 0;
     int non_opt_argc = 0;
-    const char **non_opts = (const char **)bu_calloc(4, sizeof(char *), "extra 
args");
 
     static const char usage[] = "Usage: dsp_add [opts] dsp_1 dsp_2 > dsp_3\n";
     struct bu_opt_desc dsp_opt_desc[3] = {
@@ -170,32 +169,29 @@
     }
 
     if (!print_help)
-       non_opt_argc = bu_opt_parse(&non_opts, 4, NULL, ac, (const char **)av, 
dsp_opt_desc);
+       non_opt_argc = bu_opt_parse(NULL, ac, (const char **)av, dsp_opt_desc);
 
     if (print_help || non_opt_argc < 2) {
        const char *help = bu_opt_describe(dsp_opt_desc, NULL);
        bu_log(usage);
        bu_log("Options:\n%s\n", help);
        bu_free((char *)help, "help str");
-       bu_free(non_opts, "free non_opts array");
        bu_exit (1, NULL);
     }
 
     /* Open the files */
-    f1 = non_opts[0];
-    f2 = non_opts[1];
+    f1 = av[0];
+    f2 = av[1];
 
     in1 = fopen(f1, "r");
     if (!in1) {
        perror(f1);
-       bu_free(non_opts, "free non_opts array");
        return -1;
     }
 
     if (fstat(fileno(in1), &sb)) {
        perror(f1);
        fclose(in1);
-       bu_free(non_opts, "free non_opts array");
        return -1;
     }
 
@@ -206,7 +202,6 @@
     if (!in2) {
        perror(f2);
        fclose(in1);
-       bu_free(non_opts, "free non_opts array");
        return -1;
     }
 
@@ -214,14 +209,12 @@
        perror(f2);
        fclose(in1);
        fclose(in2);
-       bu_free(non_opts, "free non_opts array");
        return -1;
     }
 
     if ((size_t)sb.st_size != count) {
        fclose(in1);
        fclose(in2);
-       bu_free(non_opts, "free non_opts array");
        bu_exit(EXIT_FAILURE, "**** ERROR **** file size mis-match\n");
     }
 
@@ -266,12 +259,9 @@
 
     if (fwrite(buf1, sizeof(short), count, stdout) != count) {
        bu_log("Error writing data\n");
-       bu_free(non_opts, "free non_opts array");
        return -1;
     }
 
-    bu_free(non_opts, "free non_opts array");
-
     return 0;
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to