mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-20 09:26:37 +00:00
Replace str_fromprint() with strn_fromprint()
This commit is contained in:
parent
8d0e056f81
commit
080ccd957a
@ -482,7 +482,7 @@ int app_echo(const struct cli_parsed *parsed, struct cli_context *context)
|
|||||||
DEBUGF("echo:argv[%d]=\"%s\"", i, arg);
|
DEBUGF("echo:argv[%d]=\"%s\"", i, arg);
|
||||||
if (escapes) {
|
if (escapes) {
|
||||||
unsigned char buf[strlen(arg)];
|
unsigned char buf[strlen(arg)];
|
||||||
size_t len = str_fromprint(buf, arg);
|
size_t len = strn_fromprint(buf, sizeof buf, arg, '\0', NULL);
|
||||||
cli_write(context, buf, len);
|
cli_write(context, buf, len);
|
||||||
} else
|
} else
|
||||||
cli_puts(context, arg);
|
cli_puts(context, arg);
|
||||||
|
23
str.c
23
str.c
@ -343,37 +343,42 @@ size_t toprint_str_len(const char *srcStr, const char quotes[2])
|
|||||||
return srcStr ? strbuf_count(strbuf_toprint_quoted(strbuf_local(NULL, 0), quotes, srcStr)) : 4;
|
return srcStr ? strbuf_count(strbuf_toprint_quoted(strbuf_local(NULL, 0), quotes, srcStr)) : 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t str_fromprint(unsigned char *dst, const char *src)
|
size_t strn_fromprint(unsigned char *dst, size_t dstlen, const char *src, char endquote, const char **afterp)
|
||||||
{
|
{
|
||||||
unsigned char *const odst = dst;
|
unsigned char *const odst = dst;
|
||||||
while (*src) {
|
unsigned char *const edst = dst + dstlen;
|
||||||
|
while (*src && *src != endquote && dst < edst) {
|
||||||
switch (*src) {
|
switch (*src) {
|
||||||
case '\\':
|
case '\\':
|
||||||
++src;
|
++src;
|
||||||
|
unsigned char d;
|
||||||
switch (*src) {
|
switch (*src) {
|
||||||
case '\0': *dst++ = '\\'; break;
|
case '\0': d = '\\'; break;
|
||||||
case '0': *dst++ = '\0'; ++src; break;
|
case '0': d = '\0'; ++src; break;
|
||||||
case 'n': *dst++ = '\n'; ++src; break;
|
case 'n': d = '\n'; ++src; break;
|
||||||
case 'r': *dst++ = '\r'; ++src; break;
|
case 'r': d = '\r'; ++src; break;
|
||||||
case 't': *dst++ = '\t'; ++src; break;
|
case 't': d = '\t'; ++src; break;
|
||||||
case 'x':
|
case 'x':
|
||||||
if (isxdigit(src[1]) && isxdigit(src[2])) {
|
if (isxdigit(src[1]) && isxdigit(src[2])) {
|
||||||
++src;
|
++src;
|
||||||
fromhex(dst++, src, 1);
|
fromhex(&d, src, 1);
|
||||||
src += 2;
|
src += 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
*dst++ = *src++;
|
d = *src++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
*dst++ = d;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
*dst++ = *src++;
|
*dst++ = *src++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (afterp)
|
||||||
|
*afterp = src;
|
||||||
return dst - odst;
|
return dst - odst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
str.h
2
str.h
@ -81,7 +81,7 @@ char *toprint(char *dstStr, ssize_t dstBufSiz, const char *srcBuf, size_t srcByt
|
|||||||
char *toprint_str(char *dstStr, ssize_t dstBufSiz, const char *srcStr, const char quotes[2]);
|
char *toprint_str(char *dstStr, ssize_t dstBufSiz, const char *srcStr, const char quotes[2]);
|
||||||
size_t toprint_len(const char *srcBuf, size_t srcBytes, const char quotes[2]);
|
size_t toprint_len(const char *srcBuf, size_t srcBytes, const char quotes[2]);
|
||||||
size_t toprint_str_len(const char *srcStr, const char quotes[2]);
|
size_t toprint_str_len(const char *srcStr, const char quotes[2]);
|
||||||
size_t str_fromprint(unsigned char *dst, const char *src);
|
size_t strn_fromprint(unsigned char *dst, size_t dstlen, const char *src, char endquote, const char **afterp);
|
||||||
|
|
||||||
#define alloca_toprint(dstlen,buf,len) toprint((char *)alloca((dstlen) == -1 ? toprint_len((const char *)(buf),(len), "``") + 1 : (dstlen)), (dstlen), (const char *)(buf), (len), "``")
|
#define alloca_toprint(dstlen,buf,len) toprint((char *)alloca((dstlen) == -1 ? toprint_len((const char *)(buf),(len), "``") + 1 : (dstlen)), (dstlen), (const char *)(buf), (len), "``")
|
||||||
#define alloca_str_toprint_quoted(str, quotes) toprint_str((char *)alloca(toprint_str_len((str), (quotes)) + 1), -1, (str), (quotes))
|
#define alloca_str_toprint_quoted(str, quotes) toprint_str((char *)alloca(toprint_str_len((str), (quotes)) + 1), -1, (str), (quotes))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user