version 1.204, 2008/01/07 09:51:03
|
version 1.205, 2008/02/01 10:15:14
|
Line 1911 char *AmayaParseUrl (const char *aName
|
Line 1911 char *AmayaParseUrl (const char *aName
|
char rel[MAX_LENGTH]; |
char rel[MAX_LENGTH]; |
char *p, *access; |
char *p, *access; |
HTURI given, related; |
HTURI given, related; |
int len; |
int len, l; |
char used_sep; |
char used_sep; |
char *used_str; |
char *used_str; |
|
|
Line 1978 char *AmayaParseUrl (const char *aName
|
Line 1978 char *AmayaParseUrl (const char *aName
|
related.fragment = 0; |
related.fragment = 0; |
} |
} |
|
|
|
len = MAX_LENGTH - 1 - strlen (result); |
if (wanted & AMAYA_PARSE_PATH) |
if (wanted & AMAYA_PARSE_PATH) |
{ |
{ |
if (given.absolute) |
if (given.absolute) |
{ |
{ |
/* All is given */ |
/* All is given */ |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
strcat (result, used_str); |
{ |
strcat (result, given.absolute); |
strcat (result, used_str); |
|
len--; |
|
} |
|
l = strlen (given.absolute); |
|
if (l <= len) |
|
{ |
|
strcat (result, given.absolute); |
|
len -= l; |
|
} |
} |
} |
else if (related.absolute) |
else if (related.absolute) |
{ |
{ |
/* Adopt path not name */ |
/* Adopt path not name */ |
strcat (result, used_str); |
strcat (result, used_str); |
strcat (result, related.absolute); |
len--; |
|
l = strlen (related.absolute); |
|
if (l <= len) |
|
{ |
|
strcat (result, related.absolute); |
|
len -= l; |
|
} |
if (given.relative) |
if (given.relative) |
{ |
{ |
/* Search part? */ |
/* Search part? */ |
p = strchr (result, '?'); |
p = strchr (result, '?'); |
if (!p) |
if (!p) |
p=result+strlen(result)-1; |
p = result + strlen(result) - 1; |
for (; *p!=used_sep; p--); /* last / */ |
for (; *p != used_sep; p--); /* last / */ |
/* Remove filename */ |
/* Remove filename */ |
p[1]=0; |
p[1] = EOS; |
/* Add given one */ |
/* Add given one */ |
strcat (result, given.relative); |
l = strlen (given.relative); |
} |
if (l <= len) |
|
{ |
|
strcat (result, given.relative); |
|
len -= l; |
|
} |
|
} |
} |
} |
else if (given.relative) |
else if (given.relative) |
|
{ |
/* what we've got */ |
/* what we've got */ |
strcat (result, given.relative); |
l = strlen (given.relative); |
|
if (l <= len) |
|
{ |
|
strcat (result, given.relative); |
|
len -= l; |
|
} |
|
} |
else if (related.relative) |
else if (related.relative) |
strcat (result, related.relative); |
{ |
|
l = strlen (related.relative); |
|
if (l <= len) |
|
{ |
|
strcat (result, related.relative); |
|
len -= l; |
|
} |
|
} |
else |
else |
/* No inheritance */ |
{ |
strcat (result, used_str); |
/* No inheritance */ |
|
strcat (result, used_str); |
|
len--; |
|
} |
} |
} |
|
|
if (wanted & AMAYA_PARSE_ANCHOR) |
if (wanted & AMAYA_PARSE_ANCHOR) |
if (given.fragment || related.fragment) |
if (len && (given.fragment || related.fragment)) |
{ |
{ |
if (given.absolute && given.fragment) |
if (given.absolute && given.fragment) |
{ |
{ |
/*Fixes for relURLs...*/ |
/*Fixes for relURLs...*/ |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
strcat (result, "#"); |
{ |
strcat (result, given.fragment); |
strcat (result, "#"); |
|
len --; |
|
} |
|
l = strlen (given.fragment); |
|
if (l <= len) |
|
strcat (result, given.fragment); |
} |
} |
else if (!(given.absolute) && !(given.fragment)) |
else if (given.absolute || given.fragment) |
strcat (result, ""); |
|
else |
|
{ |
{ |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
if (wanted & AMAYA_PARSE_PUNCTUATION) |
strcat (result, "#"); |
{ |
strcat (result, given.fragment ? given.fragment : related.fragment); |
strcat (result, "#"); |
|
len--; |
|
} |
|
if (given.fragment) |
|
{ |
|
l = strlen (given.fragment); |
|
if (l <= len) |
|
strcat (result, given.fragment); |
|
} |
|
else |
|
{ |
|
l = strlen (given.fragment); |
|
if (l <= len) |
|
strcat (result, related.fragment); |
|
} |
} |
} |
} |
} |
len = strlen (result); |
return_value = TtaStrdup (result); |
if ((return_value = (char *)TtaGetMemory (len + 1)) != NULL) |
|
strcpy (return_value, result); |
|
return (return_value); /* exactly the right length */ |
return (return_value); /* exactly the right length */ |
} |
} |
|
|