summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS6
-rw-r--r--doc/elgetopt.html13
-rw-r--r--doc/index.html2
-rw-r--r--doc/upgrade.html7
-rw-r--r--package/info2
-rw-r--r--src/execline/elgetopt.c25
6 files changed, 46 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index e42f16d..a0b148a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,11 @@
Changelog for execline.
+In 2.9.3.0
+----------
+
+ - New -D option to elgetopt.
+
+
In 2.9.2.1
----------
diff --git a/doc/elgetopt.html b/doc/elgetopt.html
index b3a28ce..bb2563f 100644
--- a/doc/elgetopt.html
+++ b/doc/elgetopt.html
@@ -26,7 +26,7 @@ arguments to an execline script.
<h2> Interface </h2>
<pre>
- elgetopt <em>optstring</em> <em>prog...</em>
+ elgetopt [ -D <em>default</em> ] <em>optstring</em> <em>prog...</em>
</pre>
<ul>
@@ -44,13 +44,22 @@ string. </li>
<li> If the <tt>-<em>c</em></tt> switch is recognized, <tt>elgetopt</tt>
sets the <tt>ELGETOPT_<em>c</em></tt> environment variable. The value
of that variable is the argument to the <tt>-<em>c</em></tt> switch if
-it has one, and 1 otherwise. </li>
+it has one, and <tt>1</tt> (or <em>default</em> if given) otherwise. </li>
<li> After setting all recognized options, <tt>elgetopt</tt> makes
new <tt>#</tt>, <tt>1</tt>, <tt>2</tt>... "positional parameters" with
what remains. </li>
<li> <tt>elgetopt</tt> then execs into <em>prog...</em>. </li>
</ul>
+<h2> Options </h2>
+
+<ul>
+ <li> <tt>-D&nbsp;<em>default</em></tt>&nbsp;: use <em>default</em> as the
+value for the <tt>ELGETOPT_<em>c</em></tt> environment variable if there is
+no argument to the <tt>-<em>c</em></tt> switch. Default is <tt>1</tt>. The
+value is the same for all the options defined by elgetopt. </li>
+</ul>
+
<h2> Notes </h2>
<ul>
diff --git a/doc/index.html b/doc/index.html
index 87c6f75..0e6b43f 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -77,7 +77,7 @@ want nsswitch-like functionality:
<h3> Download </h3>
<ul>
- <li> The current released version of execline is <a href="execline-2.9.2.1.tar.gz">2.9.2.1</a>. </li>
+ <li> The current released version of execline is <a href="execline-2.9.3.0.tar.gz">2.9.3.0</a>. </li>
<li> Alternatively, you can checkout a copy of the
<a href="//git.skarnet.org/cgi-bin/cgit.cgi/execline/">execline
git repository</a>:
diff --git a/doc/upgrade.html b/doc/upgrade.html
index 6a65fac..23479b9 100644
--- a/doc/upgrade.html
+++ b/doc/upgrade.html
@@ -18,6 +18,13 @@
<h1> What has changed in execline </h1>
+<h2> in 2.9.3.0 </h2>
+
+<ul>
+ <li> New <tt>-D <em>default</em></tt> option to
+<a href="elgetopt.html">elgetopt</a>. </li>
+</ul>
+
<h2> in 2.9.2.1 </h2>
<ul>
diff --git a/package/info b/package/info
index b44cce3..9c1ad98 100644
--- a/package/info
+++ b/package/info
@@ -1,4 +1,4 @@
package=execline
-version=2.9.2.1
+version=2.9.3.0
category=admin
package_macro_name=EXECLINE
diff --git a/src/execline/elgetopt.c b/src/execline/elgetopt.c
index 040be31..54a89c0 100644
--- a/src/execline/elgetopt.c
+++ b/src/execline/elgetopt.c
@@ -11,17 +11,32 @@
#include <execline/execline.h>
-#define USAGE "elgetopt optstring prog..."
+#define USAGE "elgetopt [ -D default ] optstring prog..."
int main (int argc, char const *const *argv, char const *const *envp)
{
size_t envlen = env_len(envp) ;
stralloc modif = STRALLOC_ZERO ;
char const *x = getenv("#") ;
+ char const *dfl = "1" ;
unsigned int n, nbak ;
PROG = "elgetopt" ;
- if (argc < 3) strerr_dieusage(100, USAGE) ;
+ {
+ subgetopt l = SUBGETOPT_ZERO ;
+ for (;;)
+ {
+ int opt = subgetopt_r(argc, argv, "D:", &l) ;
+ if (opt == -1) break ;
+ switch (opt)
+ {
+ case 'D' : dfl = l.arg ; break ;
+ default : strerr_dieusage(100, USAGE) ;
+ }
+ }
+ argc -= l.ind ; argv += l.ind ;
+ }
+ if (argc < 2) strerr_dieusage(100, USAGE) ;
if (!x) strerr_dienotset(100, "#") ;
if (!uint0_scan(x, &n)) strerr_dieinvalid(100, "#") ;
nbak = n++ ;
@@ -40,11 +55,11 @@ int main (int argc, char const *const *argv, char const *const *envp)
for (;;)
{
char hmpf[11] = "ELGETOPT_?" ;
- int opt = sgetopt_r(n, args, argv[1], &l) ;
+ int opt = sgetopt_r(n, args, argv[0], &l) ;
if (opt == -1) break ;
if (opt == '?') return 1 ;
hmpf[9] = opt ;
- if (!env_addmodif(&modif, hmpf, l.arg ? l.arg : "1")) goto err ;
+ if (!env_addmodif(&modif, hmpf, l.arg ? l.arg : dfl)) goto err ;
}
n -= l.ind ;
for (i = 0 ; i < nbak ; i++)
@@ -64,7 +79,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
char const *v[envlen] ;
if (el_pushenv(&satmp, envp, envlen, list, 1) < 0) goto err ;
if (!env_make(v, envlen, satmp.s, satmp.len)) goto err ;
- xmexec_fm(argv+2, v, envlen, modif.s, modif.len) ;
+ xmexec_fm(argv+1, v, envlen, modif.s, modif.len) ;
}
err:
strerr_diefu1sys(111, "update environment") ;