summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2015-01-24 13:07:29 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2015-01-24 13:07:29 +0000
commit86aa8c6429885ecde3c4cbbb9528fc82f024f40a (patch)
treedbbea8117320afeecded51936250bb755541b140
parent1f84ac05f76e73be294d74e5999e030a07221d68 (diff)
downloadexecline-86aa8c6429885ecde3c4cbbb9528fc82f024f40a.tar.xz
- add fdswap
- version: 2.0.2.0
-rw-r--r--INSTALL2
-rw-r--r--doc/fdswap.html43
-rw-r--r--doc/index.html5
-rw-r--r--doc/upgrade.html7
-rw-r--r--package/deps.mak3
-rw-r--r--package/info2
-rw-r--r--package/modes1
-rw-r--r--package/targets.mak1
-rw-r--r--src/execline/deps-exe/fdswap1
-rw-r--r--src/execline/fdswap.c19
-rw-r--r--src/execline/multisubstitute.c5
11 files changed, 81 insertions, 8 deletions
diff --git a/INSTALL b/INSTALL
index 09a8be5..dda0e02 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Build Instructions
- A POSIX-compliant C development environment
- GNU make version 4.0 or later
- - skalibs version 2.2.0.0 or later: http://skarnet.org/software/skalibs/
+ - skalibs version 2.2.1.0 or later: http://skarnet.org/software/skalibs/
This software will run on any operating system that implements
POSIX.1-2008, available at:
diff --git a/doc/fdswap.html b/doc/fdswap.html
new file mode 100644
index 0000000..5f353dc
--- /dev/null
+++ b/doc/fdswap.html
@@ -0,0 +1,43 @@
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>execline: the fdswap program</title>
+ <meta name="Description" content="execline: the fdswap program" />
+ <meta name="Keywords" content="execline command fdswap file descriptor dup dup2" />
+ <!-- <link rel="stylesheet" type="text/css" href="http://skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">execline</a><br />
+<a href="http://skarnet.org/software/">Software</a><br />
+<a href="http://skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>fdswap</tt> program </h1>
+
+<p>
+<tt>fdswap</tt> swaps two file descriptors, then
+executes a program.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ fdswap <em>fd1</em> <em>fd2</em> <em>prog...</em>
+</pre>
+
+<p>
+<tt>fdswaps</tt> swaps file descriptors numbered <em>fd1</em> and
+<em>fd2</em>, then execs into <em>prog</em> with its arguments.
+</p>
+
+<h2> Notes </h2>
+
+<ul>
+ <li> fdswap has no portable shell equivalent. </li>
+</ul>
+
+</body>
+</html>
diff --git a/doc/index.html b/doc/index.html
index 462eeba..851a0c5 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -50,7 +50,7 @@ shell's syntax, and has no security issues.
<li> A POSIX-compliant system with a standard C development environment </li>
<li> GNU make, version 4.0 or later </li>
<li> <a href="http://skarnet.org/software/skalibs/">skalibs</a> version
-2.2.0.0 or later </li>
+2.2.1.0 or later </li>
</ul>
<h3> Licensing </h3>
@@ -63,7 +63,7 @@ shell's syntax, and has no security issues.
<h3> Download </h3>
<ul>
- <li> The current released version of execline is <a href="execline-2.0.1.1.tar.gz">2.0.1.1</a>. </li>
+ <li> The current released version of execline is <a href="execline-2.0.2.0.tar.gz">2.0.2.0</a>. </li>
<li> Alternatively, you can checkout a copy of the execline git repository:
<pre> git clone git://git.skarnet.org/execline </pre> </li>
</ul>
@@ -122,6 +122,7 @@ to your installation: the shebang lines for your system might be something like
<li><a href="fdclose.html">The <tt>fdclose</tt> program</a></li>
<li><a href="fdblock.html">The <tt>fdblock</tt> program</a></li>
<li><a href="fdmove.html">The <tt>fdmove</tt> program</a></li>
+<li><a href="fdswap.html">The <tt>fdswap</tt> program</a></li>
<li><a href="fdreserve.html">The <tt>fdreserve</tt> program</a></li>
<li><a href="redirfd.html">The <tt>redirfd</tt> program</a></li>
<li><a href="piperw.html">The <tt>piperw</tt> program</a></li>
diff --git a/doc/upgrade.html b/doc/upgrade.html
index eed4a6a..ed85109 100644
--- a/doc/upgrade.html
+++ b/doc/upgrade.html
@@ -17,6 +17,13 @@
<h1> What has changed in execline </h1>
+<h2> in 2.0.2.0 </h2>
+
+<ul>
+ <li> skalibs dependency bumped to 2.2.1.0 </li>
+ <li> New command: <a href="fdswap.html">fdswap</a> </li>
+</ul>
+
<h2> in 2.0.1.1 </h2>
<ul>
diff --git a/package/deps.mak b/package/deps.mak
index 1794379..4bf3d89 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -19,6 +19,7 @@ src/execline/fdblock.o src/execline/fdblock.lo: src/execline/fdblock.c
src/execline/fdclose.o src/execline/fdclose.lo: src/execline/fdclose.c
src/execline/fdmove.o src/execline/fdmove.lo: src/execline/fdmove.c
src/execline/fdreserve.o src/execline/fdreserve.lo: src/execline/fdreserve.c
+src/execline/fdswap.o src/execline/fdswap.lo: src/execline/fdswap.c
src/execline/forbacktickx.o src/execline/forbacktickx.lo: src/execline/forbacktickx.c src/include/execline/config.h src/include/execline/execline.h
src/execline/foreground.o src/execline/foreground.lo: src/execline/foreground.c src/include/execline/execline.h
src/execline/forx.o src/execline/forx.lo: src/execline/forx.c src/include/execline/config.h src/include/execline/execline.h
@@ -99,6 +100,8 @@ fdmove: private EXTRA_LIBS :=
fdmove: src/execline/fdmove.o -lskarnet
fdreserve: private EXTRA_LIBS :=
fdreserve: src/execline/fdreserve.o -lskarnet
+fdswap: private EXTRA_LIBS :=
+fdswap: src/execline/fdswap.o -lskarnet
forbacktickx: private EXTRA_LIBS :=
forbacktickx: src/execline/forbacktickx.o ${LIBEXECLINE} -lskarnet
foreground: private EXTRA_LIBS :=
diff --git a/package/info b/package/info
index 9856244..c1621d8 100644
--- a/package/info
+++ b/package/info
@@ -1,4 +1,4 @@
package=execline
-version=2.0.1.1
+version=2.0.2.0
category=admin
package_macro_name=EXECLINE
diff --git a/package/modes b/package/modes
index 29e242a..332d2c0 100644
--- a/package/modes
+++ b/package/modes
@@ -17,6 +17,7 @@ fdblock 0755
fdclose 0755
fdreserve 0755
fdmove 0755
+fdswap 0755
forx 0755
forbacktickx 0755
foreground 0755
diff --git a/package/targets.mak b/package/targets.mak
index 6f58541..2b1c0f4 100644
--- a/package/targets.mak
+++ b/package/targets.mak
@@ -15,6 +15,7 @@ export \
fdblock \
fdclose \
fdmove \
+fdswap \
fdreserve \
forbacktickx \
foreground \
diff --git a/src/execline/deps-exe/fdswap b/src/execline/deps-exe/fdswap
new file mode 100644
index 0000000..e7187fe
--- /dev/null
+++ b/src/execline/deps-exe/fdswap
@@ -0,0 +1 @@
+-lskarnet
diff --git a/src/execline/fdswap.c b/src/execline/fdswap.c
new file mode 100644
index 0000000..13ac98b
--- /dev/null
+++ b/src/execline/fdswap.c
@@ -0,0 +1,19 @@
+/* ISC license. */
+
+#include <unistd.h>
+#include <skalibs/uint.h>
+#include <skalibs/strerr2.h>
+#include <skalibs/djbunix.h>
+
+#define USAGE "fdswap fd1 fd2 prog..."
+
+int main (int argc, char const *const *argv, char const *const *envp)
+{
+ unsigned int fd1, fd2 ;
+ PROG = "fdswap" ;
+ if ((argc < 4) || !uint0_scan(argv[1], &fd1) || !uint0_scan(argv[2], &fd2))
+ strerr_dieusage(100, USAGE) ;
+ if (fd_move2(fd1, fd2, fd2, fd1) < 0) strerr_diefu1sys(111, "swap fds") ;
+ pathexec_run(argv[3], argv+3, envp) ;
+ strerr_dieexec(111, argv[3]) ;
+}
diff --git a/src/execline/multisubstitute.c b/src/execline/multisubstitute.c
index acee42f..d7fbb4e 100644
--- a/src/execline/multisubstitute.c
+++ b/src/execline/multisubstitute.c
@@ -18,7 +18,7 @@ static char const *const commands[8] =
0
} ;
-static exlsnfunc_t *const functions[8] =
+static exlsnfunc_t_ref const functions[8] =
{
&exlsn_define,
&exlsn_importas,
@@ -36,12 +36,10 @@ int main (int argc, char const **argv, char const *const *envp)
PROG = "multisubstitute" ;
if (!--argc) strerr_dieusage(100, USAGE) ;
- /* Read a block containing directives */
argc1 = el_semicolon(++argv) ;
if (argc1 >= argc) strerr_dief1x(100, "unterminated block") ;
if (argc1 + 1 == argc) strerr_dieusage(100, USAGE) ;
- /* Parse args and update the substitution info */
while (argc1)
{
int n ;
@@ -59,6 +57,5 @@ int main (int argc, char const **argv, char const *const *envp)
argv += n ; argc1 -= n ; argc -= n ;
}
- /* Perform the substitution and exec */
el_substandrun(argc-1, argv+1, envp, &info) ;
}