"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
before changing it!
- Copyright Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
+ Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97
Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
This code was heavily modified for GNUnet.
-Copyright Copyright (C) 2006, 2017 Christian Grothoff
+Copyright (C) 2006, 2017 Christian Grothoff
*/
/**
* @param argc number of arguments
* @param argv actual arguments
* @return index into argv with first non-option
- * argument, or -1 on error
+ * argument, or #GNUNET_SYSERR on error
*/
int
GNUNET_GETOPT_run (const char *binaryOptions,
int spos;
int cont;
int c;
+ uint8_t *seen;
GNUNET_assert (argc > 0);
GNoptind = 0;
long_options = GNUNET_new_array (count + 1,
struct GNoption);
+ seen = GNUNET_new_array (count,
+ uint8_t);
shorts = GNUNET_malloc (count * 2 + 1);
spos = 0;
for (unsigned i = 0; i < count; i++)
allOptions[i].scls,
allOptions[i].name,
GNoptarg);
+ seen[i] = 1;
break;
}
}
GNUNET_free (shorts);
GNUNET_free (long_options);
+ if (GNUNET_YES == cont)
+ {
+ for (count = 0; NULL != allOptions[count].name; count++)
+ if ( (0 == seen[count]) &&
+ (allOptions[count].option_mandatory) )
+ {
+ FPRINTF (stderr,
+ _("Missing mandatory option `%s'.\n"),
+ allOptions[count].name);
+ cont = GNUNET_SYSERR;
+ }
+ }
+ GNUNET_free (seen);
+
/* call cleaners, if available */
- for (count = 0; NULL != allOptions[count].name; count++)
- if (NULL != allOptions[count].cleaner)
- allOptions[count].cleaner (allOptions[count].scls);
+ for (unsigned int i = 0; NULL != allOptions[i].name; i++)
+ if (NULL != allOptions[i].cleaner)
+ allOptions[i].cleaner (allOptions[i].scls);
if (GNUNET_OK != cont)
return cont;