From 5218701a4ac1507c472c2bddaca9941f4a4af1d7 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Wed, 13 Jun 2012 04:49:41 -0400
Subject: [PATCH] Improve getopt feature for command line scripts

---
 program/include/clisetup.php |   34 ++++++++++++++++++----------------
 1 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/program/include/clisetup.php b/program/include/clisetup.php
index c947570..039020b 100644
--- a/program/include/clisetup.php
+++ b/program/include/clisetup.php
@@ -5,7 +5,7 @@
  | program/include/clisetup.php                                          |
  |                                                                       |
  | This file is part of the Roundcube Webmail client                     |
- | Copyright (C) 2010, The Roundcube Dev Team                            |
+ | Copyright (C) 2010-2012, The Roundcube Dev Team                       |
  |                                                                       |
  | Licensed under the GNU General Public License version 3 or            |
  | any later version with exceptions for skins & plugins.                |
@@ -31,27 +31,29 @@
 /**
  * Parse commandline arguments into a hash array
  */
-function get_opt($aliases=array())
+function get_opt($aliases = array())
 {
 	$args = array();
-	for ($i=1; $i<count($_SERVER['argv']); $i++)
-	{
+	for ($i=1; $i < count($_SERVER['argv']); $i++) {
 		$arg = $_SERVER['argv'][$i];
-		if (substr($arg, 0, 2) == '--')
-		{
+		$value = true;
+		$key = null;
+
+		if ($arg[0] == '-') {
+			$key = preg_replace('/^-+/', '', $arg);
 			$sp = strpos($arg, '=');
-			$key = substr($arg, 2, $sp - 2);
-			$value = substr($arg, $sp+1);
-		}
-		else if ($arg{0} == '-')
-		{
-			$key = substr($arg, 1);
-			$value = $_SERVER['argv'][++$i];
+			if ($sp > 0) {
+				$key = substr($key, 0, $sp - 2);
+				$value = substr($arg, $sp+1);
+			}
+			else if (strlen($_SERVER['argv'][$i+1]) && $_SERVER['argv'][$i+1][0] != '-') {
+				$value = $_SERVER['argv'][++$i];
+			}
+
+			$args[$key] = is_string($value) ? preg_replace(array('/^["\']/', '/["\']$/'), '', $value) : $value;
 		}
 		else
-			continue;
-
-		$args[$key] = preg_replace(array('/^["\']/', '/["\']$/'), '', $value);
+			$args[] = $arg;
 
 		if ($alias = $aliases[$key])
 			$args[$alias] = $args[$key];

--
Gitblit v1.9.1