blob: b9c034af26b0f209d7d448915200797ff9850621 [file] [log] [blame]
/*
* Common string test code.
*
* Copyright (c) 2020, Arm Limited.
* SPDX-License-Identifier: MIT
*/
#include <ctype.h>
#include <stdio.h>
/* Accounting errors for a test case. */
static int err_count;
#define ERR_LIMIT 10
#define ERR(...) (err_count++, printf(__VA_ARGS__))
static inline void quotechar(unsigned char c)
{
if (isprint(c))
putchar(c);
else
printf("\\x%02x", c);
}
/* quoted print around at or the entire string if at < 0. */
static void quoteat(const char *prefix, const void *p, int len, int at)
{
static const int CTXLEN = 15;
int i;
const char *pre="\"";
const char *post="\"";
const char *s = p;
if (at > CTXLEN) {
s += at - CTXLEN;
len -= at - CTXLEN;
pre = "...\"";
}
if (at >= 0 && len > 2*CTXLEN + 1) {
len = 2*CTXLEN + 1;
post = "\"...";
}
printf("%4s: %s", prefix, pre);
for (i = 0; i < len; i++)
quotechar(s[i]);
printf("%s\n", post);
}
static inline void quote(const char *prefix, const void *p, int len)
{
quoteat(prefix, p, len, -1);
}