2008/6/18 Jeff Johnson <[EMAIL PROTECTED]>:

> "Patches cheerfully accepted."

Attached.

-- 
Marcin Kowalczyk
[EMAIL PROTECTED]
http://qrnik.knm.org.pl/~qrczak/
--- rpm-5.1.0.orig/rpmio/macro.c	2008-04-14 15:59:15.000000000 +0200
+++ rpm-5.1.0/rpmio/macro.c	2008-06-18 17:43:03.000000000 +0200
@@ -1001,6 +1001,7 @@
     int argc = 0;
     const char **argv;
     int c;
+    unsigned int popt_flags;
 
     /* Copy macro name as argv[0], save beginning of args.  */
     buf[0] = '\0';
@@ -1053,6 +1054,7 @@
     be[-1] = ' '; /* assert((be - 1) == (b + strlen(b) == buf + strlen(buf))) */
     be[0] = '\0';
     b = buf;
+
     for (c = 0; c < argc; c++) {
 	argv[c] = b;
 	b = strchr(b, ' ');
@@ -1061,12 +1063,21 @@
     /* assert(b == be);  */
     argv[argc] = NULL;
 
+    /* '+' as the first character means that options are recognized
+     * only before positional arguments, as POSIX requires. */
+    popt_flags = POPT_CONTEXT_NO_EXEC;
+    if (me->opts[0] == '+') popt_flags |= POPT_CONTEXT_POSIXMEHARDER;
+
     /* Count the number of short options. */
-    for (c = 0, opts = me->opts; *opts != '\0'; opts++)
+    opts = me->opts;
+    if (*opts == '+') opts++;
+    for (c = 0; *opts != '\0'; opts++)
 	if (*opts != ':') c++;
     /* Set up popt option table. */
     optTbl = xcalloc(sizeof(*optTbl), (c + 1));
-    for (c = 0, opts = me->opts; *opts != '\0'; opts++) {
+    opts = me->opts;
+    if (*opts == '+') opts++;
+    for (c = 0; *opts != '\0'; opts++) {
 	if (*opts == ':') continue;
 	optTbl[c].shortName = opts[0];
 	optTbl[c].val = (int) opts[0];
@@ -1077,7 +1088,7 @@
 
     /* Parse the options, defining option macros. */
 /[EMAIL PROTECTED]@*/
-    optCon = poptGetContext(argv[0], argc, argv, optTbl, POPT_CONTEXT_NO_EXEC|POPT_CONTEXT_POSIXMEHARDER);
+    optCon = poptGetContext(argv[0], argc, argv, optTbl, popt_flags);
 /[EMAIL PROTECTED]@*/
     while ((c = poptGetNextOpt(optCon)) > 0) {
 	const char * optArg = poptGetOptArg(optCon);
_______________________________________________
pld-devel-en mailing list
pld-devel-en@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-devel-en

Reply via email to