Blame src/lib/libcoshell/coquote.c

Packit Service a8c26c
/***********************************************************************
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*               This software is part of the ast package               *
Packit Service a8c26c
*          Copyright (c) 1990-2011 AT&T Intellectual Property          *
Packit Service a8c26c
*                      and is licensed under the                       *
Packit Service a8c26c
*                 Eclipse Public License, Version 1.0                  *
Packit Service a8c26c
*                    by AT&T Intellectual Property                     *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*                A copy of the License is available at                 *
Packit Service a8c26c
*          http://www.eclipse.org/org/documents/epl-v10.html           *
Packit Service a8c26c
*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*              Information and Software Systems Research               *
Packit Service a8c26c
*                            AT&T Research                             *
Packit Service a8c26c
*                           Florham Park NJ                            *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*                 Glenn Fowler <gsf@research.att.com>                  *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
***********************************************************************/
Packit Service a8c26c
#pragma prototyped
Packit Service a8c26c
/*
Packit Service a8c26c
 * Glenn Fowler
Packit Service a8c26c
 * AT&T Research
Packit Service a8c26c
 *
Packit Service a8c26c
 * single quote s into sp
Packit Service a8c26c
 * if type!=0 then /<getenv(<CO_ENV_TYPE>)/ translated to /$<CO_ENV_TYPE>/
Packit Service a8c26c
 */
Packit Service a8c26c
Packit Service a8c26c
#include "colib.h"
Packit Service a8c26c
Packit Service a8c26c
void
Packit Service a8c26c
coquote(register Sfio_t* sp, register const char* s, int type)
Packit Service a8c26c
{
Packit Service a8c26c
	register int	c;
Packit Service a8c26c
Packit Service a8c26c
	if (type && (!state.type || !*state.type))
Packit Service a8c26c
		type = 0;
Packit Service a8c26c
	while (c = *s++)
Packit Service a8c26c
	{
Packit Service a8c26c
		sfputc(sp, c);
Packit Service a8c26c
		if (c == '\'')
Packit Service a8c26c
		{
Packit Service a8c26c
			sfputc(sp, '\\');
Packit Service a8c26c
			sfputc(sp, '\'');
Packit Service a8c26c
			sfputc(sp, '\'');
Packit Service a8c26c
		}
Packit Service a8c26c
		else if (type && c == '/' && *s == *state.type)
Packit Service a8c26c
		{
Packit Service a8c26c
			register const char*	x = s;
Packit Service a8c26c
			register char*		t = state.type;
Packit Service a8c26c
Packit Service a8c26c
			while (*t && *t++ == *x) x++;
Packit Service a8c26c
			if (!*t && *x == '/')
Packit Service a8c26c
			{
Packit Service a8c26c
				s = x;
Packit Service a8c26c
				sfprintf(sp, "'$%s'", CO_ENV_TYPE);
Packit Service a8c26c
			}
Packit Service a8c26c
		}
Packit Service a8c26c
	}
Packit Service a8c26c
}