Initial commit.
[CMakeLuaTailorHgBridge.git] / CMakeLua / Utilities / cmxmlrpc / xmlrpc_strutil.c
blob8efdb4072b942f1cb404fc849adcec5ea03c3a52
1 #include <string.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <ctype.h>
6 #include "xmlrpc.h"
7 #include "xmlrpc_int.h"
8 #include "xmlrpc_config.h"
12 const char *
13 xmlrpc_makePrintable(const char * const input) {
14 /*----------------------------------------------------------------------------
15 Convert an arbitrary string of bytes (null-terminated, though) to
16 printable ASCII. E.g. convert newlines to "\n".
18 Return the result in newly malloc'ed storage. Return NULL if we can't
19 get the storage.
20 -----------------------------------------------------------------------------*/
21 char * output;
22 const size_t inputLength = strlen(input);
24 output = malloc(inputLength*4+1);
26 if (output != NULL) {
27 unsigned int inputCursor, outputCursor;
29 for (inputCursor = 0, outputCursor = 0;
30 inputCursor < inputLength;
31 ++inputCursor) {
33 if (isprint((int)(input[inputCursor])))
34 output[outputCursor++] = input[inputCursor];
35 else if (input[inputCursor] == '\n') {
36 output[outputCursor++] = '\\';
37 output[outputCursor++] = 'n';
38 } else if (input[inputCursor] == '\t') {
39 output[outputCursor++] = '\\';
40 output[outputCursor++] = 't';
41 } else if (input[inputCursor] == '\a') {
42 output[outputCursor++] = '\\';
43 output[outputCursor++] = 'a';
44 } else if (input[inputCursor] == '\r') {
45 output[outputCursor++] = '\\';
46 output[outputCursor++] = 'r';
47 } else {
48 snprintf(&output[outputCursor], 4, "\\x%02x",
49 input[inputCursor]);
52 output[outputCursor+1] = '\0';
54 return output;
59 const char *
60 xmlrpc_makePrintableChar(char const input) {
62 const char * retval;
64 if (input == '\0')
65 retval = strdup("\\0");
66 else {
67 char buffer[2];
69 buffer[0] = input;
70 buffer[1] = '\0';
72 retval = xmlrpc_makePrintable(buffer);
74 return retval;