Hello community,
here is the log from the commit of package ksh
checked in at Fri Nov 23 02:11:49 CET 2007.
--------
--- ksh/ksh.changes 2007-11-16 17:18:06.000000000 +0100
+++ /mounts/work_src_done/STABLE/ksh/ksh.changes 2007-11-20 15:40:52.635676000 +0100
@@ -1,0 +2,6 @@
+Tue Nov 20 14:13:58 CET 2007 - werner@suse.de
+
+- Fix bug in mbchar() macro to be able to run test for bug #341594
+- Make option -n for echo builtin work even for AT&T universe
+
+-------------------------------------------------------------------
Old:
----
ksh-1020.spec
New:
----
ksh93-limits.dif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ksh.spec ++++++
--- /var/tmp/diff_new_pack.sY6530/_old 2007-11-23 02:11:30.000000000 +0100
+++ /var/tmp/diff_new_pack.sY6530/_new 2007-11-23 02:11:30.000000000 +0100
@@ -21,7 +21,7 @@
PreReq: /bin/ln /bin/rm /etc/bash.bashrc /bin/true
AutoReqProv: on
Version: 93s
-Release: 62
+Release: 64
Summary: Korn Shell
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: INIT.2007-06-28.tar.bz2
@@ -293,7 +293,11 @@
%{_libdir}/ast/*.a
%doc %{_mandir}/man3/*
%{_includedir}/ast/
+
%changelog
+* Tue Nov 20 2007 - werner@suse.de
+- Fix bug in mbchar() macro to be able to run test for bug #341594
+- Make option -n for echo builtin work even for AT&T universe
* Fri Nov 16 2007 - werner@suse.de
- Fix the bug fix, that is decrement current size (bug #341594)
* Fri Nov 16 2007 - werner@suse.de
++++++ ksh93.dif ++++++
--- /var/tmp/diff_new_pack.sY6530/_old 2007-11-23 02:11:31.000000000 +0100
+++ /var/tmp/diff_new_pack.sY6530/_new 2007-11-23 02:11:31.000000000 +0100
@@ -1,3 +1,70 @@
+--- src/cmd/ksh93/bltins/print.c
++++ src/cmd/ksh93/bltins/print.c 2007-11-20 14:57:14.000000000 +0000
+@@ -103,7 +103,11 @@ static int outexceptf(Sfio_t* iop, int m
+ {
+ static char bsd_univ;
+ struct print prdata;
+- prdata.options = sh_optecho+5;
++# if defined(__linux__)
++ prdata.options = sh_optecho;
++# else
++ prdata.options = sh_optecho + 5;
++# endif
+ prdata.raw = prdata.echon = 0;
+ prdata.sh = (Shell_t*)extra;
+ NOT_USED(argc);
+@@ -116,7 +120,40 @@ static int outexceptf(Sfio_t* iop, int m
+ prdata.sh->universe = 1;
+ }
+ if(!bsd_univ)
++ {
++# if defined(__linux__)
++ char *opt = argv[1];
++ while ((opt = argv[1]) && (*opt++ == '-'))
++ {
++ int c, inc = 0;
++ while ((c = *opt++))
++ {
++ switch (c) {
++ case 'n':
++ prdata.echon = 1;
++ inc++;
++ break;
++# if !SHOPT_ECHOE
++ case 'e':
++ prdata.raw = 0;
++ inc++;
++ break;
++ case 'E':
++ prdata.raw = 1;
++ inc++;
++ break;
++# endif /* SHOPT_ECHOE */
++ default:
++ break;
++ }
++ }
++ if (!inc)
++ break;
++ argv++;
++ }
++# endif
+ return(b_print(0,argv,&prdata));
++ }
+ prdata.options = sh_optecho;
+ prdata.raw = 1;
+ while(argv[1] && *argv[1]=='-')
+--- src/cmd/ksh93/data/msg.c
++++ src/cmd/ksh93/data/msg.c 2007-04-02 14:59:18.748709295 +0000
+@@ -176,7 +176,7 @@
+ const char e_bash_logout[] = "$HOME/.bash_logout";
+ const char e_bash_profile[] = "$HOME/.bash_profile";
+ #endif
+-const char e_crondir[] = "/usr/spool/cron/atjobs";
++const char e_crondir[] = "/var/spool/cron";
+ const char e_prohibited[] = "login setuid/setgid shells prohibited";
+ #if SHOPT_SUID_EXEC
+ const char e_suidexec[] = "/etc/suid_exec";
--- src/cmd/ksh93/features/options
+++ src/cmd/ksh93/features/options 2007-03-01 17:25:28.000000000 +0100
@@ -35,7 +35,7 @@ tst cross{
@@ -157,14 +224,3 @@
chlink ? lchmod :
#endif
chmod;
---- src/cmd/ksh93/data/msg.c
-+++ src/cmd/ksh93/data/msg.c 2007-04-02 14:59:18.748709295 +0000
-@@ -176,7 +176,7 @@
- const char e_bash_logout[] = "$HOME/.bash_logout";
- const char e_bash_profile[] = "$HOME/.bash_profile";
- #endif
--const char e_crondir[] = "/usr/spool/cron/atjobs";
-+const char e_crondir[] = "/var/spool/cron";
- const char e_prohibited[] = "login setuid/setgid shells prohibited";
- #if SHOPT_SUID_EXEC
- const char e_suidexec[] = "/etc/suid_exec";
++++++ ksh93-limits.dif ++++++
--- src/lib/libast/comp/conf.sh
+++ src/lib/libast/comp/conf.sh 2007-09-13 10:39:15.000000000 +0000
@@ -143,7 +143,7 @@ main()
return 1;
#else
_ast_intmax_t s = 0x7fffffffffffffffLL;
- unsigned _ast_intmax_t u = 0xffffffffffffffffLL;
+ unsigned _ast_intmax_t u = 0xffffffffffffffffULL;
return 0;
#endif
@@ -785,7 +785,11 @@ defined() # list-file
cat <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
#undef conf
@@ -813,7 +817,11 @@ unsigned int conf[] = {
cat <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
#undef conf
@@ -854,7 +862,11 @@ done
cat <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
#undef conf
@@ -1031,7 +1043,7 @@ do eval name=\"'$'CONF_name_$key\"
case $flags in
*[Ll]*) d=
case ${conf_name} in
- LONG_MAX|SSIZE_MAX)
+ LONG_MAX|UINT_MAX|INT_MAX|SHRT_MAX|SSIZE_MAX|WORD_BIT|LONG_BIT|PTHREAD_*)
x=
;;
*) eval x='$'CONF_const_${conf_name}
@@ -1091,7 +1103,11 @@ do eval name=\"'$'CONF_name_$key\"
${head}
#include
#include
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
int
@@ -1105,7 +1121,11 @@ main()
*) cat > $tmp.c <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
${script}
@@ -1249,7 +1269,11 @@ printf("#endif\n");
*) cat > $tmp.c <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
${script}
@@ -1322,7 +1346,7 @@ ${script}
*[lLuU])
case $LL_suffix in
??) case $conf_limit in
- *[!lL][lL]|*[!lL][lL][uU])
+ *[0-9a-fA-F][lL]|*[0-9a-fA-F][uU][lL])
conf_limit=${conf_limit}L
;;
esac
@@ -1357,7 +1381,7 @@ ${script}
*[lLuU])
case $LL_suffix in
??) case $conf_minmax in
- *[!lL][lL]|*[!lL][lL][uU])
+ *[0-9a-fA-F][lL]|*[0-9a-fA-F][uU][lL])
conf_minmax=${conf_minmax}L
;;
esac
@@ -1533,7 +1557,11 @@ esac
cat <
+#include
#include
+#if defined(__linux__)
+#include
+#endif
#include $systeminfo$headers
${tail}
#include "${base}.h"
++++++ ksh93-realloc.dif ++++++
--- /var/tmp/diff_new_pack.sY6530/_old 2007-11-23 02:11:31.000000000 +0100
+++ /var/tmp/diff_new_pack.sY6530/_new 2007-11-23 02:11:31.000000000 +0100
@@ -98,7 +98,7 @@
job_unlock();
--- src/cmd/ksh93/sh/macro.c
+++ src/cmd/ksh93/sh/macro.c 2007-09-14 10:13:04.000000000 +0000
-@@ -1829,9 +1829,19 @@ static void comsubst(Mac_t *mp,int type)
+@@ -1829,8 +1829,11 @@ static void comsubst(Mac_t *mp,int type)
mac_copy(mp,&lastc,1);
lastc = 0;
}
@@ -106,18 +106,11 @@
+ if(c <= 0)
+ continue;
/* delay appending trailing new-lines */
- while(str[--c]=='\n')
-+ {
+- while(str[--c]=='\n')
++ while(c-->=0 && str[c]=='\n')
newlines++;
-+ if(c == 0)
-+ {
-+ c--;
-+ break;
-+ }
-+ }
if(++c < bufsize)
str[c] = 0;
- else
--- src/cmd/ksh93/sh/xec.c
+++ src/cmd/ksh93/sh/xec.c 2007-09-14 18:16:17.000000000 +0200
@@ -755,10 +755,11 @@
++++++ ksh93-shift_ijs.dif ++++++
--- /var/tmp/diff_new_pack.sY6530/_old 2007-11-23 02:11:31.000000000 +0100
+++ /var/tmp/diff_new_pack.sY6530/_new 2007-11-23 02:11:31.000000000 +0100
@@ -106,46 +106,96 @@
static int _isalph(int);
static int _ismetach(int);
--- src/cmd/ksh93/sh/macro.c
-+++ src/cmd/ksh93/sh/macro.c 2007-11-16 14:07:24.000000000 +0000
-@@ -1867,6 +1867,12 @@ static void comsubst(Mac_t *mp,int type)
++++ src/cmd/ksh93/sh/macro.c 2007-11-20 12:09:31.000000000 +0000
+@@ -1860,13 +1860,20 @@ static void comsubst(Mac_t *mp,int type)
return;
}
+#if SHOPT_MULTIBYTE
-+#define ismbdig(c) ((state[*(unsigned char*)(c)]==S_DIG)&&(!mbwide()||(mbsize(c)<2)))
++#define ismbstate(c,s) ((state[*(unsigned char*)(c)]==(s))&&(!mbwide()||(mbsize(c)<2)))
+#else
-+#define ismbdig(c) (state[*(unsigned char*)(c)]==S_DIG)
++#define ismbstate(c,s) (state[*(unsigned char*)(c)]==(s))
+#endif
+
++
/*
* copy <str> onto the stack
*/
-@@ -1892,6 +1898,16 @@ static void mac_copy(register Mac_t *mp,
+ static void mac_copy(register Mac_t *mp,register const char *str, register int size)
+ {
+ register char *state;
+- register const char *cp=str;
++ register const char *cp=str, *sp;
+ register int c,n,nopat;
+ nopat = (mp->quote||mp->assign==1||mp->arith);
+ if(mp->zeros)
+@@ -1885,14 +1892,25 @@ static void mac_copy(register Mac_t *mp,
/* insert \ before file expansion characters */
while(size-->0)
{
++ sp = cp;
+ c = state[n= *(unsigned char*)cp++];
+#if SHOPT_MULTIBYTE
+ if(mbwide())
-+ { ssize_t len = mbsize(cp);
-+ if (len > 1)
++ { ssize_t len = mbsize(sp);
++ if (len-- > 1)
+ { cp += len;
-+ size -= (len - 1);
++ size -= len;
+ continue;
+ }
+ }
+#endif /* SHOPT_MULTIBYTE */
- c = state[n= *(unsigned char*)cp++];
if(nopat&&(c==S_PAT||c==S_ESC||c==S_BRACT||c==S_ENDCH) && mp->pattern!=3)
c=1;
-@@ -1899,7 +1914,7 @@ static void mac_copy(register Mac_t *mp,
+ else if(mp->pattern==4 && (c==S_ESC||c==S_BRACT||c==S_ENDCH || isastchar(n)))
c=1;
else if(mp->pattern==2 && c==S_SLASH)
c=1;
- else if(mp->pattern==3 && c==S_ESC && (state[*(unsigned char*)cp]==S_DIG||(*cp==ESCAPE)))
-+ else if(mp->pattern==3 && c==S_ESC && (ismbdig(cp)||(*cp==ESCAPE)))
++ else if(mp->pattern==3 && c==S_ESC && (ismbstate(cp,S_DIG)||(*cp==ESCAPE)))
{
if(!(c=mp->quote))
cp++;
+@@ -1916,14 +1934,14 @@ static void mac_copy(register Mac_t *mp,
+ state = sh.ifstable;
+ if(mp->pattern)
+ {
+- char *sp = "&|()";
+- while(c = *sp++)
++ sp = "&|()";
++ while((c = *sp++))
+ {
+ if(state[c]==0)
+ state[c] = S_EPAT;
+ }
+ sp = "*?[{";
+- while(c = *sp++)
++ while((c = *sp++))
+ {
+ if(state[c]==0)
+ state[c] = S_PAT;
+@@ -1933,7 +1951,20 @@ static void mac_copy(register Mac_t *mp,
+ }
+ while(size-->0)
+ {
+- if((n=state[c= *(unsigned char*)cp++])==S_ESC || n==S_EPAT)
++ sp = cp;
++ n = state[c= *(unsigned char*)cp++];
++#if SHOPT_MULTIBYTE
++ if(mbwide() && (n!=S_MBYTE))
++ { ssize_t len = mbsize(sp);
++ if (len-- > 1)
++ { cp += len;
++ size -= len;
++ stakwrite(sp, len+1);
++ continue;
++ }
++ }
++#endif /* SHOPT_MULTIBYTE */
++ if(n==S_ESC || n==S_EPAT)
+ {
+ /* don't allow extended patterns in this case */
+ mp->patfound = mp->pattern;
--- src/cmd/ksh93/sh/string.c
+++ src/cmd/ksh93/sh/string.c 2007-03-28 18:23:11.582410000 +0200
@@ -42,7 +42,7 @@
@@ -172,6 +222,72 @@
dp += len;
sp += len;
continue;
+--- src/cmd/ksh93/tests/sjis.sh
++++ src/cmd/ksh93/tests/sjis.sh 2007-11-20 13:07:57.000000000 +0000
+@@ -0,0 +1,63 @@
++########################################################################
++# #
++# Copyright (c) 2007 SuSE Linux Products GmbH, Nuernberg, Germany #
++# #
++# This library is free software; you can redistribute it and/or #
++# modify it under the terms of the GNU Lesser General Public #
++# License as published by the Free Software Foundation; #
++# version 2.1 of the License. #
++# #
++# This library is distributed in the hope that it will be useful, #
++# but WITHOUT ANY WARRANTY; without even the implied warranty of #
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
++# GNU Lesser General Public License at #
++# http://www.gnu.org/licenses/lgpl-2.1.html for more details #
++# #
++# Author: Werner Fink #
++# #
++########################################################################
++
++#
++# Byte ranges for Shift-JIS encoding (hexadecimal):
++# First byte: 81-9F, E0-EF
++# Second byte: 40-7E, 80-FC
++#
++# Now test out some multi byte characters which
++# include 7bit aka ASCII bytes with 0x81 0x{40-7E}
++#
++
++typeset -i chr=0
++typeset -i err=0
++typeset printf=$(type -p printf 2>/dev/null)
++
++unset LC_ALL
++unset LC_CTYPE
++export LANG=ja_JP.SJIS
++
++for second in $(seq 64 126); do
++ : $((chr++))
++ second=$(printf '%x' ${second})
++ mbchar="$(printf "\x81\x${second}")"
++ if test -z "${mbchar}" ; then
++ : $((err++)) # ERROR in builtin printf
++ continue
++ fi
++ if test -x "${printf}" ; then
++ if test $(${printf} "\x81\x${second}") != ${mbchar} ; then
++ : $((err++)) # ERROR in builtin printf
++ continue
++ fi
++ fi
++ uq=$(echo ${mbchar})
++ dq=$(echo "${mbchar}")
++ test "$uq" != "$dq" && let err+=1
++ test ${#uq} -ne 1 -o ${#dq} -ne 1 && let err+=1
++done
++
++if test $err -ne 0 ; then
++ : err_exit
++ : err_exit
++ print -u2 -n "\t"
++ print -u2 -r ${0##*/}[$LINENO]: "Shift-JIS encoding failed"
++fi
++exit $err
--- src/lib/libast/comp/setlocale.c
+++ src/lib/libast/comp/setlocale.c 2007-03-28 18:24:16.098860000 +0200
@@ -32,6 +32,7 @@
@@ -228,6 +344,27 @@
extern int fwprintf(FILE*, const wchar_t*, ...);
extern int fwscanf(FILE*, const wchar_t*, ...);
+--- src/lib/libast/include/ast.h
++++ src/lib/libast/include/ast.h 2007-11-20 11:55:01.000000000 +0000
+@@ -176,13 +176,16 @@ typedef struct
+ #define mbcoll() (ast.mb_xfrm!=0)
+ #define mbwide() (mbmax()>1)
+
+-#define mbchar(p) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p++,ast.tmp_int)):(*(unsigned char*)(p++)))
+ #define mbinit() (mbwide()?(*ast.mb_towc)((wchar_t*)0,(char*)0,mbmax()):0)
+ #define mbsize(p) (mbwide()?(*ast.mb_len)((char*)(p),mbmax()):((p),1))
+ #define mbconv(s,w) (ast.mb_conv?(*ast.mb_conv)(s,w):((*(s)=(w)),1))
+ #define mbwidth(w) (ast.mb_width&&((ast.tmp_int=(*ast.mb_width)(w))>=0||(w)>UCHAR_MAX)?ast.tmp_int:1)
+ #define mbxfrm(t,f,n) (mbcoll()?(*ast.mb_xfrm)((char*)(t),(char*)(f),n):0)
+-
++#define mbchar(p) ((mbsize(p)>1) ? \
++ (((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0) ? \
++ ((p+=ast.tmp_int),ast.tmp_wchar) : \
++ (*(unsigned char*)(p++))) : \
++ (*(unsigned char*)(p++)))
+ /*
+ * common macros
+ */
--- src/lib/libast/regex/reglib.h
+++ src/lib/libast/regex/reglib.h 2006-04-19 12:17:59.000000000 +0200
@@ -57,6 +57,7 @@ typedef struct regsubop_s
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org