lib/tt: encode data for RAW and EXPORT format
* all tt based utils will properly encode blank chars for raw output format and quotes for export output format Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
d324270eee
commit
f8bb6246fd
32
lib/tt.c
32
lib/tt.c
|
@ -15,6 +15,7 @@
|
|||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <ctype.h>
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
@ -552,6 +553,32 @@ static void recount_widths(struct tt *tb, char *buf, size_t bufsz)
|
|||
return;
|
||||
}
|
||||
|
||||
static void fputs_quoted(const char *data, FILE *out)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
fputc('"', out);
|
||||
for (p = data; p && *p; p++) {
|
||||
if ((unsigned char) *p == 0x22)
|
||||
fputs("\\x22", out);
|
||||
else
|
||||
fputc(*p, out);
|
||||
}
|
||||
fputc('"', out);
|
||||
}
|
||||
|
||||
static void fputs_nonblank(const char *data, FILE *out)
|
||||
{
|
||||
const char *p;
|
||||
|
||||
for (p = data; p && *p; p++) {
|
||||
if (isblank((unsigned char) *p))
|
||||
fprintf(out, "\\x%02x", *p);
|
||||
else
|
||||
fputc(*p, out);
|
||||
}
|
||||
}
|
||||
|
||||
/* note that this function modifies @data
|
||||
*/
|
||||
static void print_data(struct tt *tb, struct tt_column *cl, char *data)
|
||||
|
@ -563,7 +590,7 @@ static void print_data(struct tt *tb, struct tt_column *cl, char *data)
|
|||
|
||||
/* raw mode */
|
||||
if (tb->flags & TT_FL_RAW) {
|
||||
fputs(data, stdout);
|
||||
fputs_nonblank(data, stdout);
|
||||
if (!is_last_column(tb, cl))
|
||||
fputc(' ', stdout);
|
||||
return;
|
||||
|
@ -571,7 +598,8 @@ static void print_data(struct tt *tb, struct tt_column *cl, char *data)
|
|||
|
||||
/* NAME=value mode */
|
||||
if (tb->flags & TT_FL_EXPORT) {
|
||||
fprintf(stdout, "%s=\"%s\"", cl->name, data);
|
||||
fprintf(stdout, "%s=", cl->name);
|
||||
fputs_quoted(data, stdout);
|
||||
if (!is_last_column(tb, cl))
|
||||
fputc(' ', stdout);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue