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