|
|
1.1 ! root 1: #include <ctype.h> ! 2: #include <stdio.h> ! 3: #include <time.h> ! 4: #include "lib.h" ! 5: ! 6: void ! 7: quote(char *qs, char *us) ! 8: { ! 9: unsigned char c; ! 10: ! 11: while (c = *us++) ! 12: if (!isgraph(c) || c == '\\') { ! 13: *qs++ = '\\'; ! 14: switch (c) { ! 15: case '\\': ! 16: *qs++ = '\\'; ! 17: break; ! 18: case '\a': ! 19: *qs++ = 'a'; ! 20: break; ! 21: case '\b': ! 22: *qs++ = 'b'; ! 23: break; ! 24: case '\f': ! 25: *qs++ = 'f'; ! 26: break; ! 27: case '\n': ! 28: *qs++ = 'n'; ! 29: break; ! 30: case '\r': ! 31: *qs++ = 'r'; ! 32: break; ! 33: case '\t': ! 34: *qs++ = 't'; ! 35: break; ! 36: case '\v': ! 37: *qs++ = 'v'; ! 38: break; ! 39: default: ! 40: *qs++ = c / 64 % 8 + '0'; ! 41: *qs++ = c / 8 % 8 + '0'; ! 42: *qs++ = c % 8 + '0'; ! 43: break; ! 44: } ! 45: } else ! 46: *qs++ = c; ! 47: *qs = '\0'; ! 48: } ! 49: ! 50: void ! 51: unquote(char *us, char *qs) ! 52: { ! 53: unsigned char c; ! 54: int i; ! 55: ! 56: while (c = *qs++) ! 57: if (c == '\\') { ! 58: c = *qs++; ! 59: switch (c) { ! 60: case '\\': ! 61: *us++ = '\\'; ! 62: break; ! 63: case 'a': ! 64: *us++ = '\a'; ! 65: break; ! 66: case 'b': ! 67: *us++ = '\b'; ! 68: break; ! 69: case 'f': ! 70: *us++ = '\f'; ! 71: break; ! 72: case 'n': ! 73: *us++ = '\n'; ! 74: break; ! 75: case 'r': ! 76: *us++ = '\r'; ! 77: break; ! 78: case 't': ! 79: *us++ = '\t'; ! 80: break; ! 81: case 'v': ! 82: *us++ = '\v'; ! 83: break; ! 84: default: ! 85: *us = 0; ! 86: for (i = 0; i < 3; ++i) { ! 87: if (c < '0' || c > '7') ! 88: break; ! 89: *us = *us * 8 + c - '0'; ! 90: c = *qs++; ! 91: } ! 92: --qs; ! 93: ++us; ! 94: break; ! 95: } ! 96: } else ! 97: *us++ = c; ! 98: *us = '\0'; ! 99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.