summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2014-02-26 10:31:21 -0500
committerChet Ramey <chet.ramey@case.edu>2014-02-26 10:31:21 -0500
commit7628b745a813aac53586b640da056a975f1c443e (patch)
treef27689da65e9873cd0a77f64f334814989ef5478 /util.c
parent3fede80c7ae9d396a98137ec8e7188a27c327e96 (diff)
downloadreadline-6.3.tar.gz
Readline-6.3 distribution sources and documentationreadline-6.3
Diffstat (limited to 'util.c')
-rw-r--r--util.c83
1 files changed, 74 insertions, 9 deletions
diff --git a/util.c b/util.c
index 6c68ad8..fa3a667 100644
--- a/util.c
+++ b/util.c
@@ -1,6 +1,6 @@
/* util.c -- readline utility functions */
-/* Copyright (C) 1987-2010 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2012 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -108,7 +108,11 @@ _rl_abort_internal ()
_rl_pop_executing_macro ();
rl_last_func = (rl_command_func_t *)NULL;
+#if defined (HAVE_POSIX_SIGSETJMP)
+ siglongjmp (_rl_top_level, 1);
+#else
longjmp (_rl_top_level, 1);
+#endif
return (0);
}
@@ -369,11 +373,13 @@ _rl_strpbrk (string1, string2)
doesn't matter (strncasecmp). */
int
_rl_strnicmp (string1, string2, count)
- char *string1, *string2;
+ const char *string1;
+ const char *string2;
int count;
{
- register char *s1, *s2;
- int d;
+ register const char *s1;
+ register const char *s2;
+ register int d;
if (count <= 0 || (string1 == string2))
return 0;
@@ -389,7 +395,7 @@ _rl_strnicmp (string1, string2, count)
break;
s2++;
}
- while (--count != 0)
+ while (--count != 0);
return (0);
}
@@ -397,10 +403,12 @@ _rl_strnicmp (string1, string2, count)
/* strcmp (), but caseless (strcasecmp). */
int
_rl_stricmp (string1, string2)
- char *string1, *string2;
+ const char *string1;
+ const char *string2;
{
- register char *s1, *s2;
- int d;
+ register const char *s1;
+ register const char *s2;
+ register int d;
s1 = string1;
s2 = string2;
@@ -507,7 +515,7 @@ _rl_tropen ()
if (_rl_tracefp)
fclose (_rl_tracefp);
- sprintf (fnbuf, "/var/tmp/rltrace.%ld", getpid());
+ sprintf (fnbuf, "/var/tmp/rltrace.%ld", (long)getpid());
unlink(fnbuf);
_rl_tracefp = fopen (fnbuf, "w+");
return _rl_tracefp != 0;
@@ -523,4 +531,61 @@ _rl_trclose ()
return r;
}
+void
+_rl_settracefp (fp)
+ FILE *fp;
+{
+ _rl_tracefp = fp;
+}
+#endif
+
+
+#if HAVE_DECL_AUDIT_USER_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT)
+#include <sys/socket.h>
+#include <linux/audit.h>
+#include <linux/netlink.h>
+
+/* Report STRING to the audit system. */
+void
+_rl_audit_tty (string)
+ char *string;
+{
+ struct sockaddr_nl addr;
+ struct msghdr msg;
+ struct nlmsghdr nlm;
+ struct iovec iov[2];
+ size_t size;
+ int fd;
+
+ fd = socket (AF_NETLINK, SOCK_RAW, NETLINK_AUDIT);
+ if (fd < 0)
+ return;
+ size = strlen (string) + 1;
+
+ nlm.nlmsg_len = NLMSG_LENGTH (size);
+ nlm.nlmsg_type = AUDIT_USER_TTY;
+ nlm.nlmsg_flags = NLM_F_REQUEST;
+ nlm.nlmsg_seq = 0;
+ nlm.nlmsg_pid = 0;
+
+ iov[0].iov_base = &nlm;
+ iov[0].iov_len = sizeof (nlm);
+ iov[1].iov_base = string;
+ iov[1].iov_len = size;
+
+ addr.nl_family = AF_NETLINK;
+ addr.nl_pid = 0;
+ addr.nl_groups = 0;
+
+ msg.msg_name = &addr;
+ msg.msg_namelen = sizeof (addr);
+ msg.msg_iov = iov;
+ msg.msg_iovlen = 2;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+
+ (void)sendmsg (fd, &msg, 0);
+ close (fd);
+}
#endif