summaryrefslogtreecommitdiffstats
path: root/text-utils/column.c
diff options
context:
space:
mode:
authorKarel Zak2017-03-02 14:41:22 +0100
committerKarel Zak2017-05-02 12:18:00 +0200
commit37d84d6d26b9873f42bb57d1343435a1f85a5d5c (patch)
treec3b4f065bcee5d856af685a2f4cb05944738d771 /text-utils/column.c
parentcolumn: rename functions (diff)
downloadkernel-qcow2-util-linux-37d84d6d26b9873f42bb57d1343435a1f85a5d5c.tar.gz
kernel-qcow2-util-linux-37d84d6d26b9873f42bb57d1343435a1f85a5d5c.tar.xz
kernel-qcow2-util-linux-37d84d6d26b9873f42bb57d1343435a1f85a5d5c.zip
column: reorder functions
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'text-utils/column.c')
-rw-r--r--text-utils/column.c275
1 files changed, 139 insertions, 136 deletions
diff --git a/text-utils/column.c b/text-utils/column.c
index 10afd6f7f..9e19fff9c 100644
--- a/text-utils/column.c
+++ b/text-utils/column.c
@@ -119,6 +119,145 @@ static int width(const char *str)
}
#endif
+#ifdef HAVE_WIDECHAR
+static wchar_t *mbs_to_wcs(const char *s)
+{
+ ssize_t n;
+ wchar_t *wcs;
+
+ n = mbstowcs((wchar_t *)0, s, 0);
+ if (n < 0)
+ return NULL;
+ wcs = xmalloc((n + 1) * sizeof(wchar_t));
+ n = mbstowcs(wcs, s, n + 1);
+ if (n < 0) {
+ free(wcs);
+ return NULL;
+ }
+ return wcs;
+}
+#endif
+
+static int read_input(struct column_control *ctl, FILE *fp)
+{
+ char *buf = NULL;
+ size_t bufsz = 0;
+ size_t maxents = 0;
+
+ do {
+ char *str, *p;
+ size_t len;
+
+ if (getline(&buf, &bufsz, fp) < 0) {
+ if (feof(fp))
+ break;
+ else
+ err(EXIT_FAILURE, _("read failed"));
+ }
+ str = (char *) skip_space(buf);
+ if (str) {
+ p = strchr(str, '\n');
+ if (p)
+ *p = '\0';
+ }
+ if (!str || !*str)
+ continue;
+
+ switch (ctl->mode) {
+ case COLUMN_MODE_TABLE:
+ /* TODO: fill libsmartcols */
+
+ case COLUMN_MODE_FILLCOLS:
+ case COLUMN_MODE_FILLROWS:
+ if (ctl->nents <= maxents) {
+ maxents += 1000;
+ ctl->ents = xrealloc(ctl->ents,
+ maxents * sizeof(wchar_t *));
+ }
+ ctl->ents[ctl->nents] = mbs_to_wcs(str);
+ if (!ctl->ents[ctl->nents])
+ err(EXIT_FAILURE, _("read failed"));
+ len = width(ctl->ents[ctl->nents]);
+ if (ctl->maxlength < len)
+ ctl->maxlength = len;
+ ctl->nents++;
+ break;
+ }
+ } while (1);
+
+ return 0;
+}
+
+
+static void columnate_fillrows(struct column_control *ctl)
+{
+ size_t chcnt, col, cnt, endcol, numcols;
+ wchar_t **lp;
+
+ ctl->maxlength = (ctl->maxlength + TAB) & ~(TAB - 1);
+ numcols = ctl->termwidth / ctl->maxlength;
+ endcol = ctl->maxlength;
+ for (chcnt = col = 0, lp = ctl->ents;; ++lp) {
+ fputws(*lp, stdout);
+ chcnt += width(*lp);
+ if (!--ctl->nents)
+ break;
+ if (++col == numcols) {
+ chcnt = col = 0;
+ endcol = ctl->maxlength;
+ putwchar('\n');
+ } else {
+ while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) <= endcol) {
+ putwchar('\t');
+ chcnt = cnt;
+ }
+ endcol += ctl->maxlength;
+ }
+ }
+ if (chcnt)
+ putwchar('\n');
+}
+
+static void columnate_fillcols(struct column_control *ctl)
+{
+ size_t base, chcnt, cnt, col, endcol, numcols, numrows, row;
+
+ ctl->maxlength = (ctl->maxlength + TAB) & ~(TAB - 1);
+ numcols = ctl->termwidth / ctl->maxlength;
+ if (!numcols)
+ numcols = 1;
+ numrows = ctl->nents / numcols;
+ if (ctl->nents % numcols)
+ ++numrows;
+
+ for (row = 0; row < numrows; ++row) {
+ endcol = ctl->maxlength;
+ for (base = row, chcnt = col = 0; col < numcols; ++col) {
+ fputws(ctl->ents[base], stdout);
+ chcnt += width(ctl->ents[base]);
+ if ((base += numrows) >= ctl->nents)
+ break;
+ while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) <= endcol) {
+ putwchar('\t');
+ chcnt = cnt;
+ }
+ endcol += ctl->maxlength;
+ }
+ putwchar('\n');
+ }
+}
+
+static void simple_print(struct column_control *ctl)
+{
+ int cnt;
+ wchar_t **lp;
+
+ for (cnt = ctl->nents, lp = ctl->ents; cnt--; ++lp) {
+ fputws(*lp, stdout);
+ putwchar('\n');
+ }
+}
+
static void __attribute__((__noreturn__)) usage(int rc)
{
FILE *out = rc == EXIT_FAILURE ? stderr : stdout;
@@ -251,74 +390,6 @@ int main(int argc, char **argv)
return eval == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
-static void columnate_fillrows(struct column_control *ctl)
-{
- size_t chcnt, col, cnt, endcol, numcols;
- wchar_t **lp;
-
- ctl->maxlength = (ctl->maxlength + TAB) & ~(TAB - 1);
- numcols = ctl->termwidth / ctl->maxlength;
- endcol = ctl->maxlength;
- for (chcnt = col = 0, lp = ctl->ents;; ++lp) {
- fputws(*lp, stdout);
- chcnt += width(*lp);
- if (!--ctl->nents)
- break;
- if (++col == numcols) {
- chcnt = col = 0;
- endcol = ctl->maxlength;
- putwchar('\n');
- } else {
- while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) <= endcol) {
- putwchar('\t');
- chcnt = cnt;
- }
- endcol += ctl->maxlength;
- }
- }
- if (chcnt)
- putwchar('\n');
-}
-
-static void columnate_fillcols(struct column_control *ctl)
-{
- size_t base, chcnt, cnt, col, endcol, numcols, numrows, row;
-
- ctl->maxlength = (ctl->maxlength + TAB) & ~(TAB - 1);
- numcols = ctl->termwidth / ctl->maxlength;
- if (!numcols)
- numcols = 1;
- numrows = ctl->nents / numcols;
- if (ctl->nents % numcols)
- ++numrows;
-
- for (row = 0; row < numrows; ++row) {
- endcol = ctl->maxlength;
- for (base = row, chcnt = col = 0; col < numcols; ++col) {
- fputws(ctl->ents[base], stdout);
- chcnt += width(ctl->ents[base]);
- if ((base += numrows) >= ctl->nents)
- break;
- while ((cnt = ((chcnt + TAB) & ~(TAB - 1))) <= endcol) {
- putwchar('\t');
- chcnt = cnt;
- }
- endcol += ctl->maxlength;
- }
- putwchar('\n');
- }
-}
-
-static void simple_print(struct column_control *ctl)
-{
- int cnt;
- wchar_t **lp;
-
- for (cnt = ctl->nents, lp = ctl->ents; cnt--; ++lp) {
- fputws(*lp, stdout);
- putwchar('\n');
- }
-}
static wchar_t *local_wcstok(wchar_t *p, const wchar_t *separator, int greedy,
wchar_t **wcstok_state)
@@ -408,74 +479,6 @@ static void maketbl(struct column_control *ctl, wchar_t *separator, int greedy,
free(tbl);
}
-static int read_input(struct column_control *ctl, FILE *fp)
-{
- char *buf = NULL;
- size_t bufsz = 0;
- size_t maxents = 0;
-
- do {
- char *str, *p;
- size_t len;
-
- if (getline(&buf, &bufsz, fp) < 0) {
- if (feof(fp))
- break;
- else
- err(EXIT_FAILURE, _("read failed"));
- }
- str = (char *) skip_space(buf);
- if (str) {
- p = strchr(str, '\n');
- if (p)
- *p = '\0';
- }
- if (!str || !*str)
- continue;
-
- switch (ctl->mode) {
- case COLUMN_MODE_TABLE:
- /* TODO: fill libsmartcols */
-
- case COLUMN_MODE_FILLCOLS:
- case COLUMN_MODE_FILLROWS:
- if (ctl->nents <= maxents) {
- maxents += 1000;
- ctl->ents = xrealloc(ctl->ents,
- maxents * sizeof(wchar_t *));
- }
- ctl->ents[ctl->nents] = mbs_to_wcs(str);
- if (!ctl->ents[ctl->nents])
- err(EXIT_FAILURE, _("read failed"));
- len = width(ctl->ents[ctl->nents]);
- if (ctl->maxlength < len)
- ctl->maxlength = len;
- ctl->nents++;
- break;
- }
- } while (1);
-
- return 0;
-}
-
-#ifdef HAVE_WIDECHAR
-static wchar_t *mbs_to_wcs(const char *s)
-{
- ssize_t n;
- wchar_t *wcs;
-
- n = mbstowcs((wchar_t *)0, s, 0);
- if (n < 0)
- return NULL;
- wcs = xmalloc((n + 1) * sizeof(wchar_t));
- n = mbstowcs(wcs, s, n + 1);
- if (n < 0) {
- free(wcs);
- return NULL;
- }
- return wcs;
-}
-#endif
#ifndef HAVE_WIDECHAR
static char *mtsafe_strtok(char *str, const char *delim, char **ptr)