--- getopt.c.org	2002-11-20 17:45:30 +0100
+++ getopt.c	2003-01-04 11:33:40 +0100
@@ -116,18 +116,29 @@
             *optarg = os->place;
         else if (os->argc <= ++os->ind) {        /* no arg */
             os->place = EMSG;
-            if (*opts == ':') {
-                *optch = os->opt;
-                return (APR_BADARG);
+            *optch = os->opt;
+            if (*++oli == ':') { /* optional argument */
+                *optarg = NULL;
+                return (APR_SUCCESS);
             }
+            if (*opts == ':')
+                return (APR_BADARG);
             if (os->errfn) {
                 (os->errfn)(os->errarg, 
                             "%s: option requires an argument -- %c\n",
                             apr_filepath_name_get(*os->argv), os->opt);
             }
-            *optch = os->opt;
             return (APR_BADCH);
         }
+        else if (*++oli == ':' && *os->argv[os->ind] == '-') {
+                /* skip if argument is optional and next 
+                 * argv is option starting with '-'
+                 */
+                *optarg = NULL;
+                os->place = EMSG;
+                *optch = os->opt;
+                return (APR_SUCCESS);
+        }
         else                        /* white space */
             *optarg = os->argv[os->ind];
         os->place = EMSG;
