+2012-12-10 Gustavo Sverzut Barbieri (k-s)
+
+ * Added ECORE_GETOPT_ACTION_BREAK to force breaking out of argument
+ parsing logic (will behabe same as GNU's "--", useful for xterm -e)
+
2012-12-07 Cedric Bail
* Don't leak fd on exec.
- Add window profile support.
* ecore_evas_buffer:
- Add window profile support.
+ * ecore_getopt: add ECORE_GETOPT_ACTION_BREAK
Deprecations:
* ecore_x:
ECORE_GETOPT_ACTION_HELP,
ECORE_GETOPT_ACTION_VERSION,
ECORE_GETOPT_ACTION_COPYRIGHT,
- ECORE_GETOPT_ACTION_LICENSE
+ ECORE_GETOPT_ACTION_LICENSE,
+ ECORE_GETOPT_ACTION_BREAK
} Ecore_Getopt_Action;
typedef enum {
ECORE_GETOPT_ACTION_LICENSE, \
{.dummy = NULL}}
+#define ECORE_GETOPT_BREAK(shortname, longname) \
+ {shortname, longname, "stop parsing options.", NULL, \
+ ECORE_GETOPT_ACTION_BREAK, \
+ {.dummy = NULL}}
+
+#define ECORE_GETOPT_BREAK_STR(shortname, longname, help) \
+ {shortname, longname, help, NULL, \
+ ECORE_GETOPT_ACTION_BREAK, \
+ {.dummy = NULL}}
+
#define ECORE_GETOPT_SENTINEL {0, NULL, NULL, NULL, 0, {.dummy = NULL}}
#define ECORE_GETOPT_VALUE_STR(val) {.strp = &(val)}
char **argv)
{
char **nonargs;
- int src, dst, used, base;
+ int src, dst, used, base, abreak;
nonargs = alloca(sizeof(char *) * argc);
src = 1;
dst = 1;
used = 0;
base = 0;
+ abreak = 0;
while (src < argc)
{
const Ecore_Getopt_Desc *desc;
Ecore_Getopt_Desc_Arg_Requirement arg_req;
char *arg = argv[src];
+ if (abreak)
+ {
+ base = 1;
+ break;
+ }
+
if (arg[0] != '-')
goto found_nonarg;
goto found_nonarg;
}
+
+
+ if (desc->action == ECORE_GETOPT_ACTION_BREAK)
+ abreak = 1;
+
if (src != dst)
argv[dst] = argv[src];
src++;
}
static Eina_Bool
+_ecore_getopt_parse_break(const Ecore_Getopt *parser EINA_UNUSED,
+ const Ecore_Getopt_Desc *desc EINA_UNUSED,
+ Ecore_Getopt_Value *val,
+ const char *arg_val EINA_UNUSED)
+{
+ if (val->boolp)
+ (*val->boolp) = EINA_TRUE;
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
_ecore_getopt_desc_handle(const Ecore_Getopt *parser,
const Ecore_Getopt_Desc *desc,
Ecore_Getopt_Value *value,
case ECORE_GETOPT_ACTION_LICENSE:
return _ecore_getopt_parse_license(parser, desc, value, arg_val);
+ case ECORE_GETOPT_ACTION_BREAK:
+ return _ecore_getopt_parse_break(parser, desc, value, arg_val);
+
default:
return EINA_FALSE;
}