unvis strunvis - decode a visual representation of characters
Lb libc
The
strunvis ();
function
simply copies
Fa src
to
Fa dst ,
decoding any escape sequences along the way,
and returns the number of characters placed into
Fa dst ,
or -1 if an
invalid escape sequence was detected.
The size of
Fa dst
should be
equal to the size of
Fa src
(that is, no expansion takes place during
decoding).
The
strunvisx ();
function does the same as the
strunvis ();
function,
but it allows you to add a flag that specifies the style the string
Fa src
is encoded with.
Currently, the only supported flag is
VIS_HTTPSTYLE
The
unvis ();
function
implements a state machine that can be used to decode an arbitrary
stream of bytes.
All state associated with the bytes being decoded
is stored outside the
unvis ();
function (that is, a pointer to the state is passed in), so
calls decoding different streams can be freely intermixed.
To
start decoding a stream of bytes, first initialize an integer
to zero.
Call
unvis ();
with each successive byte, along with a pointer
to this integer, and a pointer to a destination character.
The
unvis ();
function
has several return codes that must be handled properly.
They are:
When all bytes in the stream have been processed, call
unvis ();
one more time with
Fa flag
set to
UNVIS_END
to extract any remaining character (the character passed in is ignored).
The
Fa flag
argument is also used to specify the encoding style of the source.
If set to
VIS_HTTPSTYLE
unvis ();
will decode URI strings as specified in RFC 1808.
The following code fragment illustrates a proper use of
unvis (.);
int state = 0; char out; while ((ch = getchar()) != EOF) { again: switch(unvis(&out, ch, &state, 0)) { case 0: case UNVIS_NOCHAR: break; case UNVIS_VALID: (void) putchar(out); break; case UNVIS_VALIDPUSH: (void) putchar(out); goto again; case UNVIS_SYNBAD: (void)fprintf(stderr, "bad sequence!\n"); exit(1); } } if (unvis(&out, (char)0, &state, UNVIS_END) == UNVIS_VALID) (void) putchar(out);
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |