2005-01-10 08:39:26 +00:00
|
|
|
/*-
|
2017-11-20 19:49:47 +00:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
*
|
1994-05-26 06:18:55 +00:00
|
|
|
* Copyright (c) 1989, 1993, 1994
|
|
|
|
* The Regents of the University of California. All rights reserved.
|
|
|
|
*
|
|
|
|
* This code is derived from software contributed to Berkeley by
|
|
|
|
* Michael Fischbein.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
2017-02-28 23:42:47 +00:00
|
|
|
* 3. Neither the name of the University nor the names of its contributors
|
1994-05-26 06:18:55 +00:00
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
1997-08-07 22:28:25 +00:00
|
|
|
#if 0
|
2002-02-03 20:55:54 +00:00
|
|
|
#ifndef lint
|
1997-08-07 22:28:25 +00:00
|
|
|
static char sccsid[] = "@(#)print.c 8.4 (Berkeley) 4/17/94";
|
1994-05-26 06:18:55 +00:00
|
|
|
#endif /* not lint */
|
2002-02-03 20:55:54 +00:00
|
|
|
#endif
|
2002-06-30 05:13:54 +00:00
|
|
|
#include <sys/cdefs.h>
|
|
|
|
__FBSDID("$FreeBSD$");
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
#include <sys/param.h>
|
|
|
|
#include <sys/stat.h>
|
2002-11-03 07:29:08 +00:00
|
|
|
#include <sys/acl.h>
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
#include <err.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <fts.h>
|
2001-03-21 13:21:20 +00:00
|
|
|
#include <langinfo.h>
|
2004-05-25 14:53:47 +00:00
|
|
|
#include <libutil.h>
|
2015-12-07 20:48:28 +00:00
|
|
|
#include <limits.h>
|
1994-05-26 06:18:55 +00:00
|
|
|
#include <stdio.h>
|
2011-09-28 18:53:36 +00:00
|
|
|
#include <stdint.h>
|
1994-05-26 06:18:55 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2002-02-25 01:36:59 +00:00
|
|
|
#include <time.h>
|
1994-05-26 06:18:55 +00:00
|
|
|
#include <unistd.h>
|
2015-12-07 20:48:28 +00:00
|
|
|
#include <wchar.h>
|
2000-06-05 20:08:50 +00:00
|
|
|
#ifdef COLORLS
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <termcap.h>
|
|
|
|
#include <signal.h>
|
|
|
|
#endif
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
#include "ls.h"
|
|
|
|
#include "extern.h"
|
|
|
|
|
2003-05-03 16:39:34 +00:00
|
|
|
static int printaname(const FTSENT *, u_long, u_long);
|
2010-01-24 19:23:07 +00:00
|
|
|
static void printdev(size_t, dev_t);
|
2002-10-23 10:20:01 +00:00
|
|
|
static void printlink(const FTSENT *);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
static void printtime(time_t);
|
2002-02-02 06:48:10 +00:00
|
|
|
static int printtype(u_int);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
static void printsize(size_t, off_t);
|
2000-06-06 06:52:03 +00:00
|
|
|
#ifdef COLORLS
|
2002-02-02 06:48:10 +00:00
|
|
|
static void endcolor(int);
|
|
|
|
static int colortype(mode_t);
|
2000-06-06 06:52:03 +00:00
|
|
|
#endif
|
2009-08-31 20:53:01 +00:00
|
|
|
static void aclmode(char *, const FTSENT *);
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
#define IS_NOPRINT(p) ((p)->fts_number == NO_PRINT)
|
2001-12-28 20:50:12 +00:00
|
|
|
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-02 14:53:42 +00:00
|
|
|
/* Most of these are taken from <sys/stat.h> */
|
|
|
|
typedef enum Colors {
|
2001-12-29 00:18:16 +00:00
|
|
|
C_DIR, /* directory */
|
|
|
|
C_LNK, /* symbolic link */
|
|
|
|
C_SOCK, /* socket */
|
|
|
|
C_FIFO, /* pipe */
|
|
|
|
C_EXEC, /* executable */
|
|
|
|
C_BLK, /* block special */
|
|
|
|
C_CHR, /* character special */
|
|
|
|
C_SUID, /* setuid executable */
|
|
|
|
C_SGID, /* setgid executable */
|
|
|
|
C_WSDIR, /* directory writeble to others, with sticky
|
|
|
|
* bit */
|
|
|
|
C_WDIR, /* directory writeble to others, without
|
|
|
|
* sticky bit */
|
|
|
|
C_NUMCOLORS /* just a place-holder */
|
2001-12-28 18:43:32 +00:00
|
|
|
} Colors;
|
2000-06-02 14:53:42 +00:00
|
|
|
|
2002-02-03 19:11:32 +00:00
|
|
|
static const char *defcolors = "exfxcxdxbxegedabagacad";
|
2001-12-28 18:14:50 +00:00
|
|
|
|
|
|
|
/* colors for file types */
|
|
|
|
static struct {
|
2001-12-28 18:43:32 +00:00
|
|
|
int num[2];
|
|
|
|
int bold;
|
2001-12-28 18:14:50 +00:00
|
|
|
} colors[C_NUMCOLORS];
|
2000-06-05 02:14:01 +00:00
|
|
|
#endif
|
2000-06-02 14:53:42 +00:00
|
|
|
|
2015-12-07 20:48:28 +00:00
|
|
|
static size_t padding_for_month[12];
|
|
|
|
static size_t month_max_size = 0;
|
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
void
|
2003-05-03 16:39:34 +00:00
|
|
|
printscol(const DISPLAY *dp)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
2001-12-28 21:47:33 +00:00
|
|
|
FTSENT *p;
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
for (p = dp->list; p; p = p->fts_link) {
|
|
|
|
if (IS_NOPRINT(p))
|
|
|
|
continue;
|
|
|
|
(void)printaname(p, dp->s_inode, dp->s_block);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('\n');
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-07-04 23:09:23 +00:00
|
|
|
/*
|
|
|
|
* print name in current style
|
|
|
|
*/
|
2002-10-18 10:59:45 +00:00
|
|
|
int
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printname(const char *name)
|
2015-06-10 01:27:38 +00:00
|
|
|
{
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
if (f_octal || f_octal_escape)
|
|
|
|
return prn_octal(name);
|
|
|
|
else if (f_nonprint)
|
|
|
|
return prn_printable(name);
|
|
|
|
else
|
|
|
|
return prn_normal(name);
|
2015-06-10 01:27:38 +00:00
|
|
|
}
|
|
|
|
|
2015-12-07 20:48:28 +00:00
|
|
|
static const char *
|
|
|
|
get_abmon(int mon)
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (mon) {
|
|
|
|
case 0: return (nl_langinfo(ABMON_1));
|
|
|
|
case 1: return (nl_langinfo(ABMON_2));
|
|
|
|
case 2: return (nl_langinfo(ABMON_3));
|
|
|
|
case 3: return (nl_langinfo(ABMON_4));
|
|
|
|
case 4: return (nl_langinfo(ABMON_5));
|
|
|
|
case 5: return (nl_langinfo(ABMON_6));
|
|
|
|
case 6: return (nl_langinfo(ABMON_7));
|
|
|
|
case 7: return (nl_langinfo(ABMON_8));
|
|
|
|
case 8: return (nl_langinfo(ABMON_9));
|
|
|
|
case 9: return (nl_langinfo(ABMON_10));
|
|
|
|
case 10: return (nl_langinfo(ABMON_11));
|
|
|
|
case 11: return (nl_langinfo(ABMON_12));
|
|
|
|
}
|
|
|
|
|
|
|
|
/* should never happen */
|
|
|
|
abort();
|
|
|
|
}
|
|
|
|
|
|
|
|
static size_t
|
|
|
|
mbswidth(const char *month)
|
|
|
|
{
|
|
|
|
wchar_t wc;
|
|
|
|
size_t width, donelen, clen, w;
|
|
|
|
|
|
|
|
width = donelen = 0;
|
|
|
|
while ((clen = mbrtowc(&wc, month + donelen, MB_LEN_MAX, NULL)) != 0) {
|
|
|
|
if (clen == (size_t)-1 || clen == (size_t)-2)
|
|
|
|
return (-1);
|
|
|
|
donelen += clen;
|
|
|
|
if ((w = wcwidth(wc)) == (size_t)-1)
|
|
|
|
return (-1);
|
|
|
|
width += w;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (width);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
compute_abbreviated_month_size(void)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
size_t width;
|
|
|
|
size_t months_width[12];
|
|
|
|
|
|
|
|
for (i = 0; i < 12; i++) {
|
|
|
|
width = mbswidth(get_abmon(i));
|
|
|
|
if (width == (size_t)-1) {
|
|
|
|
month_max_size = -1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
months_width[i] = width;
|
|
|
|
if (width > month_max_size)
|
|
|
|
month_max_size = width;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < 12; i++)
|
|
|
|
padding_for_month[i] = month_max_size - months_width[i];
|
|
|
|
}
|
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
void
|
2003-05-03 16:39:34 +00:00
|
|
|
printlong(const DISPLAY *dp)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
|
|
|
struct stat *sp;
|
2001-12-28 21:47:33 +00:00
|
|
|
FTSENT *p;
|
|
|
|
NAMES *np;
|
|
|
|
char buf[20];
|
2000-06-05 19:56:52 +00:00
|
|
|
#ifdef COLORLS
|
2001-12-28 21:47:33 +00:00
|
|
|
int color_printed = 0;
|
2000-06-05 19:56:52 +00:00
|
|
|
#endif
|
1994-05-26 06:18:55 +00:00
|
|
|
|
2004-06-08 09:27:42 +00:00
|
|
|
if ((dp->list == NULL || dp->list->fts_level != FTS_ROOTLEVEL) &&
|
|
|
|
(f_longform || f_size)) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("total %lu\n", howmany(dp->btotal, blocksize));
|
2004-06-08 09:27:42 +00:00
|
|
|
}
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
for (p = dp->list; p; p = p->fts_link) {
|
|
|
|
if (IS_NOPRINT(p))
|
|
|
|
continue;
|
|
|
|
sp = p->fts_statp;
|
|
|
|
if (f_inode)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("%*ju ",
|
2012-09-27 23:31:12 +00:00
|
|
|
dp->s_inode, (uintmax_t)sp->st_ino);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_size)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("%*jd ",
|
1994-05-26 06:18:55 +00:00
|
|
|
dp->s_block, howmany(sp->st_blocks, blocksize));
|
2002-02-03 19:11:32 +00:00
|
|
|
strmode(sp->st_mode, buf);
|
2009-08-31 20:53:01 +00:00
|
|
|
aclmode(buf, p);
|
1994-05-26 06:18:55 +00:00
|
|
|
np = p->fts_pointer;
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(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);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_flags)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("%-*s ", dp->s_flags, np->flags);
|
2002-10-24 00:07:30 +00:00
|
|
|
if (f_label)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("%-*s ", dp->s_label, np->label);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode))
|
2010-01-24 19:23:07 +00:00
|
|
|
printdev(dp->s_size, sp->st_rdev);
|
1994-05-26 06:18:55 +00:00
|
|
|
else
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printsize(dp->s_size, sp->st_size);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_accesstime)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printtime(sp->st_atime);
|
2006-03-24 16:38:02 +00:00
|
|
|
else if (f_birthtime)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printtime(sp->st_birthtime);
|
1994-05-26 06:18:55 +00:00
|
|
|
else if (f_statustime)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printtime(sp->st_ctime);
|
1994-05-26 06:18:55 +00:00
|
|
|
else
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printtime(sp->st_mtime);
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-02 14:53:42 +00:00
|
|
|
if (f_color)
|
2000-06-05 19:39:39 +00:00
|
|
|
color_printed = colortype(sp->st_mode);
|
2000-06-05 02:14:01 +00:00
|
|
|
#endif
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printname(p->fts_name);
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-05 19:39:39 +00:00
|
|
|
if (f_color && color_printed)
|
2000-06-06 06:52:03 +00:00
|
|
|
endcolor(0);
|
2000-06-05 02:14:01 +00:00
|
|
|
#endif
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_type)
|
|
|
|
(void)printtype(sp->st_mode);
|
|
|
|
if (S_ISLNK(sp->st_mode))
|
|
|
|
printlink(p);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('\n');
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-05-19 02:51:36 +00:00
|
|
|
void
|
2003-05-03 16:39:34 +00:00
|
|
|
printstream(const DISPLAY *dp)
|
2002-05-19 02:51:36 +00:00
|
|
|
{
|
|
|
|
FTSENT *p;
|
|
|
|
int chcnt;
|
|
|
|
|
|
|
|
for (p = dp->list, chcnt = 0; p; p = p->fts_link) {
|
|
|
|
if (p->fts_number == NO_PRINT)
|
|
|
|
continue;
|
2004-05-02 11:25:37 +00:00
|
|
|
/* XXX strlen does not take octal escapes into account. */
|
2002-05-19 02:51:36 +00:00
|
|
|
if (strlen(p->fts_name) + chcnt +
|
|
|
|
(p->fts_link ? 2 : 0) >= (unsigned)termwidth) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
putchar('\n');
|
2002-05-19 02:51:36 +00:00
|
|
|
chcnt = 0;
|
|
|
|
}
|
|
|
|
chcnt += printaname(p, dp->s_inode, dp->s_block);
|
|
|
|
if (p->fts_link) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printf(", ");
|
2002-05-19 02:51:36 +00:00
|
|
|
chcnt += 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (chcnt)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
putchar('\n');
|
2002-05-19 02:51:36 +00:00
|
|
|
}
|
2008-04-04 03:57:46 +00:00
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
void
|
2003-05-03 16:39:34 +00:00
|
|
|
printcol(const DISPLAY *dp)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
|
|
|
static FTSENT **array;
|
|
|
|
static int lastentries = -1;
|
2001-12-28 21:47:33 +00:00
|
|
|
FTSENT *p;
|
2003-10-16 07:07:20 +00:00
|
|
|
FTSENT **narray;
|
2001-12-28 21:47:33 +00:00
|
|
|
int base;
|
|
|
|
int chcnt;
|
|
|
|
int cnt;
|
|
|
|
int col;
|
|
|
|
int colwidth;
|
|
|
|
int endcol;
|
|
|
|
int num;
|
|
|
|
int numcols;
|
|
|
|
int numrows;
|
|
|
|
int row;
|
|
|
|
int tabwidth;
|
1998-07-29 00:46:13 +00:00
|
|
|
|
|
|
|
if (f_notabs)
|
|
|
|
tabwidth = 1;
|
|
|
|
else
|
|
|
|
tabwidth = 8;
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Have to do random access in the linked list -- build a table
|
|
|
|
* of pointers.
|
|
|
|
*/
|
|
|
|
if (dp->entries > lastentries) {
|
2003-10-16 07:07:20 +00:00
|
|
|
if ((narray =
|
1994-05-26 06:18:55 +00:00
|
|
|
realloc(array, dp->entries * sizeof(FTSENT *))) == NULL) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warn(NULL);
|
1994-05-26 06:18:55 +00:00
|
|
|
printscol(dp);
|
2003-10-16 07:07:20 +00:00
|
|
|
return;
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
2003-10-16 07:07:20 +00:00
|
|
|
lastentries = dp->entries;
|
|
|
|
array = narray;
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
for (p = dp->list, num = 0; p; p = p->fts_link)
|
|
|
|
if (p->fts_number != NO_PRINT)
|
|
|
|
array[num++] = p;
|
|
|
|
|
|
|
|
colwidth = dp->maxlen;
|
|
|
|
if (f_inode)
|
|
|
|
colwidth += dp->s_inode + 1;
|
|
|
|
if (f_size)
|
|
|
|
colwidth += dp->s_block + 1;
|
|
|
|
if (f_type)
|
|
|
|
colwidth += 1;
|
|
|
|
|
1998-07-29 00:46:13 +00:00
|
|
|
colwidth = (colwidth + tabwidth) & ~(tabwidth - 1);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (termwidth < 2 * colwidth) {
|
|
|
|
printscol(dp);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
numcols = termwidth / colwidth;
|
|
|
|
numrows = num / numcols;
|
|
|
|
if (num % numcols)
|
|
|
|
++numrows;
|
|
|
|
|
2004-06-08 09:27:42 +00:00
|
|
|
if ((dp->list == NULL || dp->list->fts_level != FTS_ROOTLEVEL) &&
|
|
|
|
(f_longform || f_size)) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("total %lu\n", howmany(dp->btotal, blocksize));
|
2004-06-08 09:27:42 +00:00
|
|
|
}
|
2002-05-19 02:51:36 +00:00
|
|
|
|
2002-08-29 14:29:09 +00:00
|
|
|
base = 0;
|
1994-05-26 06:18:55 +00:00
|
|
|
for (row = 0; row < numrows; ++row) {
|
|
|
|
endcol = colwidth;
|
2002-05-19 02:51:36 +00:00
|
|
|
if (!f_sortacross)
|
|
|
|
base = row;
|
|
|
|
for (col = 0, chcnt = 0; col < numcols; ++col) {
|
1994-05-26 06:18:55 +00:00
|
|
|
chcnt += printaname(array[base], dp->s_inode,
|
|
|
|
dp->s_block);
|
2002-05-19 02:51:36 +00:00
|
|
|
if (f_sortacross)
|
|
|
|
base++;
|
|
|
|
else
|
|
|
|
base += numrows;
|
|
|
|
if (base >= num)
|
1994-05-26 06:18:55 +00:00
|
|
|
break;
|
1998-07-29 00:46:13 +00:00
|
|
|
while ((cnt = ((chcnt + tabwidth) & ~(tabwidth - 1)))
|
2001-12-28 21:55:23 +00:00
|
|
|
<= endcol) {
|
2002-05-19 02:51:36 +00:00
|
|
|
if (f_sortacross && col + 1 >= numcols)
|
|
|
|
break;
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar(f_notabs ? ' ' : '\t');
|
1994-05-26 06:18:55 +00:00
|
|
|
chcnt = cnt;
|
|
|
|
}
|
|
|
|
endcol += colwidth;
|
|
|
|
}
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('\n');
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* print [inode] [size] name
|
|
|
|
* return # of characters printed, no trailing characters.
|
|
|
|
*/
|
|
|
|
static int
|
2003-05-03 16:39:34 +00:00
|
|
|
printaname(const FTSENT *p, u_long inodefield, u_long sizefield)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
|
|
|
struct stat *sp;
|
2001-12-28 21:47:33 +00:00
|
|
|
int chcnt;
|
2000-06-05 19:56:52 +00:00
|
|
|
#ifdef COLORLS
|
2001-12-28 21:47:33 +00:00
|
|
|
int color_printed = 0;
|
2000-06-05 19:56:52 +00:00
|
|
|
#endif
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
sp = p->fts_statp;
|
|
|
|
chcnt = 0;
|
|
|
|
if (f_inode)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
chcnt += printf("%*ju ",
|
2012-09-27 23:31:12 +00:00
|
|
|
(int)inodefield, (uintmax_t)sp->st_ino);
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_size)
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
chcnt += printf("%*jd ",
|
1994-05-26 06:18:55 +00:00
|
|
|
(int)sizefield, howmany(sp->st_blocks, blocksize));
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-02 14:53:42 +00:00
|
|
|
if (f_color)
|
2000-06-05 19:39:39 +00:00
|
|
|
color_printed = colortype(sp->st_mode);
|
2000-06-05 02:14:01 +00:00
|
|
|
#endif
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
chcnt += printname(p->fts_name);
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-05 19:39:39 +00:00
|
|
|
if (f_color && color_printed)
|
2000-06-06 06:52:03 +00:00
|
|
|
endcolor(0);
|
2000-06-05 02:14:01 +00:00
|
|
|
#endif
|
1994-05-26 06:18:55 +00:00
|
|
|
if (f_type)
|
|
|
|
chcnt += printtype(sp->st_mode);
|
|
|
|
return (chcnt);
|
|
|
|
}
|
|
|
|
|
2010-01-24 19:23:07 +00:00
|
|
|
/*
|
|
|
|
* Print device special file major and minor numbers.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
printdev(size_t width, dev_t dev)
|
|
|
|
{
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
|
|
|
|
(void)printf("%#*jx ", (u_int)width, (uintmax_t)dev);
|
2010-01-24 19:23:07 +00:00
|
|
|
}
|
|
|
|
|
2015-12-07 20:48:28 +00:00
|
|
|
static size_t
|
|
|
|
ls_strftime(char *str, size_t len, const char *fmt, const struct tm *tm)
|
|
|
|
{
|
|
|
|
char *posb, nfmt[BUFSIZ];
|
|
|
|
const char *format = fmt;
|
|
|
|
size_t ret;
|
|
|
|
|
|
|
|
if ((posb = strstr(fmt, "%b")) != NULL) {
|
|
|
|
if (month_max_size == 0) {
|
|
|
|
compute_abbreviated_month_size();
|
|
|
|
}
|
|
|
|
if (month_max_size > 0) {
|
|
|
|
snprintf(nfmt, sizeof(nfmt), "%.*s%s%*s%s",
|
|
|
|
(int)(posb - fmt), fmt,
|
|
|
|
get_abmon(tm->tm_mon),
|
|
|
|
(int)padding_for_month[tm->tm_mon],
|
|
|
|
"",
|
|
|
|
posb + 2);
|
|
|
|
format = nfmt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ret = strftime(str, len, format, tm);
|
|
|
|
return (ret);
|
|
|
|
}
|
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
static void
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printtime(time_t ftime)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
2001-12-28 21:47:33 +00:00
|
|
|
char longstring[80];
|
2003-05-03 16:39:34 +00:00
|
|
|
static time_t now = 0;
|
2001-12-28 21:47:33 +00:00
|
|
|
const char *format;
|
|
|
|
static int d_first = -1;
|
1997-01-11 19:15:53 +00:00
|
|
|
|
2001-03-21 13:21:20 +00:00
|
|
|
if (d_first < 0)
|
|
|
|
d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
|
1997-01-11 19:15:53 +00:00
|
|
|
if (now == 0)
|
|
|
|
now = time(NULL);
|
1994-05-26 06:18:55 +00:00
|
|
|
|
1995-08-07 19:17:46 +00:00
|
|
|
#define SIXMONTHS ((365 / 2) * 86400)
|
2008-04-04 03:57:46 +00:00
|
|
|
if (f_timeformat) /* user specified format */
|
|
|
|
format = f_timeformat;
|
|
|
|
else if (f_sectime)
|
2000-06-21 21:49:57 +00:00
|
|
|
/* mmm dd hh:mm:ss yyyy || dd mmm hh:mm:ss yyyy */
|
2008-04-04 03:57:46 +00:00
|
|
|
format = d_first ? "%e %b %T %Y" : "%b %e %T %Y";
|
1997-01-11 19:15:53 +00:00
|
|
|
else if (ftime + SIXMONTHS > now && ftime < now + SIXMONTHS)
|
2000-06-21 21:49:57 +00:00
|
|
|
/* mmm dd hh:mm || dd mmm hh:mm */
|
2008-04-04 03:57:46 +00:00
|
|
|
format = d_first ? "%e %b %R" : "%b %e %R";
|
2000-06-18 22:18:04 +00:00
|
|
|
else
|
2000-06-21 21:49:57 +00:00
|
|
|
/* mmm dd yyyy || dd mmm yyyy */
|
2012-11-09 20:19:56 +00:00
|
|
|
format = d_first ? "%e %b %Y" : "%b %e %Y";
|
2015-12-07 20:48:28 +00:00
|
|
|
ls_strftime(longstring, sizeof(longstring), format, localtime(&ftime));
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
fputs(longstring, stdout);
|
|
|
|
fputc(' ', stdout);
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2002-02-02 06:48:10 +00:00
|
|
|
printtype(u_int mode)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
2002-05-19 02:51:36 +00:00
|
|
|
|
|
|
|
if (f_slash) {
|
|
|
|
if ((mode & S_IFMT) == S_IFDIR) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('/');
|
2002-05-19 02:51:36 +00:00
|
|
|
return (1);
|
|
|
|
}
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
switch (mode & S_IFMT) {
|
|
|
|
case S_IFDIR:
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('/');
|
1994-05-26 06:18:55 +00:00
|
|
|
return (1);
|
|
|
|
case S_IFIFO:
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('|');
|
1994-05-26 06:18:55 +00:00
|
|
|
return (1);
|
|
|
|
case S_IFLNK:
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('@');
|
1994-05-26 06:18:55 +00:00
|
|
|
return (1);
|
|
|
|
case S_IFSOCK:
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('=');
|
1994-05-26 06:18:55 +00:00
|
|
|
return (1);
|
1996-12-14 06:03:29 +00:00
|
|
|
case S_IFWHT:
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('%');
|
1996-12-14 06:03:29 +00:00
|
|
|
return (1);
|
2002-02-03 19:11:32 +00:00
|
|
|
default:
|
2002-05-15 18:53:56 +00:00
|
|
|
break;
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
|
|
|
if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar('*');
|
1994-05-26 06:18:55 +00:00
|
|
|
return (1);
|
|
|
|
}
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
2000-06-05 02:14:01 +00:00
|
|
|
#ifdef COLORLS
|
2000-06-06 07:19:50 +00:00
|
|
|
static int
|
2002-02-02 06:48:10 +00:00
|
|
|
putch(int c)
|
2000-06-05 19:39:39 +00:00
|
|
|
{
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)putchar(c);
|
2000-06-06 06:52:03 +00:00
|
|
|
return 0;
|
2000-06-05 19:39:39 +00:00
|
|
|
}
|
|
|
|
|
2000-06-06 07:19:50 +00:00
|
|
|
static int
|
2002-02-02 06:48:10 +00:00
|
|
|
writech(int c)
|
2000-06-06 06:52:03 +00:00
|
|
|
{
|
2003-05-03 16:39:34 +00:00
|
|
|
char tmp = (char)c;
|
2000-06-06 06:52:03 +00:00
|
|
|
|
2001-12-29 00:18:16 +00:00
|
|
|
(void)write(STDOUT_FILENO, &tmp, 1);
|
2000-06-06 06:52:03 +00:00
|
|
|
return 0;
|
|
|
|
}
|
2000-06-05 19:39:39 +00:00
|
|
|
|
2000-06-06 07:19:50 +00:00
|
|
|
static void
|
2002-02-02 06:48:10 +00:00
|
|
|
printcolor(Colors c)
|
2000-06-02 14:53:42 +00:00
|
|
|
{
|
2001-12-28 21:47:33 +00:00
|
|
|
char *ansiseq;
|
2000-06-05 02:14:01 +00:00
|
|
|
|
2001-12-28 18:14:50 +00:00
|
|
|
if (colors[c].bold)
|
|
|
|
tputs(enter_bold, 1, putch);
|
|
|
|
|
|
|
|
if (colors[c].num[0] != -1) {
|
|
|
|
ansiseq = tgoto(ansi_fgcol, 0, colors[c].num[0]);
|
2000-06-06 06:52:03 +00:00
|
|
|
if (ansiseq)
|
2000-06-05 19:39:39 +00:00
|
|
|
tputs(ansiseq, 1, putch);
|
2000-06-05 02:14:01 +00:00
|
|
|
}
|
2001-12-28 18:14:50 +00:00
|
|
|
if (colors[c].num[1] != -1) {
|
|
|
|
ansiseq = tgoto(ansi_bgcol, 0, colors[c].num[1]);
|
2000-06-06 06:52:03 +00:00
|
|
|
if (ansiseq)
|
2000-06-05 19:39:39 +00:00
|
|
|
tputs(ansiseq, 1, putch);
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
2000-06-05 02:14:01 +00:00
|
|
|
}
|
|
|
|
|
2000-06-06 06:52:03 +00:00
|
|
|
static void
|
2002-02-02 06:48:10 +00:00
|
|
|
endcolor(int sig)
|
2000-06-05 02:14:01 +00:00
|
|
|
{
|
2000-06-06 06:52:03 +00:00
|
|
|
tputs(ansi_coloff, 1, sig ? writech : putch);
|
2001-12-28 18:14:50 +00:00
|
|
|
tputs(attrs_off, 1, sig ? writech : putch);
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
|
|
|
|
2000-06-06 06:52:03 +00:00
|
|
|
static int
|
2002-02-02 06:48:10 +00:00
|
|
|
colortype(mode_t mode)
|
2000-06-02 14:53:42 +00:00
|
|
|
{
|
2001-12-29 00:18:16 +00:00
|
|
|
switch (mode & S_IFMT) {
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFDIR:
|
2000-06-02 14:53:42 +00:00
|
|
|
if (mode & S_IWOTH)
|
2001-12-28 21:55:23 +00:00
|
|
|
if (mode & S_ISTXT)
|
|
|
|
printcolor(C_WSDIR);
|
|
|
|
else
|
|
|
|
printcolor(C_WDIR);
|
2000-06-02 14:53:42 +00:00
|
|
|
else
|
2001-12-28 21:55:23 +00:00
|
|
|
printcolor(C_DIR);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFLNK:
|
2000-06-02 14:53:42 +00:00
|
|
|
printcolor(C_LNK);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFSOCK:
|
2000-06-02 14:53:42 +00:00
|
|
|
printcolor(C_SOCK);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFIFO:
|
2000-06-02 14:53:42 +00:00
|
|
|
printcolor(C_FIFO);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFBLK:
|
2000-06-02 14:53:42 +00:00
|
|
|
printcolor(C_BLK);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2001-12-28 21:55:23 +00:00
|
|
|
case S_IFCHR:
|
2000-06-02 14:53:42 +00:00
|
|
|
printcolor(C_CHR);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2003-05-03 16:39:34 +00:00
|
|
|
default:;
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
|
|
|
if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
|
|
|
|
if (mode & S_ISUID)
|
2001-12-28 21:55:23 +00:00
|
|
|
printcolor(C_SUID);
|
2000-06-02 14:53:42 +00:00
|
|
|
else if (mode & S_ISGID)
|
2001-12-28 21:55:23 +00:00
|
|
|
printcolor(C_SGID);
|
2000-06-02 14:53:42 +00:00
|
|
|
else
|
2001-12-28 21:55:23 +00:00
|
|
|
printcolor(C_EXEC);
|
2001-12-29 00:18:16 +00:00
|
|
|
return (1);
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
2001-12-29 00:18:16 +00:00
|
|
|
return (0);
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2002-02-02 06:48:10 +00:00
|
|
|
parsecolors(const char *cs)
|
2000-06-02 14:53:42 +00:00
|
|
|
{
|
2001-12-28 21:47:33 +00:00
|
|
|
int i;
|
|
|
|
int j;
|
2002-10-23 10:20:01 +00:00
|
|
|
size_t len;
|
2001-12-28 21:47:33 +00:00
|
|
|
char c[2];
|
|
|
|
short legacy_warn = 0;
|
2001-12-28 18:43:32 +00:00
|
|
|
|
|
|
|
if (cs == NULL)
|
2001-12-29 00:18:16 +00:00
|
|
|
cs = ""; /* LSCOLORS not set */
|
2000-06-02 14:53:42 +00:00
|
|
|
len = strlen(cs);
|
2003-05-03 16:39:34 +00:00
|
|
|
for (i = 0; i < (int)C_NUMCOLORS; i++) {
|
2001-12-28 18:14:50 +00:00
|
|
|
colors[i].bold = 0;
|
|
|
|
|
2003-05-03 16:39:34 +00:00
|
|
|
if (len <= 2 * (size_t)i) {
|
2001-12-28 18:43:32 +00:00
|
|
|
c[0] = defcolors[2 * i];
|
|
|
|
c[1] = defcolors[2 * i + 1];
|
2001-12-29 00:18:16 +00:00
|
|
|
} else {
|
2001-12-28 18:43:32 +00:00
|
|
|
c[0] = cs[2 * i];
|
|
|
|
c[1] = cs[2 * i + 1];
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
2001-12-29 00:18:16 +00:00
|
|
|
for (j = 0; j < 2; j++) {
|
2001-12-28 18:14:50 +00:00
|
|
|
/* Legacy colours used 0-7 */
|
|
|
|
if (c[j] >= '0' && c[j] <= '7') {
|
|
|
|
colors[i].num[j] = c[j] - '0';
|
|
|
|
if (!legacy_warn) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warnx("LSCOLORS should use "
|
2001-12-28 19:27:30 +00:00
|
|
|
"characters a-h instead of 0-9 ("
|
2002-11-06 01:18:12 +00:00
|
|
|
"see the manual page)");
|
2001-12-28 18:14:50 +00:00
|
|
|
}
|
|
|
|
legacy_warn = 1;
|
|
|
|
} else if (c[j] >= 'a' && c[j] <= 'h')
|
|
|
|
colors[i].num[j] = c[j] - 'a';
|
|
|
|
else if (c[j] >= 'A' && c[j] <= 'H') {
|
|
|
|
colors[i].num[j] = c[j] - 'A';
|
|
|
|
colors[i].bold = 1;
|
2003-05-03 16:39:34 +00:00
|
|
|
} else if (tolower((unsigned char)c[j]) == 'x')
|
2001-12-28 18:14:50 +00:00
|
|
|
colors[i].num[j] = -1;
|
|
|
|
else {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warnx("invalid character '%c' in LSCOLORS"
|
2002-11-06 01:18:12 +00:00
|
|
|
" env var", c[j]);
|
2001-12-28 18:20:23 +00:00
|
|
|
colors[i].num[j] = -1;
|
2000-06-02 14:53:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2000-06-05 19:39:39 +00:00
|
|
|
|
2000-06-06 07:19:50 +00:00
|
|
|
void
|
2002-02-02 06:48:10 +00:00
|
|
|
colorquit(int sig)
|
2000-06-05 19:39:39 +00:00
|
|
|
{
|
2000-06-06 06:52:03 +00:00
|
|
|
endcolor(sig);
|
2000-06-05 20:08:50 +00:00
|
|
|
|
2001-12-29 00:18:16 +00:00
|
|
|
(void)signal(sig, SIG_DFL);
|
|
|
|
(void)kill(getpid(), sig);
|
2000-06-05 19:39:39 +00:00
|
|
|
}
|
2001-12-29 00:18:16 +00:00
|
|
|
|
|
|
|
#endif /* COLORLS */
|
|
|
|
|
1994-05-26 06:18:55 +00:00
|
|
|
static void
|
2002-10-23 10:20:01 +00:00
|
|
|
printlink(const FTSENT *p)
|
1994-05-26 06:18:55 +00:00
|
|
|
{
|
2001-12-28 21:47:33 +00:00
|
|
|
int lnklen;
|
|
|
|
char name[MAXPATHLEN + 1];
|
|
|
|
char path[MAXPATHLEN + 1];
|
1994-05-26 06:18:55 +00:00
|
|
|
|
|
|
|
if (p->fts_level == FTS_ROOTLEVEL)
|
|
|
|
(void)snprintf(name, sizeof(name), "%s", p->fts_name);
|
1995-05-30 00:07:29 +00:00
|
|
|
else
|
1994-05-26 06:18:55 +00:00
|
|
|
(void)snprintf(name, sizeof(name),
|
|
|
|
"%s/%s", p->fts_parent->fts_accpath, p->fts_name);
|
|
|
|
if ((lnklen = readlink(name, path, sizeof(path) - 1)) == -1) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)fprintf(stderr, "\nls: %s: %s\n", name, strerror(errno));
|
1994-05-26 06:18:55 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
path[lnklen] = '\0';
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf(" -> ");
|
|
|
|
(void)printname(path);
|
1994-05-26 06:18:55 +00:00
|
|
|
}
|
2001-12-28 20:50:12 +00:00
|
|
|
|
|
|
|
static void
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
printsize(size_t width, off_t bytes)
|
2001-12-28 20:50:12 +00:00
|
|
|
{
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
|
2001-12-28 20:50:12 +00:00
|
|
|
if (f_humanval) {
|
2010-01-24 19:23:07 +00:00
|
|
|
/*
|
|
|
|
* Reserve one space before the size and allocate room for
|
|
|
|
* the trailing '\0'.
|
|
|
|
*/
|
|
|
|
char buf[HUMANVALSTR_LEN - 1 + 1];
|
2001-12-28 20:50:12 +00:00
|
|
|
|
2004-05-25 14:53:47 +00:00
|
|
|
humanize_number(buf, sizeof(buf), (int64_t)bytes, "",
|
|
|
|
HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
(void)printf("%*s ", (u_int)width, buf);
|
|
|
|
} else if (f_thousands) { /* with commas */
|
2012-11-08 00:24:26 +00:00
|
|
|
/* This format assignment needed to work round gcc bug. */
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
const char *format = "%*j'd ";
|
|
|
|
(void)printf(format, (u_int)width, bytes);
|
|
|
|
} else
|
|
|
|
(void)printf("%*jd ", (u_int)width, bytes);
|
2001-12-28 20:50:12 +00:00
|
|
|
}
|
|
|
|
|
2009-08-31 20:53:01 +00:00
|
|
|
/*
|
|
|
|
* Add a + after the standard rwxrwxrwx mode if the file has an
|
|
|
|
* ACL. strmode() reserves space at the end of the string.
|
|
|
|
*/
|
2002-11-03 07:29:08 +00:00
|
|
|
static void
|
2009-08-31 20:53:01 +00:00
|
|
|
aclmode(char *buf, const FTSENT *p)
|
2002-11-03 07:29:08 +00:00
|
|
|
{
|
|
|
|
char name[MAXPATHLEN + 1];
|
2009-08-31 20:53:01 +00:00
|
|
|
int ret, trivial;
|
|
|
|
static dev_t previous_dev = NODEV;
|
|
|
|
static int supports_acls = -1;
|
|
|
|
static int type = ACL_TYPE_ACCESS;
|
2002-11-03 07:29:08 +00:00
|
|
|
acl_t facl;
|
|
|
|
|
|
|
|
/*
|
2009-08-31 20:53:01 +00:00
|
|
|
* XXX: ACLs are not supported on whiteouts and device files
|
|
|
|
* residing on UFS.
|
2002-12-19 01:13:23 +00:00
|
|
|
*/
|
2009-08-31 20:53:01 +00:00
|
|
|
if (S_ISCHR(p->fts_statp->st_mode) || S_ISBLK(p->fts_statp->st_mode) ||
|
|
|
|
S_ISWHT(p->fts_statp->st_mode))
|
2002-12-19 01:13:23 +00:00
|
|
|
return;
|
2009-08-31 20:53:01 +00:00
|
|
|
|
2009-09-02 20:50:39 +00:00
|
|
|
if (previous_dev == p->fts_statp->st_dev && supports_acls == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (p->fts_level == FTS_ROOTLEVEL)
|
|
|
|
snprintf(name, sizeof(name), "%s", p->fts_name);
|
|
|
|
else
|
|
|
|
snprintf(name, sizeof(name), "%s/%s",
|
|
|
|
p->fts_parent->fts_accpath, p->fts_name);
|
|
|
|
|
2009-08-31 20:53:01 +00:00
|
|
|
if (previous_dev != p->fts_statp->st_dev) {
|
|
|
|
previous_dev = p->fts_statp->st_dev;
|
|
|
|
supports_acls = 0;
|
|
|
|
|
|
|
|
ret = lpathconf(name, _PC_ACL_NFS4);
|
|
|
|
if (ret > 0) {
|
|
|
|
type = ACL_TYPE_NFS4;
|
|
|
|
supports_acls = 1;
|
|
|
|
} else if (ret < 0 && errno != EINVAL) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warn("%s", name);
|
2009-08-31 20:53:01 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (supports_acls == 0) {
|
|
|
|
ret = lpathconf(name, _PC_ACL_EXTENDED);
|
|
|
|
if (ret > 0) {
|
|
|
|
type = ACL_TYPE_ACCESS;
|
|
|
|
supports_acls = 1;
|
|
|
|
} else if (ret < 0 && errno != EINVAL) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warn("%s", name);
|
2009-08-31 20:53:01 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (supports_acls == 0)
|
|
|
|
return;
|
|
|
|
facl = acl_get_link_np(name, type);
|
|
|
|
if (facl == NULL) {
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warn("%s", name);
|
2002-11-03 07:29:08 +00:00
|
|
|
return;
|
|
|
|
}
|
2009-08-31 20:53:01 +00:00
|
|
|
if (acl_is_trivial_np(facl, &trivial)) {
|
2002-11-03 07:29:08 +00:00
|
|
|
acl_free(facl);
|
Convert ls(1) to not use libxo(3)
libxo imposes a large burden on system utilities. In the case of ls, that
burden is difficult to justify -- any language that can interact with json
output can use readdir(3) and stat(2).
Logically, this reverts r291607, r285857, r285803, r285734, r285425,
r284494, r284489, r284252, and r284198.
Kyua tests continue to pass (libxo integration was entirely untested).
Reported by: many
Reviewed by: imp
Discussed with: manu, bdrewery
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D13959
2018-01-17 22:47:34 +00:00
|
|
|
warn("%s", name);
|
2009-08-31 20:53:01 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!trivial)
|
|
|
|
buf[10] = '+';
|
|
|
|
acl_free(facl);
|
2002-11-03 07:29:08 +00:00
|
|
|
}
|