blob: c84c561a6167edcaa05ab1634a5336514b0bdf69 [file] [log] [blame] [edit]
Only in bash-4.3.30: build
diff -ur bash-4.3.30.dist/builtins/echo.def bash-4.3.30/builtins/echo.def
--- bash-4.3.30.dist/builtins/echo.def 2011-06-29 09:55:58.000000000 -0400
+++ bash-4.3.30/builtins/echo.def 2016-06-03 17:40:57.834915855 -0400
@@ -108,8 +108,9 @@
echo_builtin (list)
WORD_LIST *list;
{
- int display_return, do_v9, i, len;
- char *temp, *s;
+ int display_return, do_v9, i, j, len, malloc_len;
+ char *temp, *s, *m;
+ WORD_LIST *save_list;
do_v9 = xpg_echo;
display_return = 1;
@@ -162,6 +163,30 @@
clearerr (stdout); /* clear error before writing and testing success */
terminate_immediately++;
+ malloc_len = 0;
+ m = NULL;
+ save_list = list;
+ while (list)
+ {
+ i = len = 0;
+ temp = do_v9 ? ansicstr (list->word->word, STRLEN (list->word->word), 1, &i, &len)
+ : list->word->word;
+ if (!temp)
+ continue;
+ malloc_len += do_v9 ? len : strlen(temp);
+ if (do_v9)
+ free (temp);
+ list = list->next;
+ if (list)
+ malloc_len++;
+ }
+ if (display_return)
+ malloc_len++;
+ m = malloc(malloc_len);
+ if (m == NULL)
+ fatal_error ("echo: could not allocate %lu bytes", (unsigned long)malloc_len);
+ list = save_list;
+ j = 0;
while (list)
{
i = len = 0;
@@ -169,19 +194,13 @@
: list->word->word;
if (temp)
{
- if (do_v9)
- {
- for (s = temp; len > 0; len--)
- putchar (*s++);
- }
- else
- printf ("%s", temp);
-#if defined (SunOS5)
- fflush (stdout); /* Fix for bug in SunOS 5.5 printf(3) */
-#endif
+ if (!do_v9)
+ len = strlen(temp);
+ memmove(m + j, temp, len);
+ j += len;
+ if (do_v9)
+ free (temp);
}
- if (do_v9 && temp)
- free (temp);
list = list->next;
if (i)
{
@@ -189,11 +208,15 @@
break;
}
if (list)
- putchar(' ');
+ m[j++] = ' ';
}
-
if (display_return)
- putchar ('\n');
+ m[j++] = '\n';
+ write(STDOUT_FILENO, m, j);
+ free(m);
+#if defined (SunOS5)
+ fflush (stdout); /* Fix for bug in SunOS 5.5 printf(3) */
+#endif
terminate_immediately--;
return (sh_chkwrite (EXECUTION_SUCCESS));
diff -ur bash-4.3.30.dist/configure bash-4.3.30/configure
--- bash-4.3.30.dist/configure 2014-02-11 10:38:00.000000000 -0500
+++ bash-4.3.30/configure 2016-05-16 23:04:59.481616025 -0400
@@ -2853,6 +2853,7 @@
sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF
#*-freebsd*-gnu) opt_bash_malloc=no ;; # there's some undetermined problem here
#*-freebsd*) opt_bash_malloc=no ;; # they claim it's better; I disagree
+*-akaros*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment
*-openbsd*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment
*-mirbsd*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment
*-aix*) opt_bash_malloc=no ;; # AIX machines
diff -ur bash-4.3.30.dist/error.c bash-4.3.30/error.c
--- bash-4.3.30.dist/error.c 2014-01-17 08:09:33.000000000 -0500
+++ bash-4.3.30/error.c 2016-05-25 13:40:26.978379551 -0400
@@ -487,3 +487,32 @@
{
report_error (_("%s: readonly variable"), s);
}
+
+#if defined (USE_AKAROS_STRERROR)
+#ifndef MAX_ERRSTR_LEN
+#define MAX_ERRSTR_LEN 128
+#endif
+char *
+akaros_strerror(e)
+ int e;
+{
+ static char emsg[2*MAX_ERRSTR_LEN];
+ char ebuf[MAX_ERRSTR_LEN];
+ size_t len;
+ int serrno;
+ char *estr, *strerror_str;
+
+ serrno = errno;
+ estr = errstr ();
+ strerror_str = strerror_r (e, ebuf, sizeof (ebuf));
+ len = strlen (strerror_str);
+ if (len > (sizeof (emsg) - 1))
+ len = sizeof (emsg) - 1;
+ memmove (emsg, strerror_str, len);
+ if (e == serrno && estr && *estr)
+ snprintf (emsg + len, sizeof (emsg) - len, ", %s", estr);
+ ebuf[sizeof (ebuf) - 1] = '\0';
+
+ return emsg;
+}
+#endif
diff -ur bash-4.3.30.dist/mksyntax.c bash-4.3.30/mksyntax.c
--- bash-4.3.30.dist/mksyntax.c 2012-07-29 19:48:38.000000000 -0400
+++ bash-4.3.30/mksyntax.c 2016-05-25 11:59:57.560352289 -0400
@@ -40,6 +40,10 @@
extern int errno;
#endif
+#ifdef strerror
+#undef strerror
+#endif
+
#ifndef HAVE_STRERROR
extern char *strerror();
#endif
diff -ur bash-4.3.30.dist/support/config.guess bash-4.3.30/support/config.guess
--- bash-4.3.30.dist/support/config.guess 2013-12-16 16:02:33.000000000 -0500
+++ bash-4.3.30/support/config.guess 2016-05-16 23:04:12.844336864 -0400
@@ -219,6 +219,10 @@
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
exit ;;
+ *:Akaros:*:*)
+ UNAME_MACHINE_ARCH=x86_64
+ echo x86_64-ucb-akaros1.0
+ exit ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
diff -ur bash-4.3.30.dist/support/config.sub bash-4.3.30/support/config.sub
--- bash-4.3.30.dist/support/config.sub 2013-12-17 10:49:47.000000000 -0500
+++ bash-4.3.30/support/config.sub 2016-05-16 23:05:28.906423063 -0400
@@ -1356,7 +1356,7 @@
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -akaros* | -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \