Bueno parece que el error que yo detect� tal como sospechaba tiene
una repercusi�n bastante grande pero no es facil determinar con precisi�n
a que afecta y a que no afecta, asi que voy a recopilar la informaci�n
que me ha llegado gracias a vosotros.
La cosa en mi opini�n, es tan gorda que ten�a miedo de estar equivocandome
en alguna tonter�a, pero ya con lo que me habeis dicho lo que me pregunto
es como una cosa as� ha conseguido pasar desapercibida tanto tiempo.
Afecta a Potato 2.2r3, pero tambi�n aparece en una RedHat 7.1 con
kernel 2.4.9, y a una Woody, pero seguro que no queda en eso la
cosa.
Afecta a LANG=es_ES pero no parece afectar a otras como LANG=es,
o LANG=es_AR, LANG=es_MX, etc.
No parece que afecte al uso de '[[:upper:]]' y '[[:lower:]]'.
No afecta por igual a todos los programas. Por ejemplo a sed
parece que no le afecta y tengo noticias de que algunas
pruebas con perl y python parecen funcionar sin problemas.
Yo he realizado una prueba m�s con el propio bash y crei que
no le afectaba (no hab�a exportado LANG) pero si.
$ ls ?
A B Y Z a b y z
$ ls [A-Z]
A B Y Z b y z
No he probado con lex pero tiene que haber muchos programas
afectados.
Parece que afecta a egrep '[A-Z]', egrep '[a-z] pero no es solo
a egrep porque tambien afecta a bash como ya he dicho y a un
programita que hice yo en C que usaba directamente la familia
funci�nes GNU para expresiones regulares POSIX ( regcomp, regexec,
regerror, regfree), que forman parte de la glibc.
El programa que yo hice es:
============8<-----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <libintl.h>
#include <regex.h>
char cadaux[300];
int EvalRegExpReg(char *Patron, char *Cad){
regex_t preg;
int cod1, cod2;
cod1=regcomp(&preg, Patron, REG_EXTENDED);
if (cod1!=0){
cod2=regerror(cod1, &preg, cadaux, sizeof(cadaux));
fprintf(stderr, "Error '%s' compilando patr�n '%s'\n",
cadaux, Patron);
return cod1;
}
cod1=regexec(&preg, Cad, 0, NULL, 0);
if (cod1!=0){
cod2=regerror(cod1, &preg, cadaux, sizeof(cadaux));
fprintf(stderr, "ExpresionRegular='%s', Cadena='%s'\n",
Patron, Cad);
fprintf(stderr, "Resultado= '%s'\n", cadaux);
}
regfree(&preg);
return cod1;
}
main(int argc, char **argv){
setlocale(LC_ALL, "");
if (argc!=3){
fprintf(stderr, "Uso:\nregexpr <patron> <cadena>\n");
exit (-1);
}
exit (EvalRegExpReg( argv[1], argv[2]));
}
============8<------------------------------------------------------
Manuel Garc�a <[EMAIL PROTECTED]> apunta la posibilidad de
que sea alg�n problema con ..
LC_CTYPE Character classification and case conversion.
Un saludo
Antonio Castro
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/\ /\ Ciberdroide Inform�tica (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
_|0 0|_
+-oOOO--(___o___)--OOOo----------------------------------------------------+
| . . . . U U . . . . Antonio Castro Snurmacher [EMAIL PROTECTED] |
| . . . . . . . . . . |
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+