mirror of
https://github.com/golang/go
synced 2024-11-02 11:50:30 +00:00
gc, ld: sync pathtoprefix + add comments
R=lvd, lvd CC=golang-dev https://golang.org/cl/5332051
This commit is contained in:
parent
d6ff3c1177
commit
80bce97e45
2 changed files with 13 additions and 3 deletions
|
@ -2916,6 +2916,8 @@ ngotype(Node *n)
|
|||
* non-7-bit clean bytes turn into %xx. The period needs escaping
|
||||
* only in the last segment of the path, and it makes for happier
|
||||
* users if we escape that as little as possible.
|
||||
*
|
||||
* If you edit this, edit ../ld/lib.c:/^pathtoprefix copy too.
|
||||
*/
|
||||
static char*
|
||||
pathtoprefix(char *s)
|
||||
|
|
|
@ -903,18 +903,26 @@ unmal(void *v, uint32 n)
|
|||
* Convert raw string to the prefix that will be used in the symbol table.
|
||||
* Invalid bytes turn into %xx. Right now the only bytes that need
|
||||
* escaping are %, ., and ", but we escape all control characters too.
|
||||
*
|
||||
* Must be same as ../gc/subr.c:/^pathtoprefix.
|
||||
*/
|
||||
static char*
|
||||
pathtoprefix(char *s)
|
||||
{
|
||||
static char hex[] = "0123456789abcdef";
|
||||
char *p, *r, *w;
|
||||
char *p, *r, *w, *l;
|
||||
int n;
|
||||
|
||||
// find first character past the last slash, if any.
|
||||
l = s;
|
||||
for(r=s; *r; r++)
|
||||
if(*r == '/')
|
||||
l = r+1;
|
||||
|
||||
// check for chars that need escaping
|
||||
n = 0;
|
||||
for(r=s; *r; r++)
|
||||
if(*r <= ' ' || *r == '.' || *r == '%' || *r == '"')
|
||||
if(*r <= ' ' || (*r == '.' && r >= l) || *r == '%' || *r == '"' || *r >= 0x7f)
|
||||
n++;
|
||||
|
||||
// quick exit
|
||||
|
@ -924,7 +932,7 @@ pathtoprefix(char *s)
|
|||
// escape
|
||||
p = mal((r-s)+1+2*n);
|
||||
for(r=s, w=p; *r; r++) {
|
||||
if(*r <= ' ' || *r == '.' || *r == '%' || *r == '"') {
|
||||
if(*r <= ' ' || (*r == '.' && r >= l) || *r == '%' || *r == '"' || *r >= 0x7f) {
|
||||
*w++ = '%';
|
||||
*w++ = hex[(*r>>4)&0xF];
|
||||
*w++ = hex[*r&0xF];
|
||||
|
|
Loading…
Reference in a new issue