[27166] in Source-Commits
/svn/athena r25988 - in trunk/third/lam: . debian debian/patches debian/source
daemon@ATHENA.MIT.EDU (Alexander Chernyakhovsky)
Sun May 12 21:03:15 2013
Date: Sun, 12 May 2013 21:03:07 -0400
From: Alexander Chernyakhovsky <achernya@MIT.EDU>
Message-Id: <201305130103.r4D137U0024271@drugstore.mit.edu>
To: source-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Author: achernya
Date: 2013-05-12 21:03:07 -0400 (Sun, 12 May 2013)
New Revision: 25988
Added:
trunk/third/lam/debian/control
trunk/third/lam/debian/patches/
trunk/third/lam/debian/patches/linux-compatibility.patch
trunk/third/lam/debian/patches/series
trunk/third/lam/debian/source/
trunk/third/lam/debian/source/format
Removed:
trunk/third/lam/debian/control.in
Modified:
trunk/third/lam/Makefile
trunk/third/lam/debian/changelog
trunk/third/lam/debian/rules
trunk/third/lam/lam.1
trunk/third/lam/lam.c
Log:
In lam:
* Import FreeBSD lam (Sun Nov 6 18:49:41 2011 +0000)
* Switch to dh7
* Switch to source format 3.0 (quilt)
Modified: trunk/third/lam/Makefile
===================================================================
--- trunk/third/lam/Makefile 2013-05-12 23:31:17 UTC (rev 25987)
+++ trunk/third/lam/Makefile 2013-05-13 01:03:07 UTC (rev 25988)
@@ -3,6 +3,7 @@
SHELL=/bin/sh
ATHBINDIR=/usr/bin
ATHMANDIR=/usr/share/man
+LIBS=-lbsd
all: lam
Modified: trunk/third/lam/debian/changelog
===================================================================
--- trunk/third/lam/debian/changelog 2013-05-12 23:31:17 UTC (rev 25987)
+++ trunk/third/lam/debian/changelog 2013-05-13 01:03:07 UTC (rev 25988)
@@ -1,9 +1,15 @@
debathena-lam (10.0.4) UNRELEASED; urgency=low
+ [ Jonathon Reed ]
* Bump debian/compat to 6
- -- Jonathan Reed <jdreed@mit.edu> Sun, 01 Jul 2012 12:21:34 -0400
+ [ Alexander Chernyakhovsky ]
+ * Import FreeBSD lam (Sun Nov 6 18:49:41 2011 +0000)
+ * Switch to dh7
+ * Switch to source format 3.0 (quilt)
+ -- Jonathan Reed <jdreed@mit.edu> Sun, 12 May 2013 21:02:49 -0400
+
debathena-lam (10.0.3) unstable; urgency=low
* Flesh out the description to avoid the Lintian error
Copied: trunk/third/lam/debian/control (from rev 25984, trunk/third/lam/debian/control.in)
===================================================================
--- trunk/third/lam/debian/control (rev 0)
+++ trunk/third/lam/debian/control 2013-05-13 01:03:07 UTC (rev 25988)
@@ -0,0 +1,15 @@
+Source: debathena-lam
+Section: debathena/text
+Priority: extra
+Maintainer: Debathena Project <debathena@mit.edu>
+Build-Depends: debhelper (>= 7), libbsd-dev
+Standards-Version: 3.9.3
+
+Package: debathena-lam
+Architecture: any
+Provides: lam
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: "laminate" files by putting them into multi-column format
+ This utility combines files into columns, somewhat like paste(1).
+ Debathena provides it because it has traditionally been provided on
+ Athena and is not available in Debian.
Added: trunk/third/lam/debian/patches/linux-compatibility.patch
===================================================================
--- trunk/third/lam/debian/patches/linux-compatibility.patch (rev 0)
+++ trunk/third/lam/debian/patches/linux-compatibility.patch 2013-05-13 01:03:07 UTC (rev 25988)
@@ -0,0 +1,18 @@
+--- a/lam.c
++++ b/lam.c
+@@ -39,7 +39,6 @@
+ #endif
+ #endif /* not lint */
+ #include <sys/cdefs.h>
+-__FBSDID("$FreeBSD$");
+
+ /*
+ * lam - laminate files
+@@ -51,6 +50,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <bsd/string.h>
+
+ #define MAXOFILES 20
+ #define BIGBUFSIZ 5 * BUFSIZ
Added: trunk/third/lam/debian/patches/series
===================================================================
--- trunk/third/lam/debian/patches/series (rev 0)
+++ trunk/third/lam/debian/patches/series 2013-05-13 01:03:07 UTC (rev 25988)
@@ -0,0 +1 @@
+linux-compatibility.patch
Modified: trunk/third/lam/debian/rules
===================================================================
--- trunk/third/lam/debian/rules 2013-05-12 23:31:17 UTC (rev 25987)
+++ trunk/third/lam/debian/rules 2013-05-13 01:03:07 UTC (rev 25988)
@@ -1,6 +1,3 @@
#!/usr/bin/make -f
-
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/makefile.mk
-
-DEB_MAKE_INSTALL_TARGET = install DESTDIR=$(DEB_DESTDIR)
+%:
+ dh $@
Added: trunk/third/lam/debian/source/format
===================================================================
--- trunk/third/lam/debian/source/format (rev 0)
+++ trunk/third/lam/debian/source/format 2013-05-13 01:03:07 UTC (rev 25988)
@@ -0,0 +1 @@
+3.0 (quilt)
Modified: trunk/third/lam/lam.1
===================================================================
--- trunk/third/lam/lam.1 2013-05-12 23:31:17 UTC (rev 25987)
+++ trunk/third/lam/lam.1 2013-05-13 01:03:07 UTC (rev 25988)
@@ -1,5 +1,3 @@
-.\" $NetBSD: lam.1,v 1.2 1994/11/14 20:27:40 jtc Exp $
-.\"
.\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@@ -11,7 +9,7 @@
.\" 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.
-.\" 3. Neither the name of the University nor the names of its contributors
+.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
@@ -28,98 +26,117 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)lam.1 8.1 (Berkeley) 6/6/93
+.\" $FreeBSD$
.\"
-.TH LAM 1 "June 6, 1993"
-.UC 4
-.SH NAME
-lam \- laminate files
-.SH SYNOPSIS
-.B lam [ \-[fp]
-min.max
-.B ] [ \-s
-sepstring
-.B ] [ \-t
-c
-.B ]
-file ...
-.SH DESCRIPTION
-.I Lam
-copies the named files side by side onto the standard output.
+.Dd August 12, 2004
+.Dt LAM 1
+.Os
+.Sh NAME
+.Nm lam
+.Nd laminate files
+.Sh SYNOPSIS
+.Nm
+.Op Fl f Ar min . Ns Ar max
+.Op Fl s Ar sepstring
+.Op Fl t Ar c
+.Ar
+.Nm
+.Op Fl p Ar min . Ns Ar max
+.Op Fl s Ar sepstring
+.Op Fl t Ar c
+.Ar
+.Sh DESCRIPTION
The
-.IR n -th
+.Nm
+utility copies the named files side by side onto the standard output.
+The
+.Em n-th
input lines from the input
-.IR file s
+.Ar files
are considered fragments of the single long
-.IR n -th
+.Em n-th
output line into which they are assembled.
The name `\fB\-\fP' means the standard input, and may be repeated.
-.PP
+.Pp
Normally, each option affects only the
-.I file
+.Ar file
after it.
If the option letter is capitalized it affects all subsequent files
until it appears again uncapitalized.
-The options are described below.
-.IP \fB\-f\fP\ min.max
+The options are described below:
+.Bl -tag -width indent
+.It Fl f Ar min . Ns Ar max
Print line fragments according to the format string
-.IR min.max ,
+.Ar min . Ns Ar max ,
where
-.I min
+.Ar min
is the minimum field width and
-.I max
+.Ar max
the maximum field width.
If
-.I min
+.Ar min
begins with a zero, zeros will be added to make up the field width,
and if it begins with a `\-', the fragment will be left-adjusted
within the field.
-.IP \fB\-p\fP\ min.max
-Like \fB\-f\fP,
+.It Fl p Ar min . Ns Ar max
+Like
+.Fl f ,
but pad this file's field when end-of-file is reached
and other files are still active.
-.IP \fB\-s\fP\ sepstring
+.It Fl s Ar sepstring
Print
-.I sepstring
+.Ar sepstring
before printing line fragments from the next file.
This option may appear after the last file.
-.IP \fB\-t\fP\ c
+.It Fl t Ar c
The input line terminator is
-.I c
+.Ar c
instead of a newline.
The newline normally appended to each output line is omitted.
-.PP
+.El
+.Pp
To print files simultaneously for easy viewing use
-.IR pr (1).
-.SH EXAMPLES
-.de IC
-.IP
-.ss 36
-.ft B
-..
-.de NC
-.br
-.ss 12
-.PP
-..
-.PP
+.Xr pr 1 .
+.Sh EXAMPLES
The command
-.IC
+.Bd -literal
lam file1 file2 file3 file4
-.NC
+.Ed
+.Pp
joins 4 files together along each line.
To merge the lines from four different files use
-.IC
+.Bd -literal
lam file1 \-S "\\
-.br
" file2 file3 file4
-.NC
+.Ed
+.Pp
Every 2 lines of a file may be joined on one line with
-.IC
+.Bd -literal
lam \- \- < file
-.NC
+.Ed
+.Pp
and a form letter with substitutions keyed by `@' can be done with
-.IC
+.Bd -literal
lam \-t @ letter changes
-.NC
-.SH SEE ALSO
-join(1), pr(1), printf(3)
+.Ed
+.Sh SEE ALSO
+.Xr join 1 ,
+.Xr paste 1 ,
+.Xr pr 1 ,
+.Xr printf 3
+.Sh STANDARDS
+Some of the functionality of
+.Nm
+is standardized as the
+.Xr paste 1
+utility by
+.St -p1003.2 .
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Bx 4.2 .
+.Sh BUGS
+The
+.Nm
+utility does not recognize multibyte characters.
Modified: trunk/third/lam/lam.c
===================================================================
--- trunk/third/lam/lam.c 2013-05-12 23:31:17 UTC (rev 25987)
+++ trunk/third/lam/lam.c 2013-05-13 01:03:07 UTC (rev 25988)
@@ -1,5 +1,3 @@
-/* $NetBSD: lam.c,v 1.2 1994/11/14 20:27:42 jtc Exp $ */
-
/*-
* Copyright (c) 1993
* The Regents of the University of California. All rights reserved.
@@ -12,7 +10,7 @@
* 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.
- * 3. Neither the name of the University nor the names of its contributors
+ * 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -30,7 +28,7 @@
*/
#ifndef lint
-static char copyright[] =
+static const char copyright[] =
"@(#) Copyright (c) 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
@@ -39,50 +37,53 @@
#if 0
static char sccsid[] = "@(#)lam.c 8.1 (Berkeley) 6/6/93";
#endif
-static char rcsid[] = "$NetBSD: lam.c,v 1.2 1994/11/14 20:27:42 jtc Exp $";
#endif /* not lint */
+#include <sys/cdefs.h>
/*
* lam - laminate files
* Author: John Kunze, UCB
*/
+#include <ctype.h>
+#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <bsd/string.h>
#define MAXOFILES 20
#define BIGBUFSIZ 5 * BUFSIZ
-struct openfile { /* open file structure */
+static struct openfile { /* open file structure */
FILE *fp; /* file pointer */
short eof; /* eof flag */
short pad; /* pad flag for missing columns */
char eol; /* end of line character */
- char *sepstring; /* string to print before each line */
- char *format; /* printf(3) style string spec. */
+ const char *sepstring; /* string to print before each line */
+ const char *format; /* printf(3) style string spec. */
} input[MAXOFILES];
-int morefiles; /* set by getargs(), changed by gatherline() */
-int nofinalnl; /* normally append \n to each output line */
-char line[BIGBUFSIZ];
-char *linep;
+static int morefiles; /* set by getargs(), changed by gatherline() */
+static int nofinalnl; /* normally append \n to each output line */
+static char line[BIGBUFSIZ];
+static char *linep;
-void error(char *, char *);
-char *gatherline(struct openfile *);
-void getargs(char *[]);
-char *pad(struct openfile *);
+static char *gatherline(struct openfile *);
+static void getargs(char *[]);
+static char *pad(struct openfile *);
+static void usage(void);
int
-main(argc, argv)
- int argc;
- char *argv[];
+main(int argc, char *argv[])
{
- register struct openfile *ip;
+ struct openfile *ip;
+ if (argc == 1)
+ usage();
getargs(argv);
if (!morefiles)
- error("lam - laminate files", "");
+ usage();
for (;;) {
linep = line;
for (ip = input; ip->fp != NULL; ip++)
@@ -96,13 +97,11 @@
}
}
-void
-getargs(av)
- char *av[];
+static void
+getargs(char *av[])
{
- register struct openfile *ip = input;
- register char *p;
- register char *c;
+ struct openfile *ip = input;
+ char *p, *c;
static char fmtbuf[BUFSIZ];
char *fmtp = fmtbuf;
int P, S, F, T;
@@ -110,12 +109,12 @@
P = S = F = T = 0; /* capitalized options */
while ((p = *++av) != NULL) {
if (*p != '-' || !p[1]) {
- morefiles++;
+ if (++morefiles >= MAXOFILES)
+ errx(1, "too many input files");
if (*p == '-')
ip->fp = stdin;
else if ((ip->fp = fopen(p, "r")) == NULL) {
- perror(p);
- exit(1);
+ err(1, "%s", p);
}
ip->pad = P;
if (!ip->sepstring)
@@ -127,40 +126,46 @@
ip++;
continue;
}
- switch (*(c = ++p) | 040) {
+ c = ++p;
+ switch (tolower((unsigned char)*c)) {
case 's':
if (*++p || (p = *++av))
ip->sepstring = p;
else
- error("Need string after -%s", c);
+ usage();
S = (*c == 'S' ? 1 : 0);
break;
case 't':
if (*++p || (p = *++av))
ip->eol = *p;
else
- error("Need character after -%s", c);
+ usage();
T = (*c == 'T' ? 1 : 0);
nofinalnl = 1;
break;
case 'p':
ip->pad = 1;
P = (*c == 'P' ? 1 : 0);
+ /* FALLTHROUGH */
case 'f':
F = (*c == 'F' ? 1 : 0);
if (*++p || (p = *++av)) {
fmtp += strlen(fmtp) + 1;
- if (fmtp > fmtbuf + BUFSIZ)
- error("No more format space", "");
- sprintf(fmtp, "%%%ss", p);
+ if (fmtp >= fmtbuf + sizeof(fmtbuf))
+ errx(1, "no more format space");
+ /* restrict format string to only valid width formatters */
+ if (strspn(p, "-.0123456789") != strlen(p))
+ errx(1, "invalid format string `%s'", p);
+ if (snprintf(fmtp, fmtbuf + sizeof(fmtbuf) - fmtp, "%%%ss", p)
+ >= fmtbuf + sizeof(fmtbuf) - fmtp)
+ errx(1, "no more format space");
ip->format = fmtp;
}
else
- error("Need string after -%s", c);
+ usage();
break;
default:
- error("What do you mean by -%s?", c);
- break;
+ usage();
}
}
ip->fp = NULL;
@@ -168,31 +173,28 @@
ip->sepstring = "";
}
-char *
-pad(ip)
- struct openfile *ip;
+static char *
+pad(struct openfile *ip)
{
- register char *p = ip->sepstring;
- register char *lp = linep;
+ char *lp = linep;
- while (*p)
- *lp++ = *p++;
+ strlcpy(lp, ip->sepstring, line + sizeof(line) - lp);
+ lp += strlen(lp);
if (ip->pad) {
- sprintf(lp, ip->format, "");
+ snprintf(lp, line + sizeof(line) - lp, ip->format, "");
lp += strlen(lp);
}
return (lp);
}
-char *
-gatherline(ip)
- struct openfile *ip;
+static char *
+gatherline(struct openfile *ip)
{
char s[BUFSIZ];
- register int c;
- register char *p;
- register char *lp = linep;
- char *end = s + BUFSIZ;
+ int c;
+ char *p;
+ char *lp = linep;
+ char *end = s + sizeof(s) - 1;
if (ip->eof)
return (pad(ip));
@@ -207,28 +209,18 @@
morefiles--;
return (pad(ip));
}
- p = ip->sepstring;
- while (*p)
- *lp++ = *p++;
- sprintf(lp, ip->format, s);
+ strlcpy(lp, ip->sepstring, line + sizeof(line) - lp);
lp += strlen(lp);
+ snprintf(lp, line + sizeof(line) - lp, ip->format, s);
+ lp += strlen(lp);
return (lp);
}
-void
-error(msg, s)
- char *msg, *s;
+static void
+usage(void)
{
- fprintf(stderr, "lam: ");
- fprintf(stderr, msg, s);
- fprintf(stderr,
-"\nUsage: lam [ -[fp] min.max ] [ -s sepstring ] [ -t c ] file ...\n");
- if (strncmp("lam - ", msg, 6) == 0)
- fprintf(stderr, "Options:\n\t%s\t%s\t%s\t%s\t%s",
- "-f min.max field widths for file fragments\n",
- "-p min.max like -f, but pad missing fragments\n",
- "-s sepstring fragment separator\n",
-"-t c input line terminator is c, no \\n after output lines\n",
- "Capitalized options affect more than one file.\n");
+ fprintf(stderr, "%s\n%s\n",
+"usage: lam [ -f min.max ] [ -s sepstring ] [ -t c ] file ...",
+" lam [ -p min.max ] [ -s sepstring ] [ -t c ] file ...");
exit(1);
}