mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-11-27 02:50:57 +01:00
manual/7784
This commit is contained in:
parent
e644c39ba1
commit
9ec0970313
1 changed files with 6 additions and 11 deletions
17
Src/utils.c
17
Src/utils.c
|
|
@ -2950,9 +2950,7 @@ hasspecial(char const *s)
|
||||||
|
|
||||||
/* Quote the string s and return the result. If e is non-zero, the *
|
/* Quote the string s and return the result. If e is non-zero, the *
|
||||||
* pointer it points to may point to a position in s and in e the position *
|
* pointer it points to may point to a position in s and in e the position *
|
||||||
* of the corresponding character in the quoted string is returned. Like *
|
* of the corresponding character in the quoted string is returned. *
|
||||||
* e, te may point to a position in the string and pl is used to return *
|
|
||||||
* the position of the character pointed to by te in the quoted string. *
|
|
||||||
* The last argument should be zero if this is to be used outside a string, *
|
* The last argument should be zero if this is to be used outside a string, *
|
||||||
* one if it is to be quoted for the inside of a single quoted string, and *
|
* one if it is to be quoted for the inside of a single quoted string, and *
|
||||||
* two if it is for the inside of double quoted string. *
|
* two if it is for the inside of double quoted string. *
|
||||||
|
|
@ -2964,14 +2962,14 @@ bslashquote(const char *s, char **e, int instring)
|
||||||
{
|
{
|
||||||
const char *u, *tt;
|
const char *u, *tt;
|
||||||
char *v;
|
char *v;
|
||||||
VARARR(char, buf, 2 * strlen(s) + 1);
|
char *buf = ncalloc(2 * strlen(s) + 1);
|
||||||
int sf = 0;
|
int sf = 0;
|
||||||
|
|
||||||
tt = v = buf;
|
tt = v = buf;
|
||||||
u = s;
|
u = s;
|
||||||
for (; *u; u++) {
|
for (; *u; u++) {
|
||||||
if (e && *e == u)
|
if (e && *e == u)
|
||||||
*e = v, sf |= 1;
|
*e = v, sf = 1;
|
||||||
if (ispecial(*u) &&
|
if (ispecial(*u) &&
|
||||||
(!instring || (isset(BANGHIST) &&
|
(!instring || (isset(BANGHIST) &&
|
||||||
*u == (char)bangchar) ||
|
*u == (char)bangchar) ||
|
||||||
|
|
@ -2998,15 +2996,12 @@ bslashquote(const char *s, char **e, int instring)
|
||||||
*v++ = *u;
|
*v++ = *u;
|
||||||
}
|
}
|
||||||
*v = '\0';
|
*v = '\0';
|
||||||
tt = dupstring(buf);
|
|
||||||
v += tt - buf;
|
|
||||||
if (e && (sf & 1))
|
|
||||||
*e += tt - buf;
|
|
||||||
|
|
||||||
if (e && *e == u)
|
if (e && *e == u)
|
||||||
*e = v;
|
*e = v, sf = 1;
|
||||||
|
DPUTS(!e || sf, "BUG: Wild pointer *e in bslashquote()");
|
||||||
|
|
||||||
return (char *) tt;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unmetafy and output a string, quoted if it contains special characters. */
|
/* Unmetafy and output a string, quoted if it contains special characters. */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue