Plan 9 from Bell Labs’s /usr/web/sources/plan9/sys/src/cmd/tarsplit/tarcat.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


/*
 * tarcat - concatenate tar archives into a single tar archive
 */

#include <u.h>
#include <libc.h>
#include <ctype.h>
#include "tar.h"

enum {
	Stdin,
	Stdout,
};

static int debug;

/* don't copy zero blocks at end */
static void
catenate(int in, char *inname)
{
	vlong len;
	static Hblock hdr;
	Hblock *hp = &hdr;

	if (debug)
		fprint(2, "%s: reading %s\n", inname, argv0);
	while (getdir(hp, in, &len)) {
		writetar(Stdout, (char *)hp, Tblock);  /* write dir block */
		passtar(hp, in, Stdout, len);
	}
}

void
main(int argc, char **argv)
{
	int errflg = 0;

	ARGBEGIN {
	case 'd':
		++debug;
		break;
	default:
		errflg++;
		break;
	} ARGEND
	if (errflg) {
		fprint(2, "usage: %s [-d] [file]...\n", argv0);
		exits("usage");
	}

	if (argc <= 0)
		catenate(Stdin, "/fd/0");
	else
		for (; argc-- > 0; argv++) {
			int in = open(argv[0], OREAD);

			if (in < 0)
				sysfatal("%s: %r", argv[0]);
			catenate(in, argv[0]);
			close(in);
		}
	closeout(Stdout, "/fd/1", 0);
	exits(0);
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].