Page MenuHomeFreeBSD

D13959.diff
No OneTemporary

D13959.diff

Index: head/bin/ls/Makefile
===================================================================
--- head/bin/ls/Makefile
+++ head/bin/ls/Makefile
@@ -6,7 +6,7 @@
PACKAGE=runtime
PROG= ls
SRCS= cmp.c ls.c print.c util.c
-LIBADD= xo util
+LIBADD= util
.if !defined(RELEASE_CRUNCH) && \
${MK_LS_COLORS} != no
Index: head/bin/ls/Makefile.depend
===================================================================
--- head/bin/ls/Makefile.depend
+++ head/bin/ls/Makefile.depend
@@ -9,7 +9,6 @@
lib/libc \
lib/libcompiler_rt \
lib/libutil \
- lib/libxo \
lib/ncurses/ncursesw \
Index: head/bin/ls/extern.h
===================================================================
--- head/bin/ls/extern.h
+++ head/bin/ls/extern.h
@@ -47,17 +47,14 @@
void printcol(const DISPLAY *);
void printlong(const DISPLAY *);
-int printname(const char *, const char *);
+int printname(const char *);
void printscol(const DISPLAY *);
void printstream(const DISPLAY *);
void usage(void);
-int prn_normal(const char *, const char *);
-char * getname(const char *);
+int prn_normal(const char *);
size_t len_octal(const char *, int);
-int prn_octal(const char *, const char *);
-char * get_octal(const char *);
-int prn_printable(const char *, const char *);
-char * get_printable(const char *);
+int prn_octal(const char *);
+int prn_printable(const char *);
#ifdef COLORLS
void parsecolors(const char *cs);
void colorquit(int);
Index: head/bin/ls/ls.h
===================================================================
--- head/bin/ls/ls.h
+++ head/bin/ls/ls.h
@@ -39,8 +39,6 @@
#define HUMANVALSTR_LEN 5
-#define LS_XO_VERSION "1"
-
extern long blocksize; /* block size units */
extern int f_accesstime; /* use time of last access */
@@ -62,7 +60,6 @@
extern int f_thousands; /* show file sizes with thousands separators */
extern char *f_timeformat; /* user-specified time format */
extern int f_notabs; /* don't use tab-separated multi-col output */
-extern int f_numericonly; /* don't convert uid/gid to name */
extern int f_type; /* add type character for non-regular files */
#ifdef COLORLS
extern int f_color; /* add type in color for non-regular files */
Index: head/bin/ls/ls.1
===================================================================
--- head/bin/ls/ls.1
+++ head/bin/ls/ls.1
@@ -32,7 +32,7 @@
.\" @(#)ls.1 8.7 (Berkeley) 7/29/94
.\" $FreeBSD$
.\"
-.Dd December 1, 2015
+.Dd January 17, 2018
.Dt LS 1
.Os
.Sh NAME
@@ -40,7 +40,6 @@
.Nd list directory contents
.Sh SYNOPSIS
.Nm
-.Op Fl -libxo
.Op Fl ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,
.Op Fl D Ar format
.Op Ar
@@ -69,13 +68,6 @@
.Pp
The following options are available:
.Bl -tag -width indent
-.It Fl -libxo
-Generate output via
-.Xr libxo 3
-in a selection of different human and machine readable formats.
-See
-.Xr xo_parse_args 3
-for details on command line arguments.
.It Fl A
Include directory entries whose names begin with a
dot
@@ -805,11 +797,9 @@
.Xr getfacl 1 ,
.Xr sort 1 ,
.Xr xterm 1 ,
-.Xr libxo 3 ,
.Xr localeconv 3 ,
.Xr strftime 3 ,
.Xr strmode 3 ,
-.Xr xo_parse_args 3 ,
.Xr termcap 5 ,
.Xr maclabel 7 ,
.Xr sticky 7 ,
Index: head/bin/ls/ls.c
===================================================================
--- head/bin/ls/ls.c
+++ head/bin/ls/ls.c
@@ -68,7 +68,6 @@
#include <termcap.h>
#include <signal.h>
#endif
-#include <libxo/xo.h>
#include "ls.h"
#include "extern.h"
@@ -121,7 +120,7 @@
int f_nonprint; /* show unprintables as ? */
static int f_nosort; /* don't sort output */
int f_notabs; /* don't use tab-separated multi-col output */
- int f_numericonly; /* don't convert uid/gid to name */
+static int f_numericonly; /* don't convert uid/gid to name */
int f_octal; /* show unprintables as \xxx */
int f_octal_escape; /* like f_octal but use C escapes if possible */
static int f_recursive; /* ls subdirectories also */
@@ -192,13 +191,6 @@
fts_options = FTS_PHYSICAL;
if (getenv("LS_SAMESORT"))
f_samesort = 1;
-
- argc = xo_parse_args(argc, argv);
- if (argc < 0)
- return (1);
- xo_set_flags(NULL, XOF_COLUMNS);
- xo_set_version(LS_XO_VERSION);
-
while ((ch = getopt(argc, argv,
"1ABCD:FGHILPRSTUWXZabcdfghiklmnopqrstuwxy,")) != -1) {
switch (ch) {
@@ -395,7 +387,7 @@
f_color = 1;
}
#else
- xo_warnx("color support not compiled in");
+ warnx("color support not compiled in");
#endif /*COLORLS*/
#ifdef COLORLS
@@ -493,13 +485,10 @@
else
printfcn = printcol;
- xo_open_container("file-information");
if (argc)
traverse(argc, argv, fts_options);
else
traverse(1, dotav, fts_options);
- xo_close_container("file-information");
- xo_finish();
exit(rval);
}
@@ -517,11 +506,10 @@
FTS *ftsp;
FTSENT *p, *chp;
int ch_options;
- int first = 1;
if ((ftsp =
fts_open(argv, options, f_nosort ? NULL : mastercmp)) == NULL)
- xo_err(1, "fts_open");
+ err(1, "fts_open");
/*
* We ignore errors from fts_children here since they will be
@@ -543,11 +531,11 @@
while ((p = fts_read(ftsp)) != NULL)
switch (p->fts_info) {
case FTS_DC:
- xo_warnx("%s: directory causes a cycle", p->fts_name);
+ warnx("%s: directory causes a cycle", p->fts_name);
break;
case FTS_DNR:
case FTS_ERR:
- xo_warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
+ warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
rval = 1;
break;
case FTS_D:
@@ -555,40 +543,31 @@
p->fts_name[0] == '.' && !f_listdot)
break;
- if (first) {
- first = 0;
- xo_open_list("directory");
- }
- xo_open_instance("directory");
-
/*
* If already output something, put out a newline as
* a separator. If multiple arguments, precede each
* directory with its name.
*/
if (output) {
- xo_emit("\n");
- (void)printname("path", p->fts_path);
- xo_emit(":\n");
+ putchar('\n');
+ (void)printname(p->fts_path);
+ puts(":");
} else if (argc > 1) {
- (void)printname("path", p->fts_path);
- xo_emit(":\n");
+ (void)printname(p->fts_path);
+ puts(":");
output = 1;
}
chp = fts_children(ftsp, ch_options);
display(p, chp, options);
- xo_close_instance("directory");
if (!f_recursive && chp != NULL)
(void)fts_set(ftsp, p, FTS_SKIP);
break;
default:
break;
}
- if (!first)
- xo_close_list("directory");
if (errno)
- xo_err(1, "fts_read");
+ err(1, "fts_read");
}
/*
@@ -635,7 +614,7 @@
/* Fill-in "::" as "0:0:0" for the sake of scanf. */
jinitmax = malloc(strlen(initmax) * 2 + 2);
if (jinitmax == NULL)
- xo_err(1, "malloc");
+ err(1, "malloc");
initmax2 = jinitmax;
if (*initmax == ':')
strcpy(initmax2, "0:"), initmax2 += 2;
@@ -706,7 +685,7 @@
flags = NULL;
for (cur = list, entries = 0; cur; cur = cur->fts_link) {
if (cur->fts_info == FTS_ERR || cur->fts_info == FTS_NS) {
- xo_warnx("%s: %s",
+ warnx("%s: %s",
cur->fts_name, strerror(cur->fts_errno));
cur->fts_number = NO_PRINT;
rval = 1;
@@ -772,7 +751,7 @@
flags = strdup("-");
}
if (flags == NULL)
- xo_err(1, "fflagstostr");
+ err(1, "fflagstostr");
flen = strlen(flags);
if (flen > (size_t)maxflags)
maxflags = flen;
@@ -786,7 +765,7 @@
error = mac_prepare_file_label(&label);
if (error == -1) {
- xo_warn("MAC label for %s/%s",
+ warn("MAC label for %s/%s",
cur->fts_parent->fts_path,
cur->fts_name);
goto label_out;
@@ -807,7 +786,7 @@
error = mac_get_link(name,
label);
if (error == -1) {
- xo_warn("MAC label for %s/%s",
+ warn("MAC label for %s/%s",
cur->fts_parent->fts_path,
cur->fts_name);
mac_free(label);
@@ -817,7 +796,7 @@
error = mac_to_text(label,
&labelstr);
if (error == -1) {
- xo_warn("MAC label for %s/%s",
+ warn("MAC label for %s/%s",
cur->fts_parent->fts_path,
cur->fts_name);
mac_free(label);
@@ -835,7 +814,7 @@
if ((np = malloc(sizeof(NAMES) + labelstrlen +
ulen + glen + flen + 4)) == NULL)
- xo_err(1, "malloc");
+ err(1, "malloc");
np->user = &np->data[0];
(void)strcpy(np->user, user);
Index: head/bin/ls/print.c
===================================================================
--- head/bin/ls/print.c
+++ head/bin/ls/print.c
@@ -62,7 +62,6 @@
#include <termcap.h>
#include <signal.h>
#endif
-#include <libxo/xo.h>
#include "ls.h"
#include "extern.h"
@@ -70,9 +69,9 @@
static int printaname(const FTSENT *, u_long, u_long);
static void printdev(size_t, dev_t);
static void printlink(const FTSENT *);
-static void printtime(const char *, time_t);
+static void printtime(time_t);
static int printtype(u_int);
-static void printsize(const char *, size_t, off_t);
+static void printsize(size_t, off_t);
#ifdef COLORLS
static void endcolor(int);
static int colortype(mode_t);
@@ -117,32 +116,26 @@
{
FTSENT *p;
- xo_open_list("entry");
for (p = dp->list; p; p = p->fts_link) {
if (IS_NOPRINT(p))
continue;
- xo_open_instance("entry");
(void)printaname(p, dp->s_inode, dp->s_block);
- xo_close_instance("entry");
- xo_emit("\n");
+ (void)putchar('\n');
}
- xo_close_list("entry");
}
/*
* print name in current style
*/
int
-printname(const char *field, const char *name)
+printname(const char *name)
{
- char fmt[BUFSIZ];
- char *s = getname(name);
- int rc;
-
- snprintf(fmt, sizeof(fmt), "{:%s/%%hs}", field);
- rc = xo_emit(fmt, s);
- free(s);
- return rc;
+ if (f_octal || f_octal_escape)
+ return prn_octal(name);
+ else if (f_nonprint)
+ return prn_printable(name);
+ else
+ return prn_normal(name);
}
static const char *
@@ -209,20 +202,6 @@
padding_for_month[i] = month_max_size - months_width[i];
}
-/*
- * print name in current style
- */
-char *
-getname(const char *name)
-{
- if (f_octal || f_octal_escape)
- return get_octal(name);
- else if (f_nonprint)
- return get_printable(name);
- else
- return strdup(name);
-}
-
void
printlong(const DISPLAY *dp)
{
@@ -236,83 +215,46 @@
if ((dp->list == NULL || dp->list->fts_level != FTS_ROOTLEVEL) &&
(f_longform || f_size)) {
- xo_emit("{L:total} {:total-blocks/%lu}\n",
- howmany(dp->btotal, blocksize));
+ (void)printf("total %lu\n", howmany(dp->btotal, blocksize));
}
- xo_open_list("entry");
for (p = dp->list; p; p = p->fts_link) {
- char *name, *type;
if (IS_NOPRINT(p))
continue;
- xo_open_instance("entry");
sp = p->fts_statp;
- name = getname(p->fts_name);
- if (name)
- xo_emit("{ke:name/%hs}", name);
if (f_inode)
- xo_emit("{t:inode/%*ju} ",
+ (void)printf("%*ju ",
dp->s_inode, (uintmax_t)sp->st_ino);
if (f_size)
- xo_emit("{t:blocks/%*jd} ",
+ (void)printf("%*jd ",
dp->s_block, howmany(sp->st_blocks, blocksize));
strmode(sp->st_mode, buf);
aclmode(buf, p);
np = p->fts_pointer;
- xo_attr("value", "%03o", (int) sp->st_mode & ALLPERMS);
- if (f_numericonly) {
- xo_emit("{t:mode/%s}{e:mode_octal/%03o} {t:links/%*ju} {td:user/%-*s}{e:user/%ju} {td:group/%-*s}{e:group/%ju} ",
- buf, (int) sp->st_mode & ALLPERMS, dp->s_nlink, (uintmax_t)sp->st_nlink,
- dp->s_user, np->user, (uintmax_t)sp->st_uid, dp->s_group, np->group, (uintmax_t)sp->st_gid);
- } else {
- xo_emit("{t:mode/%s}{e:mode_octal/%03o} {t:links/%*ju} {t:user/%-*s} {t:group/%-*s} ",
- buf, (int) sp->st_mode & ALLPERMS, dp->s_nlink, (uintmax_t)sp->st_nlink,
- dp->s_user, np->user, dp->s_group, np->group);
- }
- if (S_ISBLK(sp->st_mode))
- asprintf(&type, "block");
- if (S_ISCHR(sp->st_mode))
- asprintf(&type, "character");
- if (S_ISDIR(sp->st_mode))
- asprintf(&type, "directory");
- if (S_ISFIFO(sp->st_mode))
- asprintf(&type, "fifo");
- if (S_ISLNK(sp->st_mode))
- asprintf(&type, "symlink");
- if (S_ISREG(sp->st_mode))
- asprintf(&type, "regular");
- if (S_ISSOCK(sp->st_mode))
- asprintf(&type, "socket");
- if (S_ISWHT(sp->st_mode))
- asprintf(&type, "whiteout");
- xo_emit("{e:type/%s}", type);
- free(type);
+ (void)printf("%s %*ju %-*s %-*s ", buf, dp->s_nlink,
+ (uintmax_t)sp->st_nlink, dp->s_user, np->user, dp->s_group,
+ np->group);
if (f_flags)
- xo_emit("{:flags/%-*s} ", dp->s_flags, np->flags);
+ (void)printf("%-*s ", dp->s_flags, np->flags);
if (f_label)
- xo_emit("{t:label/%-*s} ", dp->s_label, np->label);
+ (void)printf("%-*s ", dp->s_label, np->label);
if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode))
printdev(dp->s_size, sp->st_rdev);
else
- printsize("size", dp->s_size, sp->st_size);
+ printsize(dp->s_size, sp->st_size);
if (f_accesstime)
- printtime("access-time", sp->st_atime);
+ printtime(sp->st_atime);
else if (f_birthtime)
- printtime("birth-time", sp->st_birthtime);
+ printtime(sp->st_birthtime);
else if (f_statustime)
- printtime("change-time", sp->st_ctime);
+ printtime(sp->st_ctime);
else
- printtime("modify-time", sp->st_mtime);
+ printtime(sp->st_mtime);
#ifdef COLORLS
if (f_color)
color_printed = colortype(sp->st_mode);
#endif
-
- if (name) {
- xo_emit("{dk:name/%hs}", name);
- free(name);
- }
-
+ (void)printname(p->fts_name);
#ifdef COLORLS
if (f_color && color_printed)
endcolor(0);
@@ -321,10 +263,8 @@
(void)printtype(sp->st_mode);
if (S_ISLNK(sp->st_mode))
printlink(p);
- xo_close_instance("entry");
- xo_emit("\n");
+ (void)putchar('\n');
}
- xo_close_list("entry");
}
void
@@ -333,27 +273,23 @@
FTSENT *p;
int chcnt;
- xo_open_list("entry");
for (p = dp->list, chcnt = 0; p; p = p->fts_link) {
if (p->fts_number == NO_PRINT)
continue;
/* XXX strlen does not take octal escapes into account. */
if (strlen(p->fts_name) + chcnt +
(p->fts_link ? 2 : 0) >= (unsigned)termwidth) {
- xo_emit("\n");
+ putchar('\n');
chcnt = 0;
}
- xo_open_instance("file");
chcnt += printaname(p, dp->s_inode, dp->s_block);
- xo_close_instance("file");
if (p->fts_link) {
- xo_emit(", ");
+ printf(", ");
chcnt += 2;
}
}
- xo_close_list("entry");
if (chcnt)
- xo_emit("\n");
+ putchar('\n');
}
void
@@ -387,6 +323,7 @@
if (dp->entries > lastentries) {
if ((narray =
realloc(array, dp->entries * sizeof(FTSENT *))) == NULL) {
+ warn(NULL);
printscol(dp);
return;
}
@@ -417,21 +354,17 @@
if ((dp->list == NULL || dp->list->fts_level != FTS_ROOTLEVEL) &&
(f_longform || f_size)) {
- xo_emit("{L:total} {:total-blocks/%lu}\n",
- howmany(dp->btotal, blocksize));
+ (void)printf("total %lu\n", howmany(dp->btotal, blocksize));
}
- xo_open_list("entry");
base = 0;
for (row = 0; row < numrows; ++row) {
endcol = colwidth;
if (!f_sortacross)
base = row;
for (col = 0, chcnt = 0; col < numcols; ++col) {
- xo_open_instance("entry");
chcnt += printaname(array[base], dp->s_inode,
dp->s_block);
- xo_close_instance("entry");
if (f_sortacross)
base++;
else
@@ -442,14 +375,13 @@
<= endcol) {
if (f_sortacross && col + 1 >= numcols)
break;
- xo_emit(f_notabs ? " " : "\t");
+ (void)putchar(f_notabs ? ' ' : '\t');
chcnt = cnt;
}
endcol += colwidth;
}
- xo_emit("\n");
+ (void)putchar('\n');
}
- xo_close_list("entry");
}
/*
@@ -468,16 +400,16 @@
sp = p->fts_statp;
chcnt = 0;
if (f_inode)
- chcnt += xo_emit("{t:inode/%*ju} ",
+ chcnt += printf("%*ju ",
(int)inodefield, (uintmax_t)sp->st_ino);
if (f_size)
- chcnt += xo_emit("{t:size/%*jd} ",
+ chcnt += printf("%*jd ",
(int)sizefield, howmany(sp->st_blocks, blocksize));
#ifdef COLORLS
if (f_color)
color_printed = colortype(sp->st_mode);
#endif
- chcnt += printname("name", p->fts_name);
+ chcnt += printname(p->fts_name);
#ifdef COLORLS
if (f_color && color_printed)
endcolor(0);
@@ -493,7 +425,8 @@
static void
printdev(size_t width, dev_t dev)
{
- xo_emit("{:device/%#*jx} ", (u_int)width, (uintmax_t)dev);
+
+ (void)printf("%#*jx ", (u_int)width, (uintmax_t)dev);
}
static size_t
@@ -522,10 +455,9 @@
}
static void
-printtime(const char *field, time_t ftime)
+printtime(time_t ftime)
{
char longstring[80];
- char fmt[BUFSIZ];
static time_t now = 0;
const char *format;
static int d_first = -1;
@@ -548,12 +480,8 @@
/* mmm dd yyyy || dd mmm yyyy */
format = d_first ? "%e %b %Y" : "%b %e %Y";
ls_strftime(longstring, sizeof(longstring), format, localtime(&ftime));
-
- snprintf(fmt, sizeof(fmt), "{d:%s/%%hs} ", field);
- xo_attr("value", "%ld", (long) ftime);
- xo_emit(fmt, longstring);
- snprintf(fmt, sizeof(fmt), "{en:%s/%%ld}", field);
- xo_emit(fmt, (long) ftime);
+ fputs(longstring, stdout);
+ fputc(' ', stdout);
}
static int
@@ -562,7 +490,7 @@
if (f_slash) {
if ((mode & S_IFMT) == S_IFDIR) {
- xo_emit("{D:\\/}{e:type/directory}");
+ (void)putchar('/');
return (1);
}
return (0);
@@ -570,25 +498,25 @@
switch (mode & S_IFMT) {
case S_IFDIR:
- xo_emit("{D:/\\/}{e:type/directory}");
+ (void)putchar('/');
return (1);
case S_IFIFO:
- xo_emit("{D:|}{e:type/fifo}");
+ (void)putchar('|');
return (1);
case S_IFLNK:
- xo_emit("{D:@}{e:type/link}");
+ (void)putchar('@');
return (1);
case S_IFSOCK:
- xo_emit("{D:=}{e:type/socket}");
+ (void)putchar('=');
return (1);
case S_IFWHT:
- xo_emit("{D:%%}{e:type/whiteout}");
+ (void)putchar('%');
return (1);
default:
break;
}
if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
- xo_emit("{D:*}{e:executable/}");
+ (void)putchar('*');
return (1);
}
return (0);
@@ -598,7 +526,7 @@
static int
putch(int c)
{
- xo_emit("{D:/%c}", c);
+ (void)putchar(c);
return 0;
}
@@ -707,7 +635,7 @@
if (c[j] >= '0' && c[j] <= '7') {
colors[i].num[j] = c[j] - '0';
if (!legacy_warn) {
- xo_warnx("LSCOLORS should use "
+ warnx("LSCOLORS should use "
"characters a-h instead of 0-9 ("
"see the manual page)");
}
@@ -720,7 +648,7 @@
} else if (tolower((unsigned char)c[j]) == 'x')
colors[i].num[j] = -1;
else {
- xo_warnx("invalid character '%c' in LSCOLORS"
+ warnx("invalid character '%c' in LSCOLORS"
" env var", c[j]);
colors[i].num[j] = -1;
}
@@ -752,19 +680,18 @@
(void)snprintf(name, sizeof(name),
"%s/%s", p->fts_parent->fts_accpath, p->fts_name);
if ((lnklen = readlink(name, path, sizeof(path) - 1)) == -1) {
- xo_error("\nls: %s: %s\n", name, strerror(errno));
+ (void)fprintf(stderr, "\nls: %s: %s\n", name, strerror(errno));
return;
}
path[lnklen] = '\0';
- xo_emit(" -> ");
- (void)printname("target", path);
+ (void)printf(" -> ");
+ (void)printname(path);
}
static void
-printsize(const char *field, size_t width, off_t bytes)
+printsize(size_t width, off_t bytes)
{
- char fmt[BUFSIZ];
-
+
if (f_humanval) {
/*
* Reserve one space before the size and allocate room for
@@ -774,15 +701,13 @@
humanize_number(buf, sizeof(buf), (int64_t)bytes, "",
HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
- snprintf(fmt, sizeof(fmt), "{:%s/%%%ds} ", field, (int) width);
- xo_attr("value", "%jd", (intmax_t) bytes);
- xo_emit(fmt, buf);
- } else { /* with commas */
+ (void)printf("%*s ", (u_int)width, buf);
+ } else if (f_thousands) { /* with commas */
/* This format assignment needed to work round gcc bug. */
- snprintf(fmt, sizeof(fmt), "{:%s/%%%dj%sd} ",
- field, (int) width, f_thousands ? "'" : "");
- xo_emit(fmt, (intmax_t) bytes);
- }
+ const char *format = "%*j'd ";
+ (void)printf(format, (u_int)width, bytes);
+ } else
+ (void)printf("%*jd ", (u_int)width, bytes);
}
/*
@@ -825,7 +750,7 @@
type = ACL_TYPE_NFS4;
supports_acls = 1;
} else if (ret < 0 && errno != EINVAL) {
- xo_warn("%s", name);
+ warn("%s", name);
return;
}
if (supports_acls == 0) {
@@ -834,7 +759,7 @@
type = ACL_TYPE_ACCESS;
supports_acls = 1;
} else if (ret < 0 && errno != EINVAL) {
- xo_warn("%s", name);
+ warn("%s", name);
return;
}
}
@@ -843,12 +768,12 @@
return;
facl = acl_get_link_np(name, type);
if (facl == NULL) {
- xo_warn("%s", name);
+ warn("%s", name);
return;
}
if (acl_is_trivial_np(facl, &trivial)) {
acl_free(facl);
- xo_warn("%s", name);
+ warn("%s", name);
return;
}
if (!trivial)
Index: head/bin/ls/util.c
===================================================================
--- head/bin/ls/util.c
+++ head/bin/ls/util.c
@@ -52,19 +52,13 @@
#include <string.h>
#include <wchar.h>
#include <wctype.h>
-#include <libxo/xo.h>
#include "ls.h"
#include "extern.h"
int
-prn_normal(const char *field, const char *s)
+prn_normal(const char *s)
{
- char fmt[_POSIX2_LINE_MAX];
-
- snprintf(fmt, sizeof(fmt), "{:%s/%%hs}", field);
- return xo_emit(fmt, s);
-#if 0
mbstate_t mbs;
wchar_t wc;
int i, n;
@@ -91,47 +85,43 @@
n += wcwidth(wc);
}
return (n);
-#endif
}
-char *
-get_printable(const char *s)
+int
+prn_printable(const char *s)
{
mbstate_t mbs;
wchar_t wc;
int i, n;
size_t clen;
- int slen = strlen(s);
- char *buf = alloca(slen + 1), *bp = buf;
memset(&mbs, 0, sizeof(mbs));
n = 0;
while ((clen = mbrtowc(&wc, s, MB_LEN_MAX, &mbs)) != 0) {
if (clen == (size_t)-1) {
- *bp++ = '?';
+ putchar('?');
s++;
n++;
memset(&mbs, 0, sizeof(mbs));
continue;
}
if (clen == (size_t)-2) {
- *bp++ = '?';
+ putchar('?');
n++;
break;
}
if (!iswprint(wc)) {
- *bp++ = '?';
+ putchar('?');
s += clen;
n++;
continue;
}
for (i = 0; i < (int)clen; i++)
- *bp++ = (unsigned char)s[i];
+ putchar((unsigned char)s[i]);
s += clen;
n += wcwidth(wc);
}
- *bp = '\0';
- return strdup(buf);
+ return (n);
}
/*
@@ -177,8 +167,8 @@
return (r);
}
-char *
-get_octal(const char *s)
+int
+prn_octal(const char *s)
{
static const char esc[] = "\\\\\"\"\aa\bb\ff\nn\rr\tt\vv";
const char *p;
@@ -187,8 +177,6 @@
size_t clen;
unsigned char ch;
int goodchar, i, len, prtlen;
- int slen = strlen(s);
- char *buf = alloca(slen * 4 + 1), *bp = buf;
memset(&mbs, 0, sizeof(mbs));
len = 0;
@@ -196,7 +184,7 @@
goodchar = clen != (size_t)-1 && clen != (size_t)-2;
if (goodchar && iswprint(wc) && wc != L'\"' && wc != L'\\') {
for (i = 0; i < (int)clen; i++)
- *bp++ = (unsigned char)s[i];
+ putchar((unsigned char)s[i]);
len += wcwidth(wc);
} else if (goodchar && f_octal_escape &&
#if WCHAR_MIN < 0
@@ -204,8 +192,8 @@
#endif
wc <= (wchar_t)UCHAR_MAX &&
(p = strchr(esc, (char)wc)) != NULL) {
- *bp ++ = '\\';
- *bp++ = p[1];
+ putchar('\\');
+ putchar(p[1]);
len += 2;
} else {
if (goodchar)
@@ -216,10 +204,10 @@
prtlen = strlen(s);
for (i = 0; i < prtlen; i++) {
ch = (unsigned char)s[i];
- *bp++ = '\\';
- *bp++ = '0' + (ch >> 6);
- *bp++ = '0' + ((ch >> 3) & 7);
- *bp++ = '0' + (ch & 7);
+ putchar('\\');
+ putchar('0' + (ch >> 6));
+ putchar('0' + ((ch >> 3) & 7));
+ putchar('0' + (ch & 7));
len += 4;
}
}
@@ -231,15 +219,13 @@
} else
s += clen;
}
-
- *bp = '\0';
- return strdup(buf);
+ return (len);
}
void
usage(void)
{
- xo_error(
+ (void)fprintf(stderr,
#ifdef COLORLS
"usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]"
#else

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 29, 2:29 PM (5 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32298463
Default Alt Text
D13959.diff (22 KB)

Event Timeline