pkgsrc/misc/colorls/patches/patch-ac

196 lines
5 KiB
Text

$NetBSD: patch-ac,v 1.7 2015/07/09 11:44:09 jperkin Exp $
Use nbcompat.
--- ls.c.orig 1996-12-21 23:40:58.000000000 +0000
+++ ls.c
@@ -53,18 +53,37 @@ static char const sccsid[] = "@(#)ls.c 8
#include <dirent.h>
#include <err.h>
#include <errno.h>
+#if defined(HAVE_NBCOMPAT_H)
+#include <nbcompat.h>
+#include <nbcompat/fts.h>
+#else
#include <fts.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <locale.h>
+#ifdef HAVE_NBCOMPAT_H
+#include <nbcompat/pwd.h>
+#include <nbcompat/grp.h>
+#endif
+#include <pwd.h>
+#include <grp.h>
+
+#ifdef __sun
+#include <sys/ttold.h>
+#endif
#include "ls.h"
#include "extern.h"
static void display __P((FTSENT *, FTSENT *));
+#ifdef __DragonFly__
+static int mastercmp __P((const FTSENT * const *, const FTSENT * const *));
+#else
static int mastercmp __P((const FTSENT **, const FTSENT **));
+#endif
static void traverse __P((int, char **, int));
static void (*printfcn) __P((DISPLAY *));
@@ -76,7 +95,9 @@ int termwidth = 80; /* default terminal
/* flags */
int f_accesstime; /* use time of last access */
int f_column; /* columnated format */
+#ifndef __sun
int f_flags; /* show flags associated with a file */
+#endif
int f_inode; /* print inode */
int f_kblocks; /* print size in kilobytes */
int f_listdir; /* list actual directory, not contents */
@@ -94,6 +115,7 @@ int f_statustime; /* use time of last m
int f_dirname; /* if precede with directory name */
int f_timesort; /* sort by time vice name */
int f_type; /* add type character for non-regular files */
+int f_color; /* add type in color for non-regular files */
#ifndef BSD4_4_LITE
int f_whiteout; /* show whiteout entries */
#endif
@@ -135,9 +157,13 @@ main(argc, argv)
fts_options = FTS_PHYSICAL;
#ifdef BSD4_4_LITE
- while ((ch = getopt(argc, argv, "1ACFLRTacdfgikloqrstu")) != EOF) {
+ while ((ch = getopt(argc, argv, "1ACFGLRTacdfgikloqrstu")) != EOF) {
#else
- while ((ch = getopt(argc, argv, "1ACFLRTWacdfgikloqrstu")) != EOF) {
+#ifndef __sun
+ while ((ch = getopt(argc, argv, "1ACFGLRTWacdfgikloqrstu")) != EOF) {
+#else
+ while ((ch = getopt(argc, argv, "1ACFGLRTWacdfgiklqrstu")) != EOF) {
+#endif
#endif
switch (ch) {
/*
@@ -168,6 +194,10 @@ main(argc, argv)
case 'F':
f_type = 1;
break;
+ case 'G':
+ if (isatty(STDOUT_FILENO))
+ f_color = 1;
+ break;
case 'L':
fts_options &= ~FTS_PHYSICAL;
fts_options |= FTS_LOGICAL;
@@ -197,9 +227,11 @@ main(argc, argv)
case 'k':
f_kblocks = 1;
break;
+#ifndef __sun
case 'o':
f_flags = 1;
break;
+#endif
case 'q':
f_nonprint = 1;
break;
@@ -228,18 +260,21 @@ main(argc, argv)
argc -= optind;
argv += optind;
+ parsecolors(getenv("LSCOLORS"));
+
/*
* If not -F, -i, -l, -s or -t options, don't require stat
* information.
*/
- if (!f_inode && !f_longform && !f_size && !f_timesort && !f_type)
+ if (!f_inode && !f_longform && !f_size && !f_timesort && !f_type
+ && !f_color)
fts_options |= FTS_NOSTAT;
/*
* If not -F, -d or -l options, follow any symbolic links listed on
* the command line.
*/
- if (!f_longform && !f_listdir && !f_type)
+ if (!f_longform && !f_listdir && !f_type && !f_color)
fts_options |= FTS_COMFOLLOW;
#ifndef BSD4_4_LITE
@@ -257,7 +292,11 @@ main(argc, argv)
if (f_kblocks)
blocksize = 2;
else {
+#ifdef __sun
+ blocksize = 512;
+#else
(void)getbsize(&notused, &blocksize);
+#endif
blocksize /= 512;
}
}
@@ -384,7 +423,8 @@ display(p, list)
u_long btotal, maxblock, maxinode, maxlen, maxnlink;
int bcfile, flen, glen, ulen, maxflags, maxgroup, maxuser;
int entries, needstats;
- char *user, *group, *flags, buf[20]; /* 32 bits == 10 digits */
+ const char *user, *group;
+ char *flags, buf[20]; /* 32 bits == 10 digits */
/*
* If list is NULL there are two possibilities: that the parent
@@ -452,12 +492,14 @@ display(p, list)
group = group_from_gid(sp->st_gid, 0);
if ((glen = strlen(group)) > maxgroup)
maxgroup = glen;
+#ifndef __sun
if (f_flags) {
flags =
flags_to_string(sp->st_flags, "-");
if ((flen = strlen(flags)) > maxflags)
maxflags = flen;
} else
+#endif
flen = 0;
if ((np = malloc(sizeof(NAMES) +
@@ -473,10 +515,12 @@ display(p, list)
S_ISBLK(sp->st_mode))
bcfile = 1;
+#ifndef __sun
if (f_flags) {
np->flags = &np->data[ulen + glen + 2];
(void)strcpy(np->flags, flags);
}
+#endif
cur->fts_pointer = np;
}
}
@@ -500,7 +544,7 @@ display(p, list)
d.s_inode = strlen(buf);
(void)snprintf(buf, sizeof(buf), "%lu", maxnlink);
d.s_nlink = strlen(buf);
- (void)snprintf(buf, sizeof(buf), "%qu", maxsize);
+ (void)snprintf(buf, sizeof(buf), "%llu", (long long)maxsize);
d.s_size = strlen(buf);
d.s_user = maxuser;
}
@@ -521,7 +565,11 @@ display(p, list)
*/
static int
mastercmp(a, b)
+#ifdef __DragonFly__
+ const FTSENT * const *a, * const *b;
+#else
const FTSENT **a, **b;
+#endif
{
int a_info, b_info;