1*31914882SAlex Richardson /* 2*31914882SAlex Richardson * Common string test code. 3*31914882SAlex Richardson * 4*31914882SAlex Richardson * Copyright (c) 2020, Arm Limited. 5*31914882SAlex Richardson * SPDX-License-Identifier: MIT 6*31914882SAlex Richardson */ 7*31914882SAlex Richardson 8*31914882SAlex Richardson #include <ctype.h> 9*31914882SAlex Richardson #include <stdio.h> 10*31914882SAlex Richardson 11*31914882SAlex Richardson /* Accounting errors for a test case. */ 12*31914882SAlex Richardson static int err_count; 13*31914882SAlex Richardson #define ERR_LIMIT 10 14*31914882SAlex Richardson #define ERR(...) (err_count++, printf (__VA_ARGS__)) 15*31914882SAlex Richardson 16*31914882SAlex Richardson static inline void 17*31914882SAlex Richardson quotechar (unsigned char c) 18*31914882SAlex Richardson { 19*31914882SAlex Richardson if (isprint (c)) 20*31914882SAlex Richardson putchar (c); 21*31914882SAlex Richardson else 22*31914882SAlex Richardson printf ("\\x%02x", c); 23*31914882SAlex Richardson } 24*31914882SAlex Richardson 25*31914882SAlex Richardson /* quoted print around at or the entire string if at < 0. */ 26*31914882SAlex Richardson static void 27*31914882SAlex Richardson quoteat (const char *prefix, const void *p, int len, int at) 28*31914882SAlex Richardson { 29*31914882SAlex Richardson static const int CTXLEN = 15; 30*31914882SAlex Richardson int i; 31*31914882SAlex Richardson const char *pre = "\""; 32*31914882SAlex Richardson const char *post = "\""; 33*31914882SAlex Richardson const char *s = p; 34*31914882SAlex Richardson if (at > CTXLEN) 35*31914882SAlex Richardson { 36*31914882SAlex Richardson s += at - CTXLEN; 37*31914882SAlex Richardson len -= at - CTXLEN; 38*31914882SAlex Richardson pre = "...\""; 39*31914882SAlex Richardson } 40*31914882SAlex Richardson if (at >= 0 && len > 2 * CTXLEN + 1) 41*31914882SAlex Richardson { 42*31914882SAlex Richardson len = 2 * CTXLEN + 1; 43*31914882SAlex Richardson post = "\"..."; 44*31914882SAlex Richardson } 45*31914882SAlex Richardson printf ("%4s: %s", prefix, pre); 46*31914882SAlex Richardson for (i = 0; i < len; i++) 47*31914882SAlex Richardson quotechar (s[i]); 48*31914882SAlex Richardson printf ("%s\n", post); 49*31914882SAlex Richardson } 50*31914882SAlex Richardson 51*31914882SAlex Richardson static inline void 52*31914882SAlex Richardson quote (const char *prefix, const void *p, int len) 53*31914882SAlex Richardson { 54*31914882SAlex Richardson quoteat (prefix, p, len, -1); 55*31914882SAlex Richardson } 56