The branch, master has been updated
via e588ddb5d683a9fd5cf595ac5ed2d8ba657a6bcf (commit)
from f3ec8693e36f7a562f6ddd87acfebf2340cad2ab (commit)
- Log -----------------------------------------------------------------
commit e588ddb5d683a9fd5cf595ac5ed2d8ba657a6bcf
Author: Nicholas Marriott <[email protected]>
Commit: Nicholas Marriott <[email protected]>
Add openat() to compat.
---
Makefile.am | 3 ++
compat.h | 8 ++++++-
compat/openat.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 7 ++++++
job.c | 2 +-
5 files changed, 81 insertions(+), 2 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index fb707df..690e466 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -238,6 +238,9 @@ endif
if NO_CFMAKERAW
nodist_tmux_SOURCES += compat/cfmakeraw.c
endif
+if NO_OPENAT
+nodist_tmux_SOURCES += compat/openat.c
+endif
# Install tmux.1 in the right format.
install-exec-hook:
diff --git a/compat.h b/compat.h
index b84ff40..ab3224b 100644
--- a/compat.h
+++ b/compat.h
@@ -243,7 +243,13 @@ int unsetenv(const char *);
#ifndef HAVE_CFMAKERAW
/* cfmakeraw.c */
-void cfmakeraw(struct termios *tio);
+void cfmakeraw(struct termios *);
+#endif
+
+#ifndef HAVE_OPENAT
+/* openat.c */
+#define AT_FDCWD -100
+int openat(int, const char *, int, ...);
#endif
#ifdef HAVE_GETOPT
diff --git a/compat/openat.c b/compat/openat.c
new file mode 100644
index 0000000..005235b
--- /dev/null
+++ b/compat/openat.c
@@ -0,0 +1,63 @@
+/* $Id$ */
+
+/*
+ * Copyright (c) 2013 Nicholas Marriott <[email protected]>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <unistd.h>
+
+#include "tmux.h"
+
+int
+openat(int fd, const char *path, int flags, ...)
+{
+ mode_t mode;
+ va_list ap;
+ int dotfd, retval, saved_errno;
+
+ if (flags & O_CREAT) {
+ va_start(ap, flags);
+ mode = va_arg(ap, mode_t);
+ va_end(ap);
+ } else
+ mode = 0;
+
+ dotfd = -1;
+ if (fd != AT_FDCWD) {
+ dotfd = open(".", O_RDONLY);
+ if (dotfd == -1)
+ return (-1);
+ if (fchdir(fd) != 0)
+ return (-1);
+ }
+
+ retval = open(path, flags, mode);
+
+ if (dotfd != -1) {
+ if (fchdir(dotfd) != 0) {
+ saved_errno = errno;
+ close(retval);
+ close(dotfd);
+ errno = saved_errno;
+ return (-1);
+ }
+ close(dotfd);
+ }
+
+ return (retval);
+}
diff --git a/configure.ac b/configure.ac
index 68c50fb..ceb37db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -323,6 +323,13 @@ if test "x$found_cfmakeraw" = xyes; then
fi
AM_CONDITIONAL(NO_CFMAKERAW, [test "x$found_cfmakeraw" = xno])
+# Look for openat, compat/openat.c used if missing.
+AC_CHECK_FUNC(openat, found_openat=yes, found_openat=no)
+if test "x$found_openat" = xyes; then
+ AC_DEFINE(HAVE_OPENAT)
+fi
+AM_CONDITIONAL(NO_OPENAT, [test "x$found_openat" = xno])
+
# Look for getopt. glibc's getopt does not enforce argument order and the ways
# of making it do so are stupid, so just use our own instead.
AC_CHECK_FUNC(getopt, found_getopt=yes, found_getopt=no)
diff --git a/job.c b/job.c
index b2c2251..d7bd852 100644
--- a/job.c
+++ b/job.c
@@ -144,7 +144,7 @@ job_write_callback(unused struct bufferevent *bufev, void
*data)
size_t len = EVBUFFER_LENGTH(EVBUFFER_OUTPUT(job->event));
log_debug("job write %p: %s, pid %ld, output left %zu", job, job->cmd,
- (long) job->pid, len);
+ (long) job->pid, len);
if (len == 0) {
shutdown(job->fd, SHUT_WR);
-----------------------------------------------------------------------
Summary of changes:
Makefile.am | 3 ++
compat.h | 8 +++++-
compat/{cfmakeraw.c => openat.c} | 49 +++++++++++++++++++++++++++++++-------
configure.ac | 7 +++++
job.c | 2 +-
5 files changed, 58 insertions(+), 11 deletions(-)
copy compat/{cfmakeraw.c => openat.c} (55%)
hooks/post-receive
--
tmux
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs