1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2011 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Eclipse Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.eclipse.org/org/documents/epl-v10.html * 11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #pragma prototyped 23 /* 24 * Glenn Fowler 25 * AT&T Research 26 * 27 * convert \X character constants in s in place 28 * the length of the converted s is returned (may have embedded \0's) 29 * wide chars absent locale guidance default to UTF-8 30 * strexp() FMT_EXP_* flags passed to chrexp() for selective conversion 31 */ 32 33 #include <ast.h> 34 35 int 36 strexp(register char* s, int flags) 37 { 38 register char* t; 39 register unsigned int c; 40 char* b; 41 char* e; 42 int w; 43 44 b = t = s; 45 while (c = *s++) 46 { 47 if (c == '\\') 48 { 49 c = chrexp(s - 1, &e, &w, flags); 50 s = e; 51 if (w) 52 { 53 t += mbwide() ? mbconv(t, c) : wc2utf8(t, c); 54 continue; 55 } 56 } 57 *t++ = c; 58 } 59 *t = 0; 60 return t - b; 61 } 62 63 int 64 stresc(register char* s) 65 { 66 return strexp(s, FMT_EXP_CHAR|FMT_EXP_LINE|FMT_EXP_WIDE); 67 } 68