aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-01-25 18:31:44 -0800
committerRuss Cox <rsc@golang.org>2010-01-25 18:31:44 -0800
commit7263bfc73bef737b8ba22b78bf1f8bfa87965ad4 (patch)
tree85586eed3b308d2c159cd35b6eb436f8173a5f31
parent531e6b77c888caf22ac7c63503a4ef74064c9a77 (diff)
downloadgo-7263bfc73bef737b8ba22b78bf1f8bfa87965ad4.tar.gz
go-7263bfc73bef737b8ba22b78bf1f8bfa87965ad4.zip
cc: correct handling of leading ·
R=ken2 CC=golang-dev https://golang.org/cl/193081
-rw-r--r--src/cmd/cc/lex.c7
-rw-r--r--src/cmd/cc/lexbody13
2 files changed, 11 insertions, 9 deletions
diff --git a/src/cmd/cc/lex.c b/src/cmd/cc/lex.c
index 857b15206f..fd4b0b87b2 100644
--- a/src/cmd/cc/lex.c
+++ b/src/cmd/cc/lex.c
@@ -196,7 +196,8 @@ compile(char *file, char **defs, int ndef)
int i, c, fd[2];
static int first = 1;
- ofile = strdup(file);
+ ofile = alloc(strlen(file)+10);
+ strcpy(ofile, file);
p = utfrrune(ofile, pathchar());
if(p) {
*p++ = 0;
@@ -405,9 +406,9 @@ lookup(void)
int c, n;
char *r, *w;
- if(symb[0] == 0xc2 && symb[1] == 0xb7) {
+ if((uchar)symb[0] == 0xc2 && (uchar)symb[1] == 0xb7) {
// turn leading · into ""·
- memmove(symb+2, symb, w-symb);
+ memmove(symb+2, symb, strlen(symb)+1);
symb[0] = '"';
symb[1] = '"';
}
diff --git a/src/cmd/cc/lexbody b/src/cmd/cc/lexbody
index 7c726b3f5e..c6246e95ff 100644
--- a/src/cmd/cc/lexbody
+++ b/src/cmd/cc/lexbody
@@ -223,6 +223,13 @@ lookup(void)
int c, l;
char *r, *w;
+ if((uchar)symb[0] == 0xc2 && (uchar)symb[1] == 0xb7) {
+ // turn leading · into ""·
+ memmove(symb+2, symb, strlen(symb)+1);
+ symb[0] = '"';
+ symb[1] = '"';
+ }
+
// turn · into .
for(r=w=symb; *r; r++) {
if((uchar)*r == 0xc2 && (uchar)*(r+1) == 0xb7) {
@@ -232,12 +239,6 @@ lookup(void)
*w++ = *r;
}
*w++ = '\0';
- if(symb[0] == '.') {
- // turn leading . into "".
- memmove(symb+2, symb, w-symb);
- symb[0] = '"';
- symb[1] = '"';
- }
h = 0;
for(p=symb; c = *p; p++)