1/* 2 File: unquote.c 3 4 Copyright (C) 2003 Andreas Gruenbacher <a.gruenbacher@computer.org> 5 6 This program is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Library General Public 8 License as published by the Free Software Foundation; either 9 version 2 of the License, or (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Library General Public License for more details. 15 16 You should have received a copy of the GNU Library General Public 17 License along with this library; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19*/ 20 21#include <stdio.h> 22#include <stdlib.h> 23#include <ctype.h> 24#include "misc.h" 25 26char *unquote(char *str) 27{ 28 unsigned char *s, *t; 29 30 if (!str) 31 return str; 32 33 for (s = (unsigned char *)str; *s != '\0'; s++) 34 if (*s == '\\') 35 break; 36 if (*s == '\0') 37 return str; 38 39#define isoctal(c) \ 40 ((c) >= '0' && (c) <= '7') 41 42 t = s; 43 do { 44 if (*s == '\\' && 45 isoctal(*(s+1)) && isoctal(*(s+2)) && isoctal(*(s+3))) { 46 *t++ = ((*(s+1) - '0') << 6) + 47 ((*(s+2) - '0') << 3) + 48 ((*(s+3) - '0') ); 49 s += 3; 50 } else 51 *t++ = *s; 52 } while (*s++ != '\0'); 53 54 return str; 55} 56