Ejemplo n.º 1
0
void
scsipi_strvis(u_char *dst, int dlen, const u_char *src, int slen)
{

	/* Trim leading and trailing blanks and NULs. */
	while (slen > 0 && STRVIS_ISWHITE(src[0]))
		++src, --slen;
	while (slen > 0 && STRVIS_ISWHITE(src[slen - 1]))
		--slen;

	while (slen > 0) {
		if (*src < 0x20 || *src >= 0x80) {
			/* non-printable characters */
			dlen -= 4;
			if (dlen < 1)
				break;
			*dst++ = '\\';
			*dst++ = ((*src & 0300) >> 6) + '0';
			*dst++ = ((*src & 0070) >> 3) + '0';
			*dst++ = ((*src & 0007) >> 0) + '0';
		} else if (*src == '\\') {
Ejemplo n.º 2
0
int
strnvisx(char *dst, size_t dlen, const char *src, size_t slen, int flags)
{
	if (dlen == 0)
		return -1;

	if (flags & VIS_TRIM) {
		/* Trim leading and trailing blanks and NULs. */
		while (slen > 0 && STRVIS_ISWHITE(src[0]))
			++src, --slen;
		while (slen > 0 && STRVIS_ISWHITE(src[slen - 1]))
			--slen;
	}

	while (slen > 0) {
		if ((flags & VIS_SAFE) && (*src < 0x20 || (*src & 0x80))) {
			/* non-printable characters */
			if (dlen < 4)
				goto out;
			dlen -= 4;
			*dst++ = '\\';
			*dst++ = ((*src & 0300) >> 6) + '0';
			*dst++ = ((*src & 0070) >> 3) + '0';
			*dst++ = ((*src & 0007) >> 0) + '0';
		} else if (*src == '\\') {
			/* quote characters */
			if (dlen < 2)
				goto out;
			dlen -= 2;
			*dst++ = '\\';
			*dst++ = '\\';
		} else {
			/* normal characters */
			if (dlen < 1)
				goto out;
			*dst++ = *src;
		}
		++src, --slen;
	}