Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libcoshell/coquote.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1990-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 <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* single quote s into sp
26
* if type!=0 then /<getenv(<CO_ENV_TYPE>)/ translated to /$<CO_ENV_TYPE>/
27
*/
28
29
#include "colib.h"
30
31
void
32
coquote(register Sfio_t* sp, register const char* s, int type)
33
{
34
register int c;
35
36
if (type && (!state.type || !*state.type))
37
type = 0;
38
while (c = *s++)
39
{
40
sfputc(sp, c);
41
if (c == '\'')
42
{
43
sfputc(sp, '\\');
44
sfputc(sp, '\'');
45
sfputc(sp, '\'');
46
}
47
else if (type && c == '/' && *s == *state.type)
48
{
49
register const char* x = s;
50
register char* t = state.type;
51
52
while (*t && *t++ == *x) x++;
53
if (!*t && *x == '/')
54
{
55
s = x;
56
sfprintf(sp, "'$%s'", CO_ENV_TYPE);
57
}
58
}
59
}
60
}
61
62