aboutsummaryrefslogtreecommitdiffstats
path: root/apps/expand.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/expand.c')
-rw-r--r--apps/expand.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/apps/expand.c b/apps/expand.c
index 2c07ca1..a0ce888 100644
--- a/apps/expand.c
+++ b/apps/expand.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.2 2008/03/07 14:13:40 james
+ * *** empty log message ***
+ *
* Revision 1.1 2008/03/07 13:56:39 james
* *** empty log message ***
*
@@ -108,7 +111,7 @@ hex (const char **in)
}
char *
-expand (const char *in)
+expand (const char *in,int *len)
{
const char *iptr = in;
int l;
@@ -123,42 +126,53 @@ expand (const char *in)
if (!ret) return ret;
+
+ l=0;
+
while (*iptr) {
if (*iptr == '\\') {
- iptr++;
+ iptr++;
switch (*iptr) {
case '\'':
case '\"':
case '\?':
case '\\':
*(optr++) = *(iptr++);
+ l++;
break;
case 'a':
*(optr++) = '\a';
+ l++;
iptr++;
break;
case 'b':
*(optr++) = '\b';
+ l++;
iptr++;
break;
case 'f':
*(optr++) = '\f';
+ l++;
iptr++;
break;
case 'n':
*(optr++) = '\n';
+ l++;
iptr++;
break;
case 'r':
*(optr++) = '\r';
+ l++;
iptr++;
break;
case 't':
*(optr++) = '\t';
+ l++;
iptr++;
break;
case 'v':
*(optr++) = '\v';
+ l++;
iptr++;
break;
case '0':
@@ -170,19 +184,27 @@ expand (const char *in)
case '6':
case '7':
*(optr++) = octal (&iptr);
+ l++;
break;
case 'x':
*(optr++) = hex (&iptr);
+ l++;
break;
default:
*(optr++) = '\\';
+ l++;
*(optr++) = *(iptr++);
+ l++;
}
} else {
*(optr++) = *(iptr++);
+ l++;
}
}
+ if (*len) *len=l;
+
+
*(optr++) = 0;
return ret;
}