#include "strutils.h"
#include "xalloc.h"
#include "optutils.h"
+#include "mangle.h"
#include "libsmartcols.h"
scols_wrapnl_nextchunk,
NULL);
scols_column_set_safechars(cl, "\n");
+
}
break;
}
{
size_t len = 0, nlines = 0;
int i;
- char *str = NULL;
+ char *str = NULL, *p;
while ((i = getline(&str, &len, f)) != -1) {
-
struct libscols_line *ln;
- char *p = strrchr(str, '\n');
- if (p)
- *p = '\0';
-
- while ((p = strrchr(str, '\\')) && *(p + 1) == 'n') {
- *p = '\n';
- memmove(p + 1, p + 2, i - (p + 2 - str));
- }
+ int rc;
ln = scols_table_get_line(tb, nlines++);
if (!ln)
break;
- if (*str && scols_line_set_data(ln, col, str) != 0)
+ p = strrchr(str, '\n');
+ if (p) {
+ *p = '\0';
+ len = p - str;
+ }
+ if (!*str)
+ continue;
+
+ /* convert \x?? to real bytes */
+ if (strstr(str, "\\x")) {
+ struct libscols_cell *ce = scols_line_get_cell(ln, col);
+ char *buf = xcalloc(1, ++len);
+
+ len = unhexmangle_to_buffer(str, buf, len);
+ if (len)
+ scols_cell_refer_memory(ce, buf, len);
+ } else
+ rc = scols_line_set_data(ln, col, str);
+ if (rc)
err(EXIT_FAILURE, "failed to add output data");
}