Scripts kai CR-LF

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Oct 5 05:01:41 EEST 2005


On 2005-10-05 04:46, Michael Iatrou <iatrou at serverhive.com> wrote:
> When the date was Monday 03 October 2005 18:16, Antonios Christofides wrote:
> > Το carriage return δεν είναι white space; Το man isspace λέει πως
> > είναι, τουλάχιστον σε locales C και POSIX (και τα παραπάνω τα δοκίμασα
> > σε POSIX).
>
> Στο fs/binfmt_script.c, στo kernel source, μπορείς να δεις γιατί
> συμβαίνει αυτό: [...]
> Αν όμως χρησιμοποιήσεις το παρακάτω ξεδιάντροπα απλό patch, δεν θα υπάρχει
> κανένα πρόβλημα.

> --- /usr/src/linux-2.6.13.2/fs/binfmt_script.c~	2005-10-05 04:41:09.000000000 +0300
> +++ /usr/src/linux-2.6.13.2/fs/binfmt_script.c	2005-10-05 04:41:09.000000000 +0300
> @@ -41,7 +41,7 @@
>  	*cp = '\0';
>  	while (cp > bprm->buf) {
>  		cp--;
> -		if ((*cp == ' ') || (*cp == '\t'))
> +		if ((*cp == ' ') || (*cp == '\t') || (*cp == '\r'))
>  			*cp = '\0';
>  		else
>  			break;

Παρόμοιο πράγμα υπάρχει στον κώδικα που εκτελεί shell scripts στο
FreeBSD, κι ο έλεγχος είναι πάλι για SPACE ή TAB:

     27 #include <sys/cdefs.h>
     28 __FBSDID("$FreeBSD: src/sys/kern/imgact_shell.c,v 1.35 2005/06/19 02:21:03 gad Exp $");
    ...
    153         /*
    154          * Find the beginning of the options (if any), and the end-of-line.
    155          * Then trim the trailing blanks off the value.  Note that some
    156          * other operating systems do *not* trim the trailing whitespace...
    157          */
    158         while (ihp < maxp && ((*ihp == ' ') || (*ihp == '\t')))
    159                 ihp++;
    160         optb = ihp;
    161         while (ihp < maxp && ((*ihp != '\n') && (*ihp != '\0')))
    162                 ihp++;
    163         opte = ihp;
>>> 164         while (--ihp > optb && ((*ihp == ' ') || (*ihp == '\t')))
>>> 165                 opte = ihp;

Δεν ξέρω όμως γιατί κι εδώ ΜΟΝΟ το space και το TAB θεωρούνται
`whitespace'.  Θα ρωτήσω τους ``elders'' να μας πούν :P




More information about the Linux-greek-users mailing list