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