41 tane yaması ile bash iyi bir sample.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from pisi.actionsapi import gnuconfig
|
||||
from pisi.actionsapi import autotools
|
||||
|
||||
|
||||
def setup():
|
||||
gnuconfig.gnuconfig_update()
|
||||
# libtoolize.libtoolize()
|
||||
autotools.configure( '--with-nls' )
|
||||
|
||||
def build():
|
||||
autotools.make()
|
||||
|
||||
def install():
|
||||
autotools.install()
|
||||
@@ -0,0 +1,54 @@
|
||||
--- jobs.c
|
||||
+++ jobs.c Wed May 2 18:20:31 2001
|
||||
@@ -1166,6 +1166,15 @@
|
||||
pid_t mypid;
|
||||
|
||||
mypid = getpid ();
|
||||
+
|
||||
+ if (interrupt_state)
|
||||
+ {
|
||||
+ struct timeval tv;
|
||||
+ struct rusage rx;
|
||||
+ (void) gettimeofday(&tv, NULL);
|
||||
+ (void) getrusage(RUSAGE_SELF, &rx);
|
||||
+ }
|
||||
+
|
||||
#if defined (BUFFERED_INPUT)
|
||||
/* Close default_buffered_input if it's > 0. We don't close it if it's
|
||||
0 because that's the file descriptor used when redirecting input,
|
||||
--- quit.h
|
||||
+++ quit.h Wed May 2 17:38:34 2001
|
||||
@@ -21,8 +21,12 @@
|
||||
#if !defined (_QUIT_H_)
|
||||
#define _QUIT_H_
|
||||
|
||||
+#define __need_sig_atomic_t
|
||||
+#include <signal.h>
|
||||
+#undef __need_sig_atomic_t
|
||||
+
|
||||
/* Non-zero means SIGINT has already ocurred. */
|
||||
-extern int interrupt_state;
|
||||
+extern volatile sig_atomic_t interrupt_state;
|
||||
|
||||
extern void throw_to_top_level ();
|
||||
|
||||
--- sig.c
|
||||
+++ sig.c Wed May 2 17:36:17 2001
|
||||
@@ -57,7 +57,7 @@
|
||||
extern int interactive, interactive_shell, login_shell, startup_state;
|
||||
|
||||
/* Non-zero after SIGINT. */
|
||||
-int interrupt_state;
|
||||
+volatile sig_atomic_t interrupt_state = 0;
|
||||
|
||||
/* The environment at the top-level R-E loop. We use this in
|
||||
the case of error return. */
|
||||
@@ -69,7 +69,7 @@
|
||||
#endif /* JOB_CONTROL */
|
||||
|
||||
/* When non-zero, we throw_to_top_level (). */
|
||||
-int interrupt_immediately = 0;
|
||||
+volatile sig_atomic_t interrupt_immediately = 0;
|
||||
|
||||
static void initialize_shell_signals ();
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
--- builtins/fc.def
|
||||
+++ builtins/fc.def 2001/08/28 11:20:53
|
||||
@@ -371,6 +371,9 @@
|
||||
{
|
||||
unlink (fn);
|
||||
free (fn);
|
||||
+#ifdef DEBFIX
|
||||
+ free (command);
|
||||
+#endif
|
||||
return (EXECUTION_FAILURE);
|
||||
}
|
||||
|
||||
@@ -383,6 +386,9 @@
|
||||
/* Turn on the `v' flag while fc_execute_file runs so the commands
|
||||
will be echoed as they are read by the parser. */
|
||||
begin_unwind_frame ("fc builtin");
|
||||
+#ifdef DEBFIX
|
||||
+ add_unwind_protect ((Function *)xfree, command);
|
||||
+#endif
|
||||
add_unwind_protect ((Function *)xfree, fn);
|
||||
add_unwind_protect (unlink, fn);
|
||||
unwind_protect_int (echo_input_at_read);
|
||||
--- variables.c.orig Wed Aug 21 12:10:57 2002
|
||||
+++ variables.c Wed Aug 21 12:14:18 2002
|
||||
@@ -1035,6 +1035,7 @@
|
||||
return v;
|
||||
}
|
||||
|
||||
+#if !defined(linux)
|
||||
/* The random number seed. You can change this by setting RANDOM. */
|
||||
static unsigned long rseed = 1;
|
||||
static int last_random_value;
|
||||
@@ -1060,6 +1061,21 @@
|
||||
last_random_value = 0;
|
||||
}
|
||||
|
||||
+#else
|
||||
+
|
||||
+static int last_sbrand_pid;
|
||||
+
|
||||
+static int brand ()
|
||||
+{
|
||||
+ return random() & 32767;
|
||||
+}
|
||||
+
|
||||
+static void sbrand (unsigned long seed)
|
||||
+{
|
||||
+ srandom(seed);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static SHELL_VAR *
|
||||
assign_random (self, value, unused)
|
||||
SHELL_VAR *self;
|
||||
@@ -1075,6 +1091,7 @@
|
||||
{
|
||||
int rv;
|
||||
|
||||
+#if !defined(linux)
|
||||
/* Reset for command and process substitution. */
|
||||
if (subshell_environment)
|
||||
sbrand (rseed + getpid() + NOW);
|
||||
@@ -1082,6 +1099,18 @@
|
||||
do
|
||||
rv = brand ();
|
||||
while (rv == last_random_value);
|
||||
+#else
|
||||
+ if (subshell_environment)
|
||||
+ {
|
||||
+ int mypid = getpid();
|
||||
+ if (mypid != last_sbrand_pid)
|
||||
+ {
|
||||
+ last_sbrand_pid = mypid;
|
||||
+ sbrand (mypid + NOW);
|
||||
+ }
|
||||
+ }
|
||||
+ rv = brand();
|
||||
+#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -1093,7 +1122,9 @@
|
||||
char *p;
|
||||
|
||||
rv = get_random_number ();
|
||||
+#if !defined(linux)
|
||||
last_random_value = rv;
|
||||
+#endif
|
||||
p = itos (rv);
|
||||
|
||||
FREE (value_cell (var));
|
||||
@@ -0,0 +1,13 @@
|
||||
--- bash-3.0/redir.c.afs 2005-04-20 09:16:15.000000000 +0100
|
||||
+++ bash-3.0/redir.c 2005-04-20 09:16:58.000000000 +0100
|
||||
@@ -596,7 +596,9 @@
|
||||
fd = open (filename, flags, mode);
|
||||
#if defined (AFS)
|
||||
if ((fd < 0) && (errno == EACCES))
|
||||
- fd = open (filename, flags & ~O_CREAT, mode);
|
||||
+ if ((fd = open (filename, flags & ~O_CREAT, mode)) < 0)
|
||||
+ /* Restore previous errno. */
|
||||
+ errno = EACCES;
|
||||
#endif /* AFS */
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
> Machine Type: i686-pc-linux-gnu
|
||||
>
|
||||
> Bash Version: 3.0
|
||||
> Patch Level: 0
|
||||
> Release Status: release
|
||||
>
|
||||
> Description:
|
||||
> GNU bash, version 3.00.0(1)-release (i686-pc-linux-gnu)
|
||||
> (and
|
||||
> GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu)
|
||||
>
|
||||
> dumps a core because of a null pointer "in make_bare_word
|
||||
> at make_cmd.c:90" (see gdb output below)
|
||||
|
||||
Thanks for the report. Here's a quick fix:
|
||||
|
||||
*** arrayfunc.c~ Sat Nov 6 15:08:29 2004
|
||||
--- arrayfunc.c Mon Jan 31 11:56:21 2005
|
||||
***************
|
||||
*** 709,713 ****
|
||||
return ((char *)NULL);
|
||||
}
|
||||
! else if (var == 0)
|
||||
return ((char *)NULL);
|
||||
else if (array_p (var) == 0)
|
||||
--- 709,713 ----
|
||||
return ((char *)NULL);
|
||||
}
|
||||
! else if (var == 0 || value_cell (var) == 0)
|
||||
return ((char *)NULL);
|
||||
else if (array_p (var) == 0)
|
||||
|
||||
|
||||
Chet
|
||||
|
||||
--
|
||||
``The lyf so short, the craft so long to lerne.'' - Chaucer
|
||||
( ``Discere est Dolere'' -- chet )
|
||||
Live...Laugh...Love
|
||||
Chet Ramey, ITS, CWRU chet@po.cwru.edu http://tiswww.tis.cwru.edu/~chet/
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Bug-bash mailing list
|
||||
Bug-bash@gnu.org
|
||||
http://lists.gnu.org/mailman/listinfo/bug-bash
|
||||
@@ -0,0 +1,19 @@
|
||||
Sune Foldager writes:
|
||||
On Darwin (Mac OS X), bash incorrectly assumed that it has been called over a network connection
|
||||
(such as ssh, rsh etc.), when stdin stems from the pipe() system call. This is because bash's heuristic
|
||||
code for determining if it's been started over a net connection is incorrect on Darwin kernels.
|
||||
|
||||
http://bugs.gentoo.org/show_bug.cgi?id=79124
|
||||
|
||||
--- /lib/sh/netconn.c
|
||||
+++ /lib/sh/netconn.c
|
||||
@@ -53,7 +53,8 @@
|
||||
l = sizeof(sa);
|
||||
rv = getpeername(fd, &sa, &l);
|
||||
/* Solaris 2.5 getpeername() returns EINVAL if the fd is not a socket. */
|
||||
- return ((rv < 0 && (errno == ENOTSOCK || errno == EINVAL)) ? 0 : 1);
|
||||
+ /* Darwin 7.7.0 getpeername() returns ENOTCONN if the fd was created with pipe(). */
|
||||
+ return ((rv < 0 && (errno == ENOTSOCK || errno == ENOTCONN || errno == EINVAL)) ? 0 : 1);
|
||||
#else /* !HAVE_GETPEERNAME || SVR4_2 || __BEOS__ */
|
||||
# if defined (SVR4) || defined (SVR4_2)
|
||||
/* Sockets on SVR4 and SVR4.2 are character special (streams) devices. */
|
||||
@@ -0,0 +1,39 @@
|
||||
--- bash-3.0/lib/readline/bind.c.agriffis 2004-03-03 22:39:32.000000000 -0500
|
||||
+++ bash-3.0/lib/readline/bind.c 2004-08-02 13:53:02.365731918 -0400
|
||||
@@ -781,6 +781,7 @@
|
||||
1. the filename used for the previous call
|
||||
2. the value of the shell variable `INPUTRC'
|
||||
3. ~/.inputrc
|
||||
+ 4. /etc/inputrc
|
||||
If the file existed and could be opened and read, 0 is returned,
|
||||
otherwise errno is returned. */
|
||||
int
|
||||
@@ -789,17 +790,20 @@
|
||||
{
|
||||
/* Default the filename. */
|
||||
if (filename == 0)
|
||||
+ filename = last_readline_init_file;
|
||||
+ if (filename == 0)
|
||||
+ filename = sh_get_env_value ("INPUTRC");
|
||||
+ if (filename == 0 || *filename == 0)
|
||||
{
|
||||
- filename = last_readline_init_file;
|
||||
- if (filename == 0)
|
||||
- filename = sh_get_env_value ("INPUTRC");
|
||||
- if (filename == 0)
|
||||
- filename = DEFAULT_INPUTRC;
|
||||
+ /* If there's trouble reading DEFAULT_INPUTRC then fall back to
|
||||
+ * the system inputrc
|
||||
+ */
|
||||
+ filename = DEFAULT_INPUTRC;
|
||||
+ if (_rl_read_init_file (filename, 0) == 0)
|
||||
+ return 0;
|
||||
+ filename = "/etc/inputrc";
|
||||
}
|
||||
|
||||
- if (*filename == 0)
|
||||
- filename = DEFAULT_INPUTRC;
|
||||
-
|
||||
#if defined (__MSDOS__)
|
||||
if (_rl_read_init_file (filename, 0) == 0)
|
||||
return 0;
|
||||
@@ -0,0 +1,13 @@
|
||||
--- expr.c
|
||||
+++ expr.c 2004-07-30 16:39:48.000000000 +0200
|
||||
@@ -406,8 +406,8 @@
|
||||
value = expcond ();
|
||||
if (curtok == EQ || curtok == OP_ASSIGN)
|
||||
{
|
||||
- int special, op;
|
||||
- intmax_t lvalue;
|
||||
+ int special, op = -1;
|
||||
+ intmax_t lvalue = 0;
|
||||
|
||||
special = curtok == OP_ASSIGN;
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,35 @@
|
||||
--- bash-3.0/tests/jobs4.sub.jobs 2004-05-06 14:02:41.000000000 +0100
|
||||
+++ bash-3.0/tests/jobs4.sub 2004-09-08 16:07:25.305385245 +0100
|
||||
@@ -18,5 +18,5 @@
|
||||
|
||||
wait
|
||||
|
||||
-cat &
|
||||
+sleep 100 &
|
||||
kill -1 %% && echo i killed it || echo could not kill it
|
||||
--- bash-3.0/jobs.c.jobs 2004-09-08 16:07:25.081427747 +0100
|
||||
+++ bash-3.0/jobs.c 2004-09-08 16:18:06.698604033 +0100
|
||||
@@ -2475,6 +2475,7 @@
|
||||
PROCESS *child;
|
||||
pid_t pid;
|
||||
int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
|
||||
+ static int wcontinued_not_supported = 0;
|
||||
|
||||
call_set_current = children_exited = 0;
|
||||
last_stopped_job = NO_JOB;
|
||||
@@ -2488,7 +2489,15 @@
|
||||
: 0;
|
||||
if (sigchld || block == 0)
|
||||
waitpid_flags |= WNOHANG;
|
||||
+ retry:
|
||||
+ if (wcontinued_not_supported)
|
||||
+ waitpid_flags &= ~WCONTINUED;
|
||||
pid = WAITPID (-1, &status, waitpid_flags);
|
||||
+ if (pid == -1 && errno == EINVAL)
|
||||
+ {
|
||||
+ wcontinued_not_supported = 1;
|
||||
+ goto retry;
|
||||
+ }
|
||||
|
||||
/* The check for WNOHANG is to make sure we decrement sigchld only
|
||||
if it was non-zero before we called waitpid. */
|
||||
@@ -0,0 +1,63 @@
|
||||
--- bash-3.0/locale.c.~1~ 2004-03-17 14:33:36.000000000 +0100
|
||||
+++ bash-3.0/locale.c 2004-08-01 11:05:15.484280755 +0200
|
||||
@@ -71,9 +71,10 @@ set_default_locale ()
|
||||
textdomain (PACKAGE);
|
||||
}
|
||||
|
||||
-/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES and LC_NUMERIC
|
||||
- if they are not specified in the environment, but LC_ALL is. This
|
||||
- should be called from main() after parsing the environment. */
|
||||
+/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_NUMERIC
|
||||
+ and LC_TIME if they are not specified in the environment, but LC_ALL
|
||||
+ is. This should be called from main() after parsing the
|
||||
+ environment. */
|
||||
void
|
||||
set_default_locale_vars ()
|
||||
{
|
||||
@@ -109,6 +110,12 @@ set_default_locale_vars ()
|
||||
setlocale (LC_NUMERIC, lc_all);
|
||||
# endif /* LC_NUMERIC */
|
||||
|
||||
+# if defined (LC_TIME)
|
||||
+ val = get_string_value ("LC_TIME");
|
||||
+ if (val == 0 && lc_all && *lc_all)
|
||||
+ setlocale (LC_TIME, lc_all);
|
||||
+# endif /* LC_TIME */
|
||||
+
|
||||
#endif /* HAVE_SETLOCALE */
|
||||
|
||||
val = get_string_value ("TEXTDOMAIN");
|
||||
@@ -213,6 +220,13 @@ set_locale_var (var, value)
|
||||
return (setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC")) != 0);
|
||||
# endif /* LC_NUMERIC */
|
||||
}
|
||||
+ else if (var[3] == 'T' && var[4] == 'I') /* LC_TIME */
|
||||
+ {
|
||||
+# if defined (LC_TIME)
|
||||
+ if (lc_all == 0 || *lc_all == '\0')
|
||||
+ return (setlocale (LC_TIME, get_locale_var ("LC_TIME")) != 0);
|
||||
+# endif /* LC_TIME */
|
||||
+ }
|
||||
#endif /* HAVE_SETLOCALE */
|
||||
|
||||
return (0);
|
||||
@@ -285,6 +299,9 @@ reset_locale_vars ()
|
||||
# if defined (LC_NUMERIC)
|
||||
setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC"));
|
||||
# endif
|
||||
+# if defined (LC_TIME)
|
||||
+ setlocale (LC_TIME, get_locale_var ("LC_TIME"));
|
||||
+# endif
|
||||
|
||||
locale_setblanks ();
|
||||
|
||||
--- bash-3.0/variables.c.~1~ 2004-07-04 19:57:26.000000000 +0200
|
||||
+++ bash-3.0/variables.c 2004-08-01 11:07:47.331188616 +0200
|
||||
@@ -3646,6 +3646,7 @@ static struct name_and_function special_
|
||||
{ "LC_CTYPE", sv_locale },
|
||||
{ "LC_MESSAGES", sv_locale },
|
||||
{ "LC_NUMERIC", sv_locale },
|
||||
+ { "LC_TIME", sv_locale },
|
||||
|
||||
{ "MAIL", sv_mail },
|
||||
{ "MAILCHECK", sv_mail },
|
||||
@@ -0,0 +1,11 @@
|
||||
--- bash-3.0/doc/bash.1.manpage 2004-11-30 09:33:54.727381784 +0000
|
||||
+++ bash-3.0/doc/bash.1 2004-11-30 09:34:06.799075585 +0000
|
||||
@@ -3929,7 +3929,7 @@
|
||||
.B SIGHUP
|
||||
to all jobs when an interactive login shell exits.
|
||||
.PP
|
||||
-If \Bbash\fP is waiting for a command to complete and receives a signal
|
||||
+If \fBbash\fP is waiting for a command to complete and receives a signal
|
||||
for which a trap has been set, the trap will not be executed until
|
||||
the command completes.
|
||||
When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
|
||||
@@ -0,0 +1,148 @@
|
||||
--- redir.c
|
||||
+++ redir.c 2005-01-28 15:22:21.950230271 +0100
|
||||
@@ -169,12 +169,13 @@
|
||||
how to undo the redirections later, if non-zero. If flags & RX_CLEXEC
|
||||
is non-zero, file descriptors opened in do_redirection () have their
|
||||
close-on-exec flag set. */
|
||||
+static int close_before_dup2_err;
|
||||
int
|
||||
do_redirections (list, flags)
|
||||
REDIRECT *list;
|
||||
int flags;
|
||||
{
|
||||
- int error;
|
||||
+ int error, ret = 0;
|
||||
REDIRECT *temp;
|
||||
|
||||
if (flags & RX_UNDOABLE)
|
||||
@@ -190,14 +191,21 @@
|
||||
|
||||
for (temp = list; temp; temp = temp->next)
|
||||
{
|
||||
+ close_before_dup2_err = 0;
|
||||
error = do_redirection_internal (temp, flags);
|
||||
if (error)
|
||||
{
|
||||
redirection_error (temp, error);
|
||||
return (error);
|
||||
}
|
||||
+ if (close_before_dup2_err)
|
||||
+ {
|
||||
+ redirection_error (temp, close_before_dup2_err);
|
||||
+ ret = close_before_dup2_err;
|
||||
+ }
|
||||
}
|
||||
- return (0);
|
||||
+
|
||||
+ return (ret);
|
||||
}
|
||||
|
||||
/* Return non-zero if the redirection pointed to by REDIRECT has a
|
||||
@@ -759,6 +767,8 @@
|
||||
#if defined (BUFFERED_INPUT)
|
||||
check_bash_input (redirector);
|
||||
#endif
|
||||
+ if ((fd != redirector) && (close(redirector) < 0) && (errno != EBADF))
|
||||
+ close_before_dup2_err = errno;
|
||||
|
||||
if ((fd != redirector) && (dup2 (fd, redirector) < 0))
|
||||
return (errno);
|
||||
@@ -838,6 +848,9 @@
|
||||
#if defined (BUFFERED_INPUT)
|
||||
check_bash_input (redirector);
|
||||
#endif
|
||||
+ if ((fd != redirector) && (close(redirector) < 0) && (errno != EBADF))
|
||||
+ close_before_dup2_err = errno;
|
||||
+
|
||||
if (fd != redirector && dup2 (fd, redirector) < 0)
|
||||
{
|
||||
r = errno;
|
||||
@@ -880,6 +893,9 @@
|
||||
#if defined (BUFFERED_INPUT)
|
||||
check_bash_input (redirector);
|
||||
#endif
|
||||
+ if ((close(redirector) < 0) && (errno != EBADF))
|
||||
+ close_before_dup2_err = errno;
|
||||
+
|
||||
/* This is correct. 2>&1 means dup2 (1, 2); */
|
||||
if (dup2 (redir_fd, redirector) < 0)
|
||||
return (errno);
|
||||
--- execute_cmd.c
|
||||
+++ execute_cmd.c 2005-01-28 16:09:10.383937390 +0100
|
||||
@@ -119,7 +119,7 @@
|
||||
static void do_piping __P((int, int));
|
||||
static void bind_lastarg __P((char *));
|
||||
static int shell_control_structure __P((enum command_type));
|
||||
-static void cleanup_redirects __P((REDIRECT *));
|
||||
+static int cleanup_redirects __P((REDIRECT *));
|
||||
|
||||
#if defined (JOB_CONTROL)
|
||||
static int restore_signal_mask __P((sigset_t *));
|
||||
@@ -393,12 +393,13 @@
|
||||
|
||||
/* A function to use to unwind_protect the redirection undo list
|
||||
for loops. */
|
||||
-static void
|
||||
+static int
|
||||
cleanup_redirects (list)
|
||||
REDIRECT *list;
|
||||
{
|
||||
- do_redirections (list, RX_ACTIVE);
|
||||
+ int ret = do_redirections (list, RX_ACTIVE);
|
||||
dispose_redirects (list);
|
||||
+ return (ret ? 1 : 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
@@ -603,7 +604,7 @@
|
||||
redirection.) */
|
||||
if (do_redirections (command->redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
|
||||
{
|
||||
- cleanup_redirects (redirection_undo_list);
|
||||
+ (void)cleanup_redirects (redirection_undo_list);
|
||||
redirection_undo_list = (REDIRECT *)NULL;
|
||||
dispose_exec_redirects ();
|
||||
return (EXECUTION_FAILURE);
|
||||
@@ -2593,7 +2594,7 @@
|
||||
int pipe_in, pipe_out, async;
|
||||
pid_t old_last_command_subst_pid;
|
||||
{
|
||||
- int r;
|
||||
+ int r, s;
|
||||
|
||||
if (pipe_in != NO_PIPE || pipe_out != NO_PIPE || async)
|
||||
{
|
||||
@@ -2632,10 +2633,10 @@
|
||||
substitution. Otherwise, return EXECUTION_SUCCESS. */
|
||||
|
||||
r = do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE);
|
||||
- cleanup_redirects (redirection_undo_list);
|
||||
+ s = cleanup_redirects (redirection_undo_list);
|
||||
redirection_undo_list = (REDIRECT *)NULL;
|
||||
|
||||
- if (r != 0)
|
||||
+ if (r != 0 || s != 0)
|
||||
return (EXECUTION_FAILURE);
|
||||
else if (old_last_command_subst_pid != last_command_subst_pid)
|
||||
return (last_command_exit_value);
|
||||
@@ -3404,7 +3405,7 @@
|
||||
|
||||
if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
|
||||
{
|
||||
- cleanup_redirects (redirection_undo_list);
|
||||
+ (void)cleanup_redirects (redirection_undo_list);
|
||||
redirection_undo_list = (REDIRECT *)NULL;
|
||||
dispose_exec_redirects ();
|
||||
return (EX_REDIRFAIL); /* was EXECUTION_FAILURE */
|
||||
@@ -3463,8 +3464,10 @@
|
||||
|
||||
if (redirection_undo_list)
|
||||
{
|
||||
- cleanup_redirects (redirection_undo_list);
|
||||
+ int ret = cleanup_redirects (redirection_undo_list);
|
||||
redirection_undo_list = (REDIRECT *)NULL;
|
||||
+ if (result == 0)
|
||||
+ result = ret;
|
||||
}
|
||||
|
||||
return (result);
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -urb bash.orig/shell.c bash/shell.c
|
||||
--- bash.orig/shell.c 2003-06-03 19:50:35.000000000 +0200
|
||||
+++ bash/shell.c 2003-09-28 00:26:28.000000000 +0200
|
||||
@@ -447,7 +447,7 @@
|
||||
if (dump_translatable_strings)
|
||||
read_but_dont_execute = 1;
|
||||
|
||||
- if (running_setuid && privileged_mode == 0)
|
||||
+ if (running_setuid && privileged_mode == 0 && act_like_sh == 0)
|
||||
disable_priv_mode ();
|
||||
|
||||
/* Need to get the argument to a -c option processed in the
|
||||
@@ -0,0 +1,19 @@
|
||||
--- lib/readline/display.c.orig 2004-11-08 13:08:07.591703936 +0200
|
||||
+++ lib/readline/display.c 2004-11-08 13:08:25.111040592 +0200
|
||||
@@ -941,6 +941,7 @@
|
||||
/* nleft == number of characters in the line buffer between the
|
||||
start of the line and the cursor position. */
|
||||
nleft = c_pos - pos;
|
||||
+#if 0
|
||||
|
||||
/* Since _rl_backspace() doesn't know about invisible characters in the
|
||||
prompt, and there's no good way to tell it, we compensate for
|
||||
@@ -954,6 +955,8 @@
|
||||
_rl_last_c_pos = nleft;
|
||||
}
|
||||
|
||||
+#endif
|
||||
+
|
||||
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
||||
_rl_move_cursor_relative (nleft, &invisible_line[pos]);
|
||||
else if (nleft != _rl_last_c_pos)
|
||||
@@ -0,0 +1,11 @@
|
||||
--- bash-3.0/parse.y.pwd 2005-03-15 14:22:36.000000000 +0000
|
||||
+++ bash-3.0/parse.y 2005-03-15 14:22:37.000000000 +0000
|
||||
@@ -4103,7 +4103,7 @@
|
||||
#define ROOT_PATH(x) ((x)[0] == '/' && (x)[1] == 0)
|
||||
#define DOUBLE_SLASH_ROOT(x) ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
|
||||
/* Abbreviate \W as ~ if $PWD == $HOME */
|
||||
- if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, temp) == 0))
|
||||
+ if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
|
||||
{
|
||||
if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
|
||||
{
|
||||
@@ -0,0 +1,77 @@
|
||||
diff -urb bash.orig/config.h.in bash/config.h.in
|
||||
--- bash.orig/config.h.in 2003-09-22 14:42:35.000000000 +0200
|
||||
+++ bash/config.h.in 2003-09-28 00:27:15.000000000 +0200
|
||||
@@ -606,6 +606,9 @@
|
||||
/* Define if you have the putenv function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
+/* Define if you have the random function. */
|
||||
+#undef HAVE_RANDOM
|
||||
+
|
||||
/* Define if you have the readlink function. */
|
||||
#undef HAVE_READLINK
|
||||
|
||||
@@ -696,6 +699,9 @@
|
||||
/* Define if you have the strsignal function or macro. */
|
||||
#undef HAVE_STRSIGNAL
|
||||
|
||||
+/* Define if you have the srandom function. */
|
||||
+#undef HAVE_SRANDOM
|
||||
+
|
||||
/* Define if you have the sysconf function. */
|
||||
#undef HAVE_SYSCONF
|
||||
|
||||
diff -urb bash.orig/variables.c bash/variables.c
|
||||
--- bash.orig/variables.c 2003-07-31 16:28:57.000000000 +0200
|
||||
+++ bash/variables.c 2003-09-28 00:27:15.000000000 +0200
|
||||
@@ -1098,16 +1098,22 @@
|
||||
static unsigned long rseed = 1;
|
||||
static int last_random_value;
|
||||
|
||||
-/* A linear congruential random number generator based on the example
|
||||
- one in the ANSI C standard. This one isn't very good, but a more
|
||||
- complicated one is overkill. */
|
||||
+/* Use the random number genrator provided by the standard C library,
|
||||
+ else use a linear congruential random number generator based on the
|
||||
+ ANSI C standard. This one isn't very good (the values are alternately
|
||||
+ odd and even, for example), but a more complicated one is overkill. */
|
||||
|
||||
/* Returns a pseudo-random number between 0 and 32767. */
|
||||
static int
|
||||
brand ()
|
||||
{
|
||||
+#if defined(HAVE_RANDOM)
|
||||
+ rseed = (unsigned int) (labs(random()) & 32767);
|
||||
+ return rseed;
|
||||
+#else
|
||||
rseed = rseed * 1103515245 + 12345;
|
||||
return ((unsigned int)((rseed >> 16) & 32767)); /* was % 32768 */
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Set the random number generator seed to SEED. */
|
||||
@@ -1115,8 +1121,12 @@
|
||||
sbrand (seed)
|
||||
unsigned long seed;
|
||||
{
|
||||
+#if defined(HAVE_SRANDOM)
|
||||
+ srandom(seed);
|
||||
+#else
|
||||
rseed = seed;
|
||||
last_random_value = 0;
|
||||
+#endif
|
||||
}
|
||||
|
||||
static SHELL_VAR *
|
||||
--- bash/configure.in~ 2004-03-02 00:04:29.000000000 +0100
|
||||
+++ bash/configure.in 2004-03-02 00:05:48.000000000 +0100
|
||||
@@ -667,6 +667,9 @@
|
||||
|
||||
AC_FUNC_MKTIME
|
||||
|
||||
+dnl checks for random functions
|
||||
+AC_CHECK_FUNCS(random srandom)
|
||||
+
|
||||
dnl
|
||||
dnl Checks for lib/intl and related code (uses some of the output from
|
||||
dnl AM_GNU_GETTEXT)
|
||||
@@ -0,0 +1,20 @@
|
||||
Description:
|
||||
When using 'read -u 3' or the like, and the pipe-buf already contains
|
||||
more than one line, the first line is returned, and bytes up to the next
|
||||
multiple of 128 are skipped.
|
||||
|
||||
http://lists.gnu.org/archive/html/bug-bash/2005-03/msg00168.html
|
||||
http://lists.gnu.org/archive/html/bug-bash/2005-03/msg00173.html
|
||||
http://bugs.gentoo.org/show_bug.cgi?id=87093
|
||||
|
||||
--- builtins/read.def
|
||||
+++ builtins/read.def
|
||||
@@ -276,7 +276,7 @@
|
||||
input_is_tty = isatty (fd);
|
||||
if (input_is_tty == 0)
|
||||
#ifndef __CYGWIN__
|
||||
- input_is_pipe = (lseek (0, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
|
||||
+ input_is_pipe = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
|
||||
#else
|
||||
input_is_pipe = 1;
|
||||
#endif
|
||||
@@ -0,0 +1,26 @@
|
||||
> Hmm, a better patch for this seems to be:
|
||||
|
||||
I installed this patch a while back:
|
||||
|
||||
*** ../bash-3.0-patched/lib/readline/display.c Wed Sep 8 11:07:51 2004
|
||||
--- lib/readline/display.c Fri Nov 12 13:31:42 2004
|
||||
***************
|
||||
*** 336,340 ****
|
||||
|
||||
local_prompt = local_prompt_prefix = (char *)0;
|
||||
! prompt_last_invisible = prompt_visible_length = 0;
|
||||
|
||||
if (prompt == 0 || *prompt == 0)
|
||||
--- 341,346 ----
|
||||
|
||||
local_prompt = local_prompt_prefix = (char *)0;
|
||||
! prompt_last_invisible = prompt_invis_chars_first_line = 0;
|
||||
! prompt_visible_length = prompt_physical_chars = 0;
|
||||
|
||||
if (prompt == 0 || *prompt == 0)
|
||||
|
||||
--
|
||||
``The lyf so short, the craft so long to lerne.'' - Chaucer
|
||||
( ``Discere est Dolere'' -- chet )
|
||||
Live...Laugh...Love
|
||||
Chet Ramey, ITS, CWRU chet@po.cwru.edu http://tiswww.tis.cwru.edu/~chet/
|
||||
@@ -0,0 +1,29 @@
|
||||
--- lib/readline/terminal.c.orig 2004-11-05 23:02:43.644054384 +0200
|
||||
+++ lib/readline/terminal.c 2004-11-05 23:04:09.357024032 +0200
|
||||
@@ -148,6 +148,10 @@
|
||||
/* Insert key */
|
||||
static char *_rl_term_kI;
|
||||
|
||||
+/* The key sequence sent by the Delete key, if any. */
|
||||
+static char *_rl_term_kD;
|
||||
+
|
||||
+
|
||||
/* Cursor control */
|
||||
static char *_rl_term_vs; /* very visible */
|
||||
static char *_rl_term_ve; /* normal */
|
||||
@@ -314,6 +318,7 @@
|
||||
{ "ic", &_rl_term_ic },
|
||||
{ "im", &_rl_term_im },
|
||||
{ "@", &_rl_term_kH }, /* home down ?? */
|
||||
+ { "kD", &_rl_term_kD },
|
||||
{ "kI", &_rl_term_kI }, /* insert */
|
||||
{ "kd", &_rl_term_kd },
|
||||
{ "ke", &_rl_term_ke }, /* end keypad mode */
|
||||
@@ -492,6 +497,7 @@
|
||||
|
||||
rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */
|
||||
rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line); /* End */
|
||||
+ rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete); /* Delete */
|
||||
|
||||
_rl_keymap = xkeymap;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
--- lib/readline/readline.h.orig 2004-11-05 23:05:22.918840936 +0200
|
||||
+++ lib/readline/readline.h 2004-11-05 23:05:47.657080152 +0200
|
||||
@@ -33,6 +33,7 @@
|
||||
# include "keymaps.h"
|
||||
# include "tilde.h"
|
||||
#else
|
||||
+# include <stdio.h>
|
||||
# include <readline/rlstdc.h>
|
||||
# include <readline/rltypedefs.h>
|
||||
# include <readline/keymaps.h>
|
||||
@@ -0,0 +1,11 @@
|
||||
--- lib/readline/shell.c~ 2004-10-17 13:07:37.000000000 +0200
|
||||
+++ lib/readline/shell.c 2004-10-17 13:06:48.000000000 +0200
|
||||
@@ -122,7 +122,7 @@
|
||||
{
|
||||
char *b;
|
||||
|
||||
-#if defined (HAVE_PUTENV)
|
||||
+#if 0
|
||||
b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
|
||||
sprintf (b, "LINES=%d", lines);
|
||||
putenv (b);
|
||||
@@ -0,0 +1,23 @@
|
||||
Don't barf on handled signals inside of scripts. Makes for nicer output.
|
||||
|
||||
patch by Martin Schlemmer <azarah@gentoo.org>
|
||||
|
||||
--- jobs.c
|
||||
+++ jobs.c
|
||||
@@ -2893,11 +2893,11 @@
|
||||
}
|
||||
else if (IS_FOREGROUND (job))
|
||||
{
|
||||
-#if !defined (DONT_REPORT_SIGPIPE)
|
||||
- if (termsig && WIFSIGNALED (s) && termsig != SIGINT)
|
||||
-#else
|
||||
- if (termsig && WIFSIGNALED (s) && termsig != SIGINT && termsig != SIGPIPE)
|
||||
-#endif
|
||||
+ if (termsig && WIFSIGNALED (s) && termsig != SIGINT &&
|
||||
+#if defined (DONT_REPORT_SIGPIPE)
|
||||
+ termsig != SIGPIPE &&
|
||||
+#endif
|
||||
+ signal_is_trapped (termsig) == 0)
|
||||
{
|
||||
fprintf (stderr, "%s", j_strsignal (termsig));
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
--- bash-3.0/builtins/ulimit.def 2004-08-27 17:29:19.662577512 +0100
|
||||
+++ bash-3.0/builtins/ulimit.def 2004-08-31 12:56:27.693244884 +0100
|
||||
@@ -35,14 +35,17 @@
|
||||
-c the maximum size of core files created
|
||||
-d the maximum size of a process's data segment
|
||||
-f the maximum size of files created by the shell
|
||||
+ -i the maximum number of pending signals
|
||||
-l the maximum size a process may lock into memory
|
||||
-m the maximum resident set size
|
||||
-n the maximum number of open file descriptors
|
||||
-p the pipe buffer size
|
||||
+ -q the maximum number of bytes in POSIX message queues
|
||||
-s the maximum stack size
|
||||
-t the maximum amount of cpu time in seconds
|
||||
-u the maximum number of user processes
|
||||
-v the size of virtual memory
|
||||
+ -x the maximum number of file locks
|
||||
|
||||
If LIMIT is given, it is the new value of the specified resource;
|
||||
the special LIMIT values `soft', `hard', and `unlimited' stand for
|
||||
@@ -200,6 +203,9 @@
|
||||
{ 'd', RLIMIT_DATA, 1024, "data seg size", "kbytes" },
|
||||
#endif
|
||||
{ 'f', RLIMIT_FILESIZE, 1024, "file size", "blocks" },
|
||||
+#ifdef RLIMIT_SIGPENDING
|
||||
+ { 'i', RLIMIT_SIGPENDING, 1, "pending signals", (char *)NULL},
|
||||
+#endif
|
||||
#ifdef RLIMIT_MEMLOCK
|
||||
{ 'l', RLIMIT_MEMLOCK, 1024, "max locked memory", "kbytes" },
|
||||
#endif
|
||||
@@ -208,6 +214,9 @@
|
||||
#endif /* RLIMIT_RSS */
|
||||
{ 'n', RLIMIT_OPENFILES, 1, "open files", (char *)NULL},
|
||||
{ 'p', RLIMIT_PIPESIZE, 512, "pipe size", "512 bytes" },
|
||||
+#ifdef RLIMIT_MSGQUEUE
|
||||
+ { 'q', RLIMIT_MSGQUEUE, 1, "POSIX message queues", "bytes" },
|
||||
+#endif
|
||||
#ifdef RLIMIT_STACK
|
||||
{ 's', RLIMIT_STACK, 1024, "stack size", "kbytes" },
|
||||
#endif
|
||||
@@ -221,6 +230,9 @@
|
||||
#ifdef RLIMIT_SWAP
|
||||
{ 'w', RLIMIT_SWAP, 1024, "swap size", "kbytes" },
|
||||
#endif
|
||||
+#ifdef RLIMIT_LOCKS
|
||||
+ { 'x', RLIMIT_LOCKS, 1, "file locks", (char *)NULL},
|
||||
+#endif
|
||||
{ -1, -1, -1, (char *)NULL, (char *)NULL }
|
||||
};
|
||||
#define NCMDS (sizeof(limits) / sizeof(limits[0]))
|
||||
@@ -647,11 +659,11 @@
|
||||
|
||||
for (i = 0; limits[i].option > 0; i++)
|
||||
{
|
||||
- if (get_limit (i, &softlim, &hardlim) < 0)
|
||||
+ if (get_limit (i, &softlim, &hardlim) == 0)
|
||||
+ printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
|
||||
+ else if (errno != EINVAL)
|
||||
builtin_error ("%s: cannot get limit: %s", limits[i].description,
|
||||
strerror (errno));
|
||||
- else
|
||||
- printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -670,7 +682,7 @@
|
||||
else
|
||||
sprintf (unitstr, "(-%c) ", limits[limind].option);
|
||||
|
||||
- printf ("%-18s %16s", limits[limind].description, unitstr);
|
||||
+ printf ("%-20s %16s", limits[limind].description, unitstr);
|
||||
}
|
||||
if (curlim == RLIM_INFINITY)
|
||||
puts ("unlimited");
|
||||
@@ -0,0 +1,261 @@
|
||||
--- bash-3.0/subst.c.multibyteifs 2004-08-20 15:22:48.366497771 +0100
|
||||
+++ bash-3.0/subst.c 2004-08-20 18:13:30.833624616 +0100
|
||||
@@ -124,7 +124,12 @@
|
||||
SHELL_VAR *ifs_var;
|
||||
char *ifs_value;
|
||||
unsigned char ifs_cmap[UCHAR_MAX + 1];
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+unsigned char ifs_firstc[MB_LEN_MAX];
|
||||
+size_t ifs_firstc_len;
|
||||
+#else
|
||||
unsigned char ifs_firstc;
|
||||
+#endif
|
||||
|
||||
/* Extern functions and variables from different files. */
|
||||
extern int last_command_exit_value, last_command_exit_signal;
|
||||
@@ -862,8 +867,14 @@
|
||||
char *charlist;
|
||||
{
|
||||
register int i = *sindex;
|
||||
+ size_t slen;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t clen;
|
||||
+ wchar_t *wcharlist = NULL;
|
||||
+#endif
|
||||
int c;
|
||||
char *temp;
|
||||
+ DECLARE_MBSTATE;
|
||||
|
||||
if (charlist[0] == '\'' && charlist[1] == '\0')
|
||||
{
|
||||
@@ -872,18 +883,65 @@
|
||||
return temp;
|
||||
}
|
||||
|
||||
- for (i = *sindex; c = string[i]; i++)
|
||||
+ slen = strlen (string + *sindex) + *sindex;
|
||||
+ i = *sindex;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ clen = strlen (charlist);
|
||||
+#endif
|
||||
+ while ((c = string[i]))
|
||||
{
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t mblength;
|
||||
+#endif
|
||||
+
|
||||
if (c == CTLESC)
|
||||
{
|
||||
- i++;
|
||||
+ i += 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ mblength = mblen (string + i, slen - i);
|
||||
+ if (mblength > 1)
|
||||
+ {
|
||||
+ wchar_t wc;
|
||||
+ size_t mblength = mbtowc (&wc, string + i, slen - i);
|
||||
+ if (MB_INVALIDCH (mblength))
|
||||
+ {
|
||||
+ if (MEMBER (c, charlist))
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (!wcharlist)
|
||||
+ {
|
||||
+ size_t len = mbstowcs (wcharlist, charlist, 0);
|
||||
+ if (len == -1)
|
||||
+ len = 0;
|
||||
+ wcharlist = xmalloc (1 + sizeof (wchar_t) * len);
|
||||
+ mbstowcs (wcharlist, charlist, len);
|
||||
+ }
|
||||
+
|
||||
+ if (wcschr (wcharlist, wc))
|
||||
+ {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+#endif
|
||||
+
|
||||
if (MEMBER (c, charlist))
|
||||
break;
|
||||
+
|
||||
+ ADVANCE_CHAR (string, slen, i);
|
||||
}
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (wcharlist)
|
||||
+ free (wcharlist);
|
||||
+#endif
|
||||
+
|
||||
temp = substring (string, *sindex, i);
|
||||
*sindex = i;
|
||||
|
||||
@@ -1456,11 +1514,36 @@
|
||||
d2 = 0;
|
||||
if (delims)
|
||||
{
|
||||
- d2 = (char *)xmalloc (strlen (delims) + 1);
|
||||
- for (i = ts = 0; delims[i]; i++)
|
||||
+ size_t slength = strlen (delims);
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t mblength = 1;
|
||||
+ DECLARE_MBSTATE;
|
||||
+#endif
|
||||
+
|
||||
+ d2 = (char *)xmalloc (slength + 1);
|
||||
+ i = ts = 0;
|
||||
+ while (delims[i])
|
||||
{
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ mbstate_t state_bak = state;
|
||||
+ mblength = mbrlen (delims + i, slength, &state);
|
||||
+
|
||||
+ if (MB_INVALIDCH (mblength))
|
||||
+ state = state_bak;
|
||||
+ else if (mblength != 1)
|
||||
+ {
|
||||
+ memcpy (d2 + ts, delims + i, mblength);
|
||||
+ ts += mblength;
|
||||
+ i += mblength;
|
||||
+ slength -= mblength;
|
||||
+ continue;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (whitespace(delims[i]) == 0)
|
||||
d2[ts++] = delims[i];
|
||||
+ i++;
|
||||
+ slength--;
|
||||
}
|
||||
d2[ts] = '\0';
|
||||
}
|
||||
@@ -1654,10 +1737,19 @@
|
||||
string_list_dollar_star (list)
|
||||
WORD_LIST *list;
|
||||
{
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ char sep[MB_CUR_MAX + 1];
|
||||
+#else
|
||||
char sep[2];
|
||||
+#endif
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ memcpy (sep, ifs_firstc, ifs_firstc_len);
|
||||
+ sep[ifs_firstc_len] = '\0';
|
||||
+#else
|
||||
sep[0] = ifs_firstc;
|
||||
sep[1] = '\0';
|
||||
+#endif
|
||||
|
||||
return (string_list_internal (list, sep));
|
||||
}
|
||||
@@ -1676,14 +1768,41 @@
|
||||
WORD_LIST *list;
|
||||
int quoted;
|
||||
{
|
||||
- char *ifs, sep[2];
|
||||
+ char *ifs;
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ char sep[MB_CUR_MAX + 1];
|
||||
+#else
|
||||
+ char sep[2];
|
||||
+#endif
|
||||
WORD_LIST *tlist;
|
||||
|
||||
/* XXX this could just be ifs = ifs_value; */
|
||||
ifs = ifs_var ? value_cell (ifs_var) : (char *)0;
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (ifs && *ifs)
|
||||
+ {
|
||||
+ size_t mblength = mblen (ifs, strnlen (ifs, MB_CUR_MAX));
|
||||
+ if (MB_INVALIDCH (mblength))
|
||||
+ {
|
||||
+ sep[0] = *ifs;
|
||||
+ sep[1] = '\0';
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ memcpy (sep, ifs, mblength);
|
||||
+ sep[mblength] = '\0';
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ sep[0] = ' ';
|
||||
+ sep[1] = '\0';
|
||||
+ }
|
||||
+#else
|
||||
sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs;
|
||||
sep[1] = '\0';
|
||||
+#endif
|
||||
|
||||
tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0))
|
||||
? quote_list (list)
|
||||
@@ -1732,6 +1851,7 @@
|
||||
WORD_DESC *t;
|
||||
char *current_word, *s;
|
||||
int sindex, sh_style_split, whitesep;
|
||||
+ size_t slen = 0;
|
||||
|
||||
if (!string || !*string)
|
||||
return ((WORD_LIST *)NULL);
|
||||
@@ -1805,7 +1925,12 @@
|
||||
|
||||
/* Move past the current separator character. */
|
||||
if (string[sindex])
|
||||
- sindex++;
|
||||
+ {
|
||||
+ DECLARE_MBSTATE;
|
||||
+ if (!slen)
|
||||
+ slen = strlen (string);
|
||||
+ ADVANCE_CHAR (string, slen, sindex);
|
||||
+ }
|
||||
|
||||
/* Now skip sequences of space, tab, or newline characters if they are
|
||||
in the list of separators. */
|
||||
@@ -6796,7 +6921,21 @@
|
||||
ifs_cmap[uc] = 1;
|
||||
}
|
||||
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+ if (!ifs_value)
|
||||
+ {
|
||||
+ ifs_firstc[0] = '\0';
|
||||
+ ifs_firstc_len = 1;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ size_t ifs_len = strnlen (ifs_value, MB_CUR_MAX);
|
||||
+ ifs_firstc_len = mblen (ifs_value, ifs_len);
|
||||
+ memcpy (ifs_firstc, ifs_value, ifs_firstc_len);
|
||||
+ }
|
||||
+#else
|
||||
ifs_firstc = ifs_value ? *ifs_value : 0;
|
||||
+#endif
|
||||
}
|
||||
|
||||
char *
|
||||
--- bash-3.0/subst.h.multibyteifs 2004-08-20 15:51:08.301074583 +0100
|
||||
+++ bash-3.0/subst.h 2004-08-20 15:51:39.070206473 +0100
|
||||
@@ -231,7 +231,12 @@
|
||||
extern SHELL_VAR *ifs_var;
|
||||
extern char *ifs_value;
|
||||
extern unsigned char ifs_cmap[];
|
||||
+#if defined (HANDLE_MULTIBYTE)
|
||||
+extern unsigned char ifs_firstc[];
|
||||
+extern size_t ifs_firstc_len;
|
||||
+#else
|
||||
extern unsigned char ifs_firstc;
|
||||
+#endif
|
||||
|
||||
/* Evaluates to 1 if C is a character in $IFS. */
|
||||
#define isifs(c) (ifs_cmap[(unsigned char)(c)] != 0)
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
--- lib/readline/display.c
|
||||
+++ lib/readline/display.c 2004-07-30 17:02:51.000000000 +0200
|
||||
@@ -1387,7 +1387,7 @@
|
||||
insert_some_chars (nfd, lendiff, col_lendiff);
|
||||
_rl_last_c_pos += col_lendiff;
|
||||
}
|
||||
- else if (*ols == 0 && lendiff > 0)
|
||||
+ else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && (*ols == 0 && lendiff > 0))
|
||||
{
|
||||
/* At the end of a line the characters do not have to
|
||||
be "inserted". They can just be placed on the screen. */
|
||||
--- lib/readline/histexpand.c
|
||||
+++ lib/readline/histexpand.c 2004-07-30 17:02:10.000000000 +0200
|
||||
@@ -206,6 +206,7 @@
|
||||
|
||||
/* Only a closing `?' or a newline delimit a substring search string. */
|
||||
for (local_index = i; c = string[i]; i++)
|
||||
+ {
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
||||
{
|
||||
@@ -221,8 +222,8 @@
|
||||
i += v - 1;
|
||||
continue;
|
||||
}
|
||||
- }
|
||||
- else
|
||||
+ }
|
||||
+
|
||||
#endif /* HANDLE_MULTIBYTE */
|
||||
if ((!substring_okay && (whitespace (c) || c == ':' ||
|
||||
(history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
|
||||
@@ -230,6 +231,7 @@
|
||||
string[i] == '\n' ||
|
||||
(substring_okay && string[i] == '?'))
|
||||
break;
|
||||
+ }
|
||||
|
||||
which = i - local_index;
|
||||
temp = (char *)xmalloc (1 + which);
|
||||
@@ -0,0 +1,164 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-001
|
||||
|
||||
Bug-Reported-by: Karlheinz Nolte <kn@k-nolte.de>
|
||||
Bug-Reference-ID: <20040801200058.GA3311@mars.home.k-nolte.de>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00009.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
The following script triggers the segfault.
|
||||
This was found by Costa Tsaousis the author of FireHOL.
|
||||
He wrotes:
|
||||
|
||||
"I think I have found the bug. The script bellow crashes at the
|
||||
third echo (UNSET). It seems to be a problem of the "unset" BASH
|
||||
function when erasing arrays. It leaves something behind so that if
|
||||
the array just unset is referenced, it produces a segmentation fault.
|
||||
According to the documentation the first and the third expansions
|
||||
should be exactly the same."
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/arrayfunc.c Fri Dec 19 00:03:09 2003
|
||||
--- arrayfunc.c Sun Aug 1 20:43:00 2004
|
||||
***************
|
||||
*** 612,616 ****
|
||||
|
||||
free (t);
|
||||
! return var;
|
||||
}
|
||||
|
||||
--- 612,616 ----
|
||||
|
||||
free (t);
|
||||
! return (var == 0 || invisible_p (var)) ? (SHELL_VAR *)0 : var;
|
||||
}
|
||||
|
||||
|
||||
*** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004
|
||||
--- subst.c Thu Aug 12 13:36:17 2004
|
||||
***************
|
||||
*** 4983,4987 ****
|
||||
return -1;
|
||||
}
|
||||
! else if ((v = find_variable (varname)) && array_p (v))
|
||||
{
|
||||
vtype = VT_ARRAYMEMBER;
|
||||
--- 5003,5007 ----
|
||||
return -1;
|
||||
}
|
||||
! else if ((v = find_variable (varname)) && (invisible_p (v) == 0) && array_p (v))
|
||||
{
|
||||
vtype = VT_ARRAYMEMBER;
|
||||
|
||||
*** ../bash-3.0/variables.c Sun Jul 4 13:57:26 2004
|
||||
--- variables.c Wed Aug 4 15:28:04 2004
|
||||
***************
|
||||
*** 1420,1428 ****
|
||||
|
||||
# if defined (DEBUGGER)
|
||||
! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, (att_invisible|att_noassign));
|
||||
! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, (att_invisible|att_noassign));
|
||||
# endif /* DEBUGGER */
|
||||
! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, (att_invisible|att_noassign));
|
||||
! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, (att_invisible|att_noassign));
|
||||
#endif
|
||||
|
||||
--- 1420,1428 ----
|
||||
|
||||
# if defined (DEBUGGER)
|
||||
! v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign);
|
||||
! v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign);
|
||||
# endif /* DEBUGGER */
|
||||
! v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign);
|
||||
! v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign);
|
||||
#endif
|
||||
|
||||
***************
|
||||
*** 1600,1604 ****
|
||||
old_var = find_variable (name);
|
||||
if (old_var && local_p (old_var) && old_var->context == variable_context)
|
||||
! return (old_var);
|
||||
|
||||
was_tmpvar = old_var && tempvar_p (old_var);
|
||||
--- 1600,1607 ----
|
||||
old_var = find_variable (name);
|
||||
if (old_var && local_p (old_var) && old_var->context == variable_context)
|
||||
! {
|
||||
! VUNSETATTR (old_var, att_invisible);
|
||||
! return (old_var);
|
||||
! }
|
||||
|
||||
was_tmpvar = old_var && tempvar_p (old_var);
|
||||
*** ../bash-3.0/pcomplete.c Thu Jan 8 10:36:17 2004
|
||||
--- pcomplete.c Tue Aug 3 23:15:41 2004
|
||||
***************
|
||||
*** 864,867 ****
|
||||
--- 864,869 ----
|
||||
v = convert_var_to_array (v);
|
||||
v = assign_array_var_from_word_list (v, lwords);
|
||||
+
|
||||
+ VUNSETATTR (v, att_invisible);
|
||||
return v;
|
||||
}
|
||||
***************
|
||||
*** 1022,1025 ****
|
||||
--- 1024,1029 ----
|
||||
if (array_p (v) == 0)
|
||||
v = convert_var_to_array (v);
|
||||
+
|
||||
+ VUNSETATTR (v, att_invisible);
|
||||
|
||||
a = array_cell (v);
|
||||
*** ../bash-3.0/array.c Thu May 6 08:24:13 2004
|
||||
--- array.c Wed Aug 25 15:50:42 2004
|
||||
***************
|
||||
*** 452,456 ****
|
||||
array_dispose_element(new);
|
||||
free(element_value(ae));
|
||||
! ae->value = savestring(v);
|
||||
return(0);
|
||||
} else if (element_index(ae) > i) {
|
||||
--- 454,458 ----
|
||||
array_dispose_element(new);
|
||||
free(element_value(ae));
|
||||
! ae->value = v ? savestring(v) : (char *)NULL;
|
||||
return(0);
|
||||
} else if (element_index(ae) > i) {
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 0
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 1
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
*** ../bash-3.0/tests/dbg-support.tests Tue Mar 25 15:33:03 2003
|
||||
--- tests/dbg-support.tests Tue Aug 3 23:09:29 2004
|
||||
***************
|
||||
*** 63,68 ****
|
||||
trap 'print_return_trap $LINENO' RETURN
|
||||
|
||||
! # Funcname is now an array. Vanilla Bash 2.05 doesn't have FUNCNAME array.
|
||||
! echo "FUNCNAME" ${FUNCNAME[0]}
|
||||
|
||||
# We should trace into the below.
|
||||
--- 63,68 ----
|
||||
trap 'print_return_trap $LINENO' RETURN
|
||||
|
||||
! # Funcname is now an array, but you still can't see it outside a function
|
||||
! echo "FUNCNAME" ${FUNCNAME[0]:-main}
|
||||
|
||||
# We should trace into the below.
|
||||
@@ -0,0 +1,66 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-002
|
||||
|
||||
Bug-Reported-by: "Ralf S. Engelschall" <rse@engelschall.com>
|
||||
Bug-Reference-ID: <20040728082038.GA31398@engelschall.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00262.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
After upgrading the OpenPKG "bash" package to 3.0, we had to discover
|
||||
that the prompt handling on Bash 3.0 / Readline 5.0 is broken if a
|
||||
multiline prompt (a string containing newlines) is used. The effect is
|
||||
that on the first input line (where the last line of the prompt is the
|
||||
prefix) the input line is wrapped N characters before the last column
|
||||
where N seems to be exactly the length (including newlines) of the
|
||||
prompt ($PS1) minus the characters on the last line of the prompt.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/lib/readline/display.c Thu May 27 22:57:51 2004
|
||||
--- lib/readline/display.c Wed Jul 28 13:48:04 2004
|
||||
***************
|
||||
*** 352,356 ****
|
||||
&prompt_last_invisible,
|
||||
(int *)NULL,
|
||||
! (int *)NULL);
|
||||
c = *t; *t = '\0';
|
||||
/* The portion of the prompt string up to and including the
|
||||
--- 352,356 ----
|
||||
&prompt_last_invisible,
|
||||
(int *)NULL,
|
||||
! &prompt_physical_chars);
|
||||
c = *t; *t = '\0';
|
||||
/* The portion of the prompt string up to and including the
|
||||
***************
|
||||
*** 359,363 ****
|
||||
(int *)NULL,
|
||||
&prompt_invis_chars_first_line,
|
||||
! &prompt_physical_chars);
|
||||
*t = c;
|
||||
return (prompt_prefix_length);
|
||||
--- 359,363 ----
|
||||
(int *)NULL,
|
||||
&prompt_invis_chars_first_line,
|
||||
! (int *)NULL);
|
||||
*t = c;
|
||||
return (prompt_prefix_length);
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 1
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,124 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-003
|
||||
|
||||
Bug-Reported-by: Egmont Koblinger <egmont@uhulinux.hu>
|
||||
Bug-Reference-ID: <Pine.LNX.4.58L0.0407290044500.12603@sziami.cs.bme.hu>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00279.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Bash no longer accepts the `trap signum' syntax when in POSIX mode. This
|
||||
patch restores a measure of backwards compatibility.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/builtins/trap.def Thu May 27 22:26:19 2004
|
||||
--- builtins/trap.def Thu Aug 5 08:55:43 2004
|
||||
***************
|
||||
*** 24,28 ****
|
||||
$BUILTIN trap
|
||||
$FUNCTION trap_builtin
|
||||
! $SHORT_DOC trap [-lp] [[arg] signal_spec ...]
|
||||
The command ARG is to be read and executed when the shell receives
|
||||
signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC
|
||||
--- 24,28 ----
|
||||
$BUILTIN trap
|
||||
$FUNCTION trap_builtin
|
||||
! $SHORT_DOC trap [-lp] [arg signal_spec ...]
|
||||
The command ARG is to be read and executed when the shell receives
|
||||
signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC
|
||||
***************
|
||||
*** 88,92 ****
|
||||
WORD_LIST *list;
|
||||
{
|
||||
! int list_signal_names, display, result, opt;
|
||||
|
||||
list_signal_names = display = 0;
|
||||
--- 88,92 ----
|
||||
WORD_LIST *list;
|
||||
{
|
||||
! int list_signal_names, display, result, opt, first_signal;
|
||||
|
||||
list_signal_names = display = 0;
|
||||
***************
|
||||
*** 119,130 ****
|
||||
{
|
||||
char *first_arg;
|
||||
! int operation, sig;
|
||||
|
||||
operation = SET;
|
||||
first_arg = list->word->word;
|
||||
/* When in posix mode, the historical behavior of looking for a
|
||||
missing first argument is disabled. To revert to the original
|
||||
signal handling disposition, use `-' as the first argument. */
|
||||
! if (posixly_correct == 0 && first_arg && *first_arg &&
|
||||
(*first_arg != '-' || first_arg[1]) &&
|
||||
signal_object_p (first_arg, opt) && list->next == 0)
|
||||
--- 119,135 ----
|
||||
{
|
||||
char *first_arg;
|
||||
! int operation, sig, first_signal;
|
||||
|
||||
operation = SET;
|
||||
first_arg = list->word->word;
|
||||
+ first_signal = first_arg && *first_arg && all_digits (first_arg) && signal_object_p (first_arg, opt);
|
||||
+
|
||||
+ /* Backwards compatibility */
|
||||
+ if (first_signal)
|
||||
+ operation = REVERT;
|
||||
/* When in posix mode, the historical behavior of looking for a
|
||||
missing first argument is disabled. To revert to the original
|
||||
signal handling disposition, use `-' as the first argument. */
|
||||
! else if (posixly_correct == 0 && first_arg && *first_arg &&
|
||||
(*first_arg != '-' || first_arg[1]) &&
|
||||
signal_object_p (first_arg, opt) && list->next == 0)
|
||||
*** ../bash-3.0/doc/bashref.texi Sat Jun 26 14:26:07 2004
|
||||
--- doc/bashref.texi Fri Aug 27 12:33:46 2004
|
||||
***************
|
||||
*** 5954,5958 ****
|
||||
The @code{trap} builtin doesn't check the first argument for a possible
|
||||
signal specification and revert the signal handling to the original
|
||||
! disposition if it is. If users want to reset the handler for a given
|
||||
signal to the original disposition, they should use @samp{-} as the
|
||||
first argument.
|
||||
--- 5967,5972 ----
|
||||
The @code{trap} builtin doesn't check the first argument for a possible
|
||||
signal specification and revert the signal handling to the original
|
||||
! disposition if it is, unless that argument consists solely of digits and
|
||||
! is a valid signal number. If users want to reset the handler for a given
|
||||
signal to the original disposition, they should use @samp{-} as the
|
||||
first argument.
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
*** ../bash-3.0/tests/errors.right Thu May 27 22:26:03 2004
|
||||
--- tests/errors.right Sat Aug 7 22:35:10 2004
|
||||
***************
|
||||
*** 86,90 ****
|
||||
./errors.tests: line 216: trap: NOSIG: invalid signal specification
|
||||
./errors.tests: line 219: trap: -s: invalid option
|
||||
! trap: usage: trap [-lp] [[arg] signal_spec ...]
|
||||
./errors.tests: line 225: return: can only `return' from a function or sourced script
|
||||
./errors.tests: line 229: break: 0: loop count out of range
|
||||
--- 86,90 ----
|
||||
./errors.tests: line 216: trap: NOSIG: invalid signal specification
|
||||
./errors.tests: line 219: trap: -s: invalid option
|
||||
! trap: usage: trap [-lp] [arg signal_spec ...]
|
||||
./errors.tests: line 225: return: can only `return' from a function or sourced script
|
||||
./errors.tests: line 229: break: 0: loop count out of range
|
||||
@@ -0,0 +1,145 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-004
|
||||
|
||||
Bug-Reported-by: Stephane Chazelas <stephane_chazelas@yahoo.fr>
|
||||
Bug-Reference-ID: <20040902131957.GC1860@frhdtmp102861.morse.corp.wan>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00291.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Calculation of lengths and offsets for parameter string length and substring
|
||||
expansion does not correctly account for multibyte characters.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004
|
||||
--- subst.c Thu Aug 12 13:36:17 2004
|
||||
***************
|
||||
*** 4692,4695 ****
|
||||
--- 4692,4715 ----
|
||||
}
|
||||
|
||||
+ #if defined (HANDLE_MULTIBYTE)
|
||||
+ size_t
|
||||
+ mbstrlen (s)
|
||||
+ const char *s;
|
||||
+ {
|
||||
+ size_t clen, nc;
|
||||
+ mbstate_t mbs;
|
||||
+
|
||||
+ nc = 0;
|
||||
+ memset (&mbs, 0, sizeof (mbs));
|
||||
+ while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0))
|
||||
+ {
|
||||
+ s += clen;
|
||||
+ nc++;
|
||||
+ }
|
||||
+ return nc;
|
||||
+ }
|
||||
+ #endif
|
||||
+
|
||||
+
|
||||
/* Handle the parameter brace expansion that requires us to return the
|
||||
length of a parameter. */
|
||||
***************
|
||||
*** 4747,4758 ****
|
||||
{
|
||||
t = get_dollar_var_value (arg_index);
|
||||
! number = STRLEN (t);
|
||||
FREE (t);
|
||||
}
|
||||
#if defined (ARRAY_VARS)
|
||||
! else if ((var = find_variable (name + 1)) && array_p (var))
|
||||
{
|
||||
t = array_reference (array_cell (var), 0);
|
||||
! number = STRLEN (t);
|
||||
}
|
||||
#endif
|
||||
--- 4767,4778 ----
|
||||
{
|
||||
t = get_dollar_var_value (arg_index);
|
||||
! number = MB_STRLEN (t);
|
||||
FREE (t);
|
||||
}
|
||||
#if defined (ARRAY_VARS)
|
||||
! else if ((var = find_variable (name + 1)) && (invisible_p (var) == 0) && array_p (var))
|
||||
{
|
||||
t = array_reference (array_cell (var), 0);
|
||||
! number = MB_STRLEN (t);
|
||||
}
|
||||
#endif
|
||||
***************
|
||||
*** 4767,4771 ****
|
||||
dispose_words (list);
|
||||
|
||||
! number = STRLEN (t);
|
||||
FREE (t);
|
||||
}
|
||||
--- 4787,4791 ----
|
||||
dispose_words (list);
|
||||
|
||||
! number = MB_STRLEN (t);
|
||||
FREE (t);
|
||||
}
|
||||
***************
|
||||
*** 4872,4876 ****
|
||||
case VT_VARIABLE:
|
||||
case VT_ARRAYMEMBER:
|
||||
! len = strlen (value);
|
||||
break;
|
||||
case VT_POSPARMS:
|
||||
--- 4892,4896 ----
|
||||
case VT_VARIABLE:
|
||||
case VT_ARRAYMEMBER:
|
||||
! len = MB_STRLEN (value);
|
||||
break;
|
||||
case VT_POSPARMS:
|
||||
*** ../bash-3.0/include/shmbutil.h Mon Apr 19 09:59:42 2004
|
||||
--- include/shmbutil.h Thu Sep 2 15:20:47 2004
|
||||
***************
|
||||
*** 32,35 ****
|
||||
--- 32,37 ----
|
||||
extern size_t xdupmbstowcs __P((wchar_t **, char ***, const char *));
|
||||
|
||||
+ extern size_t mbstrlen __P((const char *));
|
||||
+
|
||||
extern char *xstrchr __P((const char *, int));
|
||||
|
||||
***************
|
||||
*** 39,42 ****
|
||||
--- 41,47 ----
|
||||
#endif
|
||||
|
||||
+ #define MBSLEN(s) (((s) && (s)[0]) ? ((s)[1] ? mbstrlen (s) : 1) : 0)
|
||||
+ #define MB_STRLEN(s) ((MB_CUR_MAX > 1) ? MBSLEN (s) : STRLEN (s))
|
||||
+
|
||||
#else /* !HANDLE_MULTIBYTE */
|
||||
|
||||
***************
|
||||
*** 54,57 ****
|
||||
--- 59,64 ----
|
||||
#define MB_NULLWCH(x) (0)
|
||||
#endif
|
||||
+
|
||||
+ #define MB_STRLEN(s) (STRLEN(s))
|
||||
|
||||
#endif /* !HANDLE_MULTIBYTE */
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 4
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,63 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-005
|
||||
|
||||
Bug-Reported-by: schwab@suse.de
|
||||
Bug-Reference-ID: <20040801085535.E83D41DB3FFE9@sykes.suse.de>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00004.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Moving upwards in the history (with previous-history) and back again
|
||||
clobbers the last history line.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/lib/readline/misc.c Wed Jul 7 08:56:32 2004
|
||||
--- lib/readline/misc.c Sat Aug 7 22:38:53 2004
|
||||
***************
|
||||
*** 277,286 ****
|
||||
_rl_saved_line_for_history->data = (char *)rl_undo_list;
|
||||
}
|
||||
- else if (STREQ (rl_line_buffer, _rl_saved_line_for_history->line) == 0)
|
||||
- {
|
||||
- free (_rl_saved_line_for_history->line);
|
||||
- _rl_saved_line_for_history->line = savestring (rl_line_buffer);
|
||||
- _rl_saved_line_for_history->data = (char *)rl_undo_list; /* XXX possible memleak */
|
||||
- }
|
||||
|
||||
return 0;
|
||||
--- 277,280 ----
|
||||
*** ../bash-3.0/lib/readline/vi_mode.c Tue Jul 13 14:08:27 2004
|
||||
--- lib/readline/vi_mode.c Tue Aug 17 00:12:09 2004
|
||||
***************
|
||||
*** 273,280 ****
|
||||
--- 273,282 ----
|
||||
{
|
||||
case '?':
|
||||
+ _rl_free_saved_history_line ();
|
||||
rl_noninc_forward_search (count, key);
|
||||
break;
|
||||
|
||||
case '/':
|
||||
+ _rl_free_saved_history_line ();
|
||||
rl_noninc_reverse_search (count, key);
|
||||
break;
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 4
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 5
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,165 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-006
|
||||
|
||||
Bug-Reported-by: alexander@skwar.name
|
||||
Tomohiro KUBOTA <debian@tmail.plala.or.jp>
|
||||
Bug-Reference-ID: <20040801124721.C69B8A2547A@server.bei.digitalprojects.com>
|
||||
<16688.41450.433668.480445@gargle.gargle.HOWL>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00006.html
|
||||
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=257540
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Prompts with multibyte characters or invisible characters following a line
|
||||
wrap are displayed incorrectly.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/lib/readline/display.c Thu May 27 22:57:51 2004
|
||||
--- lib/readline/display.c Mon Aug 30 11:55:02 2004
|
||||
***************
|
||||
*** 202,206 ****
|
||||
{
|
||||
char *r, *ret, *p;
|
||||
! int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
|
||||
|
||||
/* Short-circuit if we can. */
|
||||
--- 202,206 ----
|
||||
{
|
||||
char *r, *ret, *p;
|
||||
! int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
|
||||
|
||||
/* Short-circuit if we can. */
|
||||
***************
|
||||
*** 223,226 ****
|
||||
--- 223,227 ----
|
||||
|
||||
invfl = 0; /* invisible chars in first line of prompt */
|
||||
+ invflset = 0; /* we only want to set invfl once */
|
||||
|
||||
for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
|
||||
***************
|
||||
*** 250,254 ****
|
||||
*r++ = *p++;
|
||||
if (!ignoring)
|
||||
! rl += ind - pind;
|
||||
else
|
||||
ninvis += ind - pind;
|
||||
--- 251,258 ----
|
||||
*r++ = *p++;
|
||||
if (!ignoring)
|
||||
! {
|
||||
! rl += ind - pind;
|
||||
! physchars += _rl_col_width (pmt, pind, ind);
|
||||
! }
|
||||
else
|
||||
ninvis += ind - pind;
|
||||
***************
|
||||
*** 260,273 ****
|
||||
*r++ = *p;
|
||||
if (!ignoring)
|
||||
! rl++; /* visible length byte counter */
|
||||
else
|
||||
ninvis++; /* invisible chars byte counter */
|
||||
}
|
||||
|
||||
! if (rl >= _rl_screenwidth)
|
||||
! invfl = ninvis;
|
||||
!
|
||||
! if (ignoring == 0)
|
||||
! physchars++;
|
||||
}
|
||||
}
|
||||
--- 264,280 ----
|
||||
*r++ = *p;
|
||||
if (!ignoring)
|
||||
! {
|
||||
! rl++; /* visible length byte counter */
|
||||
! physchars++;
|
||||
! }
|
||||
else
|
||||
ninvis++; /* invisible chars byte counter */
|
||||
}
|
||||
|
||||
! if (invflset == 0 && rl >= _rl_screenwidth)
|
||||
! {
|
||||
! invfl = ninvis;
|
||||
! invflset = 1;
|
||||
! }
|
||||
}
|
||||
}
|
||||
***************
|
||||
*** 418,422 ****
|
||||
register char *line;
|
||||
int c_pos, inv_botlin, lb_botlin, lb_linenum;
|
||||
! int newlines, lpos, temp, modmark;
|
||||
char *prompt_this_line;
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
--- 425,429 ----
|
||||
register char *line;
|
||||
int c_pos, inv_botlin, lb_botlin, lb_linenum;
|
||||
! int newlines, lpos, temp, modmark, n0, num;
|
||||
char *prompt_this_line;
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
***************
|
||||
*** 574,577 ****
|
||||
--- 581,585 ----
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
memset (_rl_wrapped_line, 0, vis_lbsize);
|
||||
+ num = 0;
|
||||
#endif
|
||||
|
||||
***************
|
||||
*** 592,596 ****
|
||||
--- 600,619 ----
|
||||
prompts that exceed two physical lines?
|
||||
Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
|
||||
+ #if defined (HANDLE_MULTIBYTE)
|
||||
+ n0 = num;
|
||||
+ temp = local_prompt ? strlen (local_prompt) : 0;
|
||||
+ while (num < temp)
|
||||
+ {
|
||||
+ if (_rl_col_width (local_prompt, n0, num) > _rl_screenwidth)
|
||||
+ {
|
||||
+ num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY);
|
||||
+ break;
|
||||
+ }
|
||||
+ num++;
|
||||
+ }
|
||||
+ temp = num +
|
||||
+ #else
|
||||
temp = ((newlines + 1) * _rl_screenwidth) +
|
||||
+ #endif /* !HANDLE_MULTIBYTE */
|
||||
((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
|
||||
: ((newlines == 1) ? wrap_offset : 0))
|
||||
***************
|
||||
*** 598,602 ****
|
||||
--- 621,629 ----
|
||||
|
||||
inv_lbreaks[++newlines] = temp;
|
||||
+ #if defined (HANDLE_MULTIBYTE)
|
||||
+ lpos -= _rl_col_width (local_prompt, n0, num);
|
||||
+ #else
|
||||
lpos -= _rl_screenwidth;
|
||||
+ #endif
|
||||
}
|
||||
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 5
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 6
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,78 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-007
|
||||
|
||||
Bug-Reported-by: Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||
Tim Waugh <twaugh@redhat.com>
|
||||
Bug-Reference-ID: <10454.1091313247@athlon>
|
||||
<20040804100140.GX8175@redhat.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00313.html
|
||||
http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00056.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Two bugs:
|
||||
|
||||
How does it decide what characters are allowed. The following really
|
||||
looks like a bug to me:
|
||||
$ echo {<C4>..D}
|
||||
That's accepted and produces output that seems to wrap round to ^A and
|
||||
then goes up to D. Note that I'm using an ISO-8859-1 locale. If that
|
||||
works at all, it should surely descend.
|
||||
|
||||
This short script:
|
||||
|
||||
var=baz
|
||||
echo foo{bar,${var}.}
|
||||
echo foo{bar,${var}}
|
||||
|
||||
gives the following output with bash-3.0:
|
||||
|
||||
./test: line 2: foo${var.}: bad substitution
|
||||
foobar} foobaz
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/braces.c Thu Dec 4 11:09:52 2003
|
||||
--- braces.c Wed Aug 4 14:34:33 2004
|
||||
***************
|
||||
*** 341,346 ****
|
||||
if (lhs_t == ST_CHAR)
|
||||
{
|
||||
! lhs_v = lhs[0];
|
||||
! rhs_v = rhs[0];
|
||||
}
|
||||
else
|
||||
--- 341,346 ----
|
||||
if (lhs_t == ST_CHAR)
|
||||
{
|
||||
! lhs_v = (unsigned char)lhs[0];
|
||||
! rhs_v = (unsigned char)rhs[0];
|
||||
}
|
||||
else
|
||||
***************
|
||||
*** 403,406 ****
|
||||
--- 403,407 ----
|
||||
pass_next = 1;
|
||||
i++;
|
||||
+ level++;
|
||||
continue;
|
||||
}
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 6
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 7
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,55 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-008
|
||||
|
||||
Bug-Reported-by: uberlord@rsm.demon.co.uk
|
||||
Bug-Reference-ID: <1092327965.4233.1.camel@uberlaptop.ubernet>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00144.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
> Description:
|
||||
> Bash 3 breaks array expansion
|
||||
>
|
||||
> Repeat-By:
|
||||
> #!/bin/bash
|
||||
> x=(one two)
|
||||
> echo ${x[@]:1}
|
||||
> # prints nothing in bash 3
|
||||
> # prints two in bash 2
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/subst.c Sun Jul 4 13:56:13 2004
|
||||
--- subst.c Thu Aug 12 13:36:17 2004
|
||||
***************
|
||||
*** 4892,4896 ****
|
||||
*e1p += len;
|
||||
|
||||
! if (*e1p >= len || *e1p < 0)
|
||||
return (-1);
|
||||
|
||||
--- 4912,4916 ----
|
||||
*e1p += len;
|
||||
|
||||
! if (*e1p > len || *e1p < 0)
|
||||
return (-1);
|
||||
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 7
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 8
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,111 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-009
|
||||
|
||||
Bug-Reported-by: Tim Waugh <twaugh@redhat.com>
|
||||
Bug-Reference-ID: <20040810083805.GT2177@redhat.com>
|
||||
Bug-Reference-URL: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=129526b
|
||||
http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00116.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
-->
|
||||
Steps to Reproduce:
|
||||
1. Launch a bash shell
|
||||
2. Set editing mode to 'vi' with 'set -o vi'
|
||||
3. Type any command, but don't hit return
|
||||
4. Enter vi-command mode by hitting the escape key
|
||||
5. Go to the end of line with the '$' command
|
||||
6. Type 'r' to change the last character
|
||||
7. Type any character (other than what the character already is)
|
||||
|
||||
The last two characters are inexplicably swapped
|
||||
after the last character is changed.
|
||||
<--
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/lib/readline/vi_mode.c Tue Jul 13 14:08:27 2004
|
||||
--- lib/readline/vi_mode.c Tue Aug 17 00:12:09 2004
|
||||
***************
|
||||
*** 691,695 ****
|
||||
wchar_t wc;
|
||||
char mb[MB_LEN_MAX+1];
|
||||
! int mblen;
|
||||
mbstate_t ps;
|
||||
|
||||
--- 693,697 ----
|
||||
wchar_t wc;
|
||||
char mb[MB_LEN_MAX+1];
|
||||
! int mblen, p;
|
||||
mbstate_t ps;
|
||||
|
||||
***************
|
||||
*** 714,722 ****
|
||||
if (wc)
|
||||
{
|
||||
mblen = wcrtomb (mb, wc, &ps);
|
||||
if (mblen >= 0)
|
||||
mb[mblen] = '\0';
|
||||
rl_begin_undo_group ();
|
||||
! rl_delete (1, 0);
|
||||
rl_insert_text (mb);
|
||||
rl_end_undo_group ();
|
||||
--- 716,727 ----
|
||||
if (wc)
|
||||
{
|
||||
+ p = rl_point;
|
||||
mblen = wcrtomb (mb, wc, &ps);
|
||||
if (mblen >= 0)
|
||||
mb[mblen] = '\0';
|
||||
rl_begin_undo_group ();
|
||||
! rl_vi_delete (1, 0);
|
||||
! if (rl_point < p) /* Did we retreat at EOL? */
|
||||
! rl_point++; /* XXX - should we advance more than 1 for mbchar? */
|
||||
rl_insert_text (mb);
|
||||
rl_end_undo_group ();
|
||||
***************
|
||||
*** 1311,1320 ****
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
||||
! while (_rl_insert_char (1, c))
|
||||
! {
|
||||
! RL_SETSTATE (RL_STATE_MOREINPUT);
|
||||
! c = rl_read_key ();
|
||||
! RL_UNSETSTATE (RL_STATE_MOREINPUT);
|
||||
! }
|
||||
else
|
||||
#endif
|
||||
--- 1316,1329 ----
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
|
||||
! {
|
||||
! if (rl_point < p) /* Did we retreat at EOL? */
|
||||
! rl_point++;
|
||||
! while (_rl_insert_char (1, c))
|
||||
! {
|
||||
! RL_SETSTATE (RL_STATE_MOREINPUT);
|
||||
! c = rl_read_key ();
|
||||
! RL_UNSETSTATE (RL_STATE_MOREINPUT);
|
||||
! }
|
||||
! }
|
||||
else
|
||||
#endif
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 8
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 9
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,116 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-010
|
||||
|
||||
Bug-Reported-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
Bug-Reference-ID: <E1Bo8Sq-0004u5-00@bouh>
|
||||
Bug-Reference-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=261142
|
||||
|
||||
Bug-Description:
|
||||
|
||||
When trying to auto-complete ~/../``/, I just get:
|
||||
malloc: bashline.c:1340: assertion botched
|
||||
free: start and end chunk sizes differ
|
||||
last command: kill -9 %2
|
||||
Stopping myself...
|
||||
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/bashline.c Mon Jul 5 23:22:12 2004
|
||||
--- bashline.c Thu Sep 2 16:00:12 2004
|
||||
***************
|
||||
*** 101,104 ****
|
||||
--- 101,105 ----
|
||||
|
||||
/* Helper functions for Readline. */
|
||||
+ static int bash_directory_expansion __P((char **));
|
||||
static int bash_directory_completion_hook __P((char **));
|
||||
static int filename_completion_ignore __P((char **));
|
||||
***************
|
||||
*** 293,297 ****
|
||||
at = strchr (rl_completer_word_break_characters, '@');
|
||||
if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0))
|
||||
! return;
|
||||
|
||||
/* We have something to do. Do it. */
|
||||
--- 294,298 ----
|
||||
at = strchr (rl_completer_word_break_characters, '@');
|
||||
if ((at == 0 && on_or_off == 0) || (at != 0 && on_or_off != 0))
|
||||
! return old_value;
|
||||
|
||||
/* We have something to do. Do it. */
|
||||
***************
|
||||
*** 1407,1414 ****
|
||||
if (*hint_text == '~')
|
||||
{
|
||||
! int l, tl, vl;
|
||||
vl = strlen (val);
|
||||
tl = strlen (hint_text);
|
||||
l = vl - hint_len; /* # of chars added */
|
||||
temp = (char *)xmalloc (l + 2 + tl);
|
||||
strcpy (temp, hint_text);
|
||||
--- 1408,1424 ----
|
||||
if (*hint_text == '~')
|
||||
{
|
||||
! int l, tl, vl, dl;
|
||||
! char *rd;
|
||||
vl = strlen (val);
|
||||
tl = strlen (hint_text);
|
||||
+ #if 0
|
||||
l = vl - hint_len; /* # of chars added */
|
||||
+ #else
|
||||
+ rd = savestring (filename_hint);
|
||||
+ bash_directory_expansion (&rd);
|
||||
+ dl = strlen (rd);
|
||||
+ l = vl - dl; /* # of chars added */
|
||||
+ free (rd);
|
||||
+ #endif
|
||||
temp = (char *)xmalloc (l + 2 + tl);
|
||||
strcpy (temp, hint_text);
|
||||
***************
|
||||
*** 2188,2191 ****
|
||||
--- 2198,2222 ----
|
||||
}
|
||||
|
||||
+ /* Simulate the expansions that will be performed by
|
||||
+ rl_filename_completion_function. This must be called with the address of
|
||||
+ a pointer to malloc'd memory. */
|
||||
+ static int
|
||||
+ bash_directory_expansion (dirname)
|
||||
+ char **dirname;
|
||||
+ {
|
||||
+ char *d;
|
||||
+
|
||||
+ d = savestring (*dirname);
|
||||
+
|
||||
+ if (rl_directory_rewrite_hook)
|
||||
+ (*rl_directory_rewrite_hook) (&d);
|
||||
+
|
||||
+ if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&d))
|
||||
+ {
|
||||
+ free (*dirname);
|
||||
+ *dirname = d;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Handle symbolic link references and other directory name
|
||||
expansions while hacking completion. */
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 9
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 10
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,71 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-011
|
||||
|
||||
Bug-Reported-by: Egmont Koblinger <egmont@uhulinux.hu>
|
||||
Bug-Reference-ID: <Pine.LNX.4.58L0.0407282151140.8088@sziami.cs.bme.hu>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-07/msg00277.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
I've just upgraded to readline 5.0 and bash 3.0 and tried them with UTF-8
|
||||
encoding. I found line editing to be quite buggy:
|
||||
|
||||
I type an accented letter, let's say <E1>. Then <E1> appears. I press the left
|
||||
arrow, the cursor goes back, it is now over <E1>. I press <E9>. Now <E9><E1> is
|
||||
visible, which is correct, but the cursor is past the two letters, though
|
||||
it should be over <E1>. Here only the first Left arrow takes affect, moves
|
||||
the cursor over <E1>, but the 2nd time I press Left, it just beeps, doesn't
|
||||
move to the first char (<E9>). Now a Right arrow doesn't move the cursor, but
|
||||
causes further Left and Right arrows to work as expected. To go on,
|
||||
similar bug occurs nearly every time that I insert an accented letter
|
||||
before or amongs other ones (but not at the end of the line). When the
|
||||
command line has about ten or twenty accented letters (and no or hardly
|
||||
any non-accented ones), line editing becomes a total chaos, where
|
||||
sometimes inserting another accented letter causes the cursor to jump many
|
||||
characters to the right, and pressing the Left arrow sometimes causes the
|
||||
cursor to jump back lots of characters at once.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/lib/readline/mbutil.c Wed Jan 14 09:44:52 2004
|
||||
--- lib/readline/mbutil.c Wed Aug 18 22:25:57 2004
|
||||
***************
|
||||
*** 127,135 ****
|
||||
{
|
||||
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
|
||||
! while (wcwidth (wc) == 0)
|
||||
{
|
||||
point += tmp;
|
||||
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
|
||||
! if (tmp == (size_t)(0) || tmp == (size_t)(-1) || tmp == (size_t)(-2))
|
||||
break;
|
||||
}
|
||||
--- 127,135 ----
|
||||
{
|
||||
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
|
||||
! while (tmp > 0 && wcwidth (wc) == 0)
|
||||
{
|
||||
point += tmp;
|
||||
tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
|
||||
! if (MB_NULLWCH (tmp) || MB_INVALIDCH (tmp))
|
||||
break;
|
||||
}
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 10
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 11
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,56 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-012
|
||||
|
||||
Bug-Reported-by: ben@ncipher.com
|
||||
Bug-Reference-ID: <E1BxQYe-0002p1-00@berdoo.ncipher.com>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00215.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
When using the pipefail option, the following command:
|
||||
echo foo | false
|
||||
produces an exit status of 0, ignoring the exit status of false.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/jobs.c Fri Apr 23 16:28:25 2004
|
||||
--- jobs.c Wed Aug 18 11:15:07 2004
|
||||
***************
|
||||
*** 1779,1784 ****
|
||||
{
|
||||
fail = 0;
|
||||
! for (p = jobs[job]->pipe; p->next != jobs[job]->pipe; p = p->next)
|
||||
! if (p->status != EXECUTION_SUCCESS) fail = p->status;
|
||||
return fail;
|
||||
}
|
||||
--- 1779,1789 ----
|
||||
{
|
||||
fail = 0;
|
||||
! p = jobs[job]->pipe;
|
||||
! do
|
||||
! {
|
||||
! if (p->status != EXECUTION_SUCCESS) fail = p->status;
|
||||
! p = p->next;
|
||||
! }
|
||||
! while (p != jobs[job]->pipe);
|
||||
return fail;
|
||||
}
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 11
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 12
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,86 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-013
|
||||
|
||||
Bug-Reported-by: Len Lattanzi <llattanzi@apple.com>
|
||||
Bug-Reference-ID: <556CE1CE-E1AC-11D8-A2D9-00039383EC60@apple.com>
|
||||
Bug-Reference-URL:
|
||||
|
||||
Bug-Description:
|
||||
|
||||
vi-mode filename completion/glob expansion should understand and perform
|
||||
tilde expansion.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0/bashline.c Mon Jul 5 23:22:12 2004
|
||||
--- bashline.c Thu Sep 2 16:00:12 2004
|
||||
***************
|
||||
*** 2514,2518 ****
|
||||
static int ind;
|
||||
int glen;
|
||||
! char *ret;
|
||||
|
||||
if (state == 0)
|
||||
--- 2545,2549 ----
|
||||
static int ind;
|
||||
int glen;
|
||||
! char *ret, *ttext;
|
||||
|
||||
if (state == 0)
|
||||
***************
|
||||
*** 2524,2538 ****
|
||||
FREE (globtext);
|
||||
|
||||
if (rl_explicit_arg)
|
||||
{
|
||||
! globorig = savestring (text);
|
||||
! glen = strlen (text);
|
||||
globtext = (char *)xmalloc (glen + 2);
|
||||
! strcpy (globtext, text);
|
||||
globtext[glen] = '*';
|
||||
globtext[glen+1] = '\0';
|
||||
}
|
||||
else
|
||||
! globtext = globorig = savestring (text);
|
||||
|
||||
matches = shell_glob_filename (globtext);
|
||||
--- 2555,2574 ----
|
||||
FREE (globtext);
|
||||
|
||||
+ ttext = bash_tilde_expand (text, 0);
|
||||
+
|
||||
if (rl_explicit_arg)
|
||||
{
|
||||
! globorig = savestring (ttext);
|
||||
! glen = strlen (ttext);
|
||||
globtext = (char *)xmalloc (glen + 2);
|
||||
! strcpy (globtext, ttext);
|
||||
globtext[glen] = '*';
|
||||
globtext[glen+1] = '\0';
|
||||
}
|
||||
else
|
||||
! globtext = globorig = savestring (ttext);
|
||||
!
|
||||
! if (ttext != text)
|
||||
! free (ttext);
|
||||
|
||||
matches = shell_glob_filename (globtext);
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 12
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 13
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,52 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-014
|
||||
|
||||
Bug-Reported-by: agriffis@gentoo.org
|
||||
Bug-Reference-ID: <20040929024759.A437FEB1E0@piment.flatmonk.org>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-09/msg00250.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
#
|
||||
# BROKEN case: variable with braces inside quotes
|
||||
#
|
||||
|
||||
$ D=W
|
||||
$ echo "${D}"{illy,onka} => W{illy,onka}
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0-patched/braces.c Wed Sep 8 11:07:53 2004
|
||||
--- braces.c Fri Sep 17 18:42:36 2004
|
||||
***************
|
||||
*** 403,407 ****
|
||||
pass_next = 1;
|
||||
i++;
|
||||
! level++;
|
||||
continue;
|
||||
}
|
||||
--- 403,408 ----
|
||||
pass_next = 1;
|
||||
i++;
|
||||
! if (quoted == 0)
|
||||
! level++;
|
||||
continue;
|
||||
}
|
||||
*** ../bash-3.0-patched/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 13
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 14
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,56 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-015
|
||||
|
||||
Bug-Reported-by: opengeometry@yahoo.ca
|
||||
Bug-Reference-ID: <200410202012.i9KKCTEB001860@node1.opengeometry.net>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-10/msg00297.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Shell variable can start with number and can even be printed with
|
||||
'declare', as in
|
||||
1=aaa
|
||||
1a=bbb
|
||||
declare -p 1 1a
|
||||
|
||||
But, they can't be removed, as in
|
||||
unset 1 1a --> ...: not a valid identifier
|
||||
|
||||
Bash-2.05b correctly gives me error, however.
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0-patched/general.c Wed Apr 14 23:20:13 2004
|
||||
--- general.c Wed Oct 20 16:59:59 2004
|
||||
***************
|
||||
*** 268,272 ****
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
! if ((legal_variable_starter (c) == 0) && (flags && c != '[')) /* ] */
|
||||
#else
|
||||
if (legal_variable_starter (c) == 0)
|
||||
--- 268,272 ----
|
||||
|
||||
#if defined (ARRAY_VARS)
|
||||
! if ((legal_variable_starter (c) == 0) && (flags == 0 || c != '[')) /* ] */
|
||||
#else
|
||||
if (legal_variable_starter (c) == 0)
|
||||
|
||||
*** ../bash-3.0/patchlevel.h Wed Aug 22 08:05:39 2001
|
||||
--- patchlevel.h Thu Sep 2 15:04:32 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 14
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 15
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
@@ -0,0 +1,84 @@
|
||||
BASH PATCH REPORT
|
||||
=================
|
||||
|
||||
Bash-Release: 3.0
|
||||
Patch-ID: bash30-016
|
||||
|
||||
Bug-Reported-by: William Park <opengeometry@yahoo.ca>
|
||||
Bug-Reference-ID: <200411012217.iA1MHxL7031818@node1.opengeometry.net>
|
||||
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2004-11/msg00017.html
|
||||
|
||||
Bug-Description:
|
||||
|
||||
Offset from the end of array in ${var: -n} is still off by 1. Eg.
|
||||
x=( {0..9} )
|
||||
echo ${x[*]: -1} --> 8 9
|
||||
|
||||
Patch:
|
||||
|
||||
*** ../bash-3.0-patched/subst.c Wed Sep 8 11:07:55 2004
|
||||
--- subst.c Tue Nov 9 16:26:59 2004
|
||||
***************
|
||||
*** 4900,4905 ****
|
||||
case VT_ARRAYVAR:
|
||||
a = (ARRAY *)value;
|
||||
! /* For arrays, the first value deals with array indices. */
|
||||
! len = array_max_index (a); /* arrays index from 0 to n - 1 */
|
||||
break;
|
||||
#endif
|
||||
--- 4900,4906 ----
|
||||
case VT_ARRAYVAR:
|
||||
a = (ARRAY *)value;
|
||||
! /* For arrays, the first value deals with array indices. Negative
|
||||
! offsets count from one past the array's maximum index. */
|
||||
! len = array_max_index (a) + (*e1p < 0); /* arrays index from 0 to n - 1 */
|
||||
break;
|
||||
#endif
|
||||
*** ../bash-3.0-patched/tests/array.tests Sat Oct 4 23:25:00 2003
|
||||
--- tests/array.tests Tue Nov 9 16:36:29 2004
|
||||
***************
|
||||
*** 323,327 ****
|
||||
echo positive offset - expect five seven
|
||||
echo ${av[@]:5:2}
|
||||
! echo negative offset - expect five seven
|
||||
echo ${av[@]: -2:2}
|
||||
|
||||
--- 323,327 ----
|
||||
echo positive offset - expect five seven
|
||||
echo ${av[@]:5:2}
|
||||
! echo negative offset to unset element - expect seven
|
||||
echo ${av[@]: -2:2}
|
||||
|
||||
*** ../bash-3.0-patched/tests/array.right Sat Oct 4 23:25:10 2003
|
||||
--- tests/array.right Tue Nov 9 16:37:25 2004
|
||||
***************
|
||||
*** 171,176 ****
|
||||
positive offset - expect five seven
|
||||
five seven
|
||||
! negative offset - expect five seven
|
||||
! five seven
|
||||
positive offset 2 - expect seven
|
||||
seven
|
||||
--- 171,176 ----
|
||||
positive offset - expect five seven
|
||||
five seven
|
||||
! negative offset to unset element - expect seven
|
||||
! seven
|
||||
positive offset 2 - expect seven
|
||||
seven
|
||||
*** ../bash-3.0-patched/patchlevel.h Tue Oct 26 17:13:29 2004
|
||||
--- patchlevel.h Tue Nov 9 16:31:24 2004
|
||||
***************
|
||||
*** 26,30 ****
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 15
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--- 26,30 ----
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
! #define PATCHLEVEL 16
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
|
||||
<!DOCTYPE PISI SYSTEM "http://www.uludag.org.tr/projeler/pisi/pisi-spec.dtd">
|
||||
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>bash</Name>
|
||||
<Homepage>http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html</Homepage>
|
||||
<Packager>
|
||||
<Name>Barış Metin</Name>
|
||||
<Email>baris@uludag.org.tr</Email>
|
||||
</Packager>
|
||||
<License>GPL-2</License>
|
||||
<IsA>category</IsA>
|
||||
<PartOf>component</PartOf>
|
||||
<Summary xml:lang="en">The standard GNU Bourne again shell</Summary>
|
||||
<Description xml:lang="en">The standard GNU Bourne again shell</Description>
|
||||
<Archive type="targz" sha1sum="3acf1ff4910d4bc863620c7533cbf4858370017b">ftp://ftp.gnu.org/pub/gnu/bash/bash-3.0.tar.gz</Archive>
|
||||
<Patches>
|
||||
<Patch compressionType="bz2" level="1">bash-3.0-gentoo.diff.bz2</Patch>
|
||||
<Patch>bash30-001</Patch>
|
||||
<Patch>bash30-002</Patch>
|
||||
<Patch>bash30-003</Patch>
|
||||
<Patch>bash30-004</Patch>
|
||||
<Patch>bash30-005</Patch>
|
||||
<Patch>bash30-006</Patch>
|
||||
<Patch>bash30-007</Patch>
|
||||
<Patch>bash30-008</Patch>
|
||||
<Patch>bash30-009</Patch>
|
||||
<Patch>bash30-010</Patch>
|
||||
<Patch>bash30-011</Patch>
|
||||
<Patch>bash30-012</Patch>
|
||||
<Patch>bash30-013</Patch>
|
||||
<Patch>bash30-014</Patch>
|
||||
<Patch>bash30-015</Patch>
|
||||
<Patch>bash30-016</Patch>
|
||||
<Patch level="1">bash-3.0-etc-inputrc.patch</Patch>
|
||||
<Patch level="1">bash-3.0-darwin-conn.patch</Patch>
|
||||
<Patch level="1">bash-3.0-afs.patch</Patch>
|
||||
<Patch>bash-3.0-crash.patch</Patch>
|
||||
<Patch level="1">bash-3.0-jobs.patch</Patch>
|
||||
<Patch level="1">bash-3.0-manpage.patch</Patch>
|
||||
<Patch level="1">bash-3.0-pwd.patch</Patch>
|
||||
<Patch>bash-3.0-read-e-segfault.patch</Patch>
|
||||
<Patch level="1">bash-3.0-ulimit.patch</Patch>
|
||||
<Patch>bash-3.0-read-builtin-pipe.patch</Patch>
|
||||
<Patch>bash-3.0-trap-fg-signals.patch</Patch>
|
||||
<Patch>bash-2.05-2.4.4.patch</Patch>
|
||||
<Patch>bash-2.05a-security.patch</Patch>
|
||||
<Patch>bash-3.0-evalexp.patch</Patch>
|
||||
<Patch level="1">bash-3.0-locale.patch</Patch>
|
||||
<Patch>bash-3.0-nfs_redir.patch</Patch>
|
||||
<Patch>bash-3.0-utf8.patch</Patch>
|
||||
<Patch>bash-3.0-prompt.patch</Patch>
|
||||
<Patch level="1">bash-3.0-update-multibyte-ifs.patch</Patch>
|
||||
<Patch level="1">bash-3.0-random.patch</Patch>
|
||||
<Patch level="1">bash-3.0-privmode.patch</Patch>
|
||||
<Patch>bash-3.0-rl-setenv.patch</Patch>
|
||||
<Patch>bash-3.0-rl-del-backspace-policy.patch</Patch>
|
||||
<Patch>bash-3.0-rl-header.patch</Patch>
|
||||
</Patches>
|
||||
<BuildDependencies>
|
||||
<Dependency versionFrom="5.2">ncurses</Dependency>
|
||||
<Dependency>patch</Dependency>
|
||||
</BuildDependencies>
|
||||
<History>
|
||||
<Update>
|
||||
<Date>2005-07-04</Date>
|
||||
<Version>3.0</Version>
|
||||
<Release>11</Release>
|
||||
</Update>
|
||||
</History>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>bash</Name>
|
||||
<Files>
|
||||
<File fileType="config">/etc</File>
|
||||
<File fileType="binary">/bin</File>
|
||||
<File fileType="binary">/usr/bin</File>
|
||||
<File fileType="doc">/usr/share/doc</File>
|
||||
<File fileType="doc">/usr/share/info</File>
|
||||
<File fileType="doc">/usr/share/man</File>
|
||||
<File fileType="localedata">/usr/share/locale</File>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
</PISI>
|
||||
|
||||
Reference in New Issue
Block a user