shithub: scc

ref: c02ebef74e491de7e34a681d23bbcde1ee08f5b5
dir: /lib/scc/war.c/

View raw version
static char sccsid[] = "@(#) ./lib/scc/war.c";

#include <assert.h>
#include <stdio.h>

#include "../../inc/ar.h"

int
wrarhdr(FILE *fp, struct arhdr *hdr)
{
	int len;

	len = fprintf(fp,
	              "%-16s%-12llu%-6u%-6u%-8o%-10llu`\n",
	              hdr->name,
	              hdr->time,
	              hdr->uid, hdr->gid,
	              hdr->mode,
	              hdr->size);
	assert(len== ARHDR_SIZ);

	return (feof(fp)) ? EOF : len;
}

int
wrarfile(FILE *fo, struct arhdr *hdr)
{
	FILE *fi;
	int c;

	if ((fi = fopen(hdr->name, "rb")) == NULL)
		return -1;
	while ((c = getc(fi)) != EOF)
		putc(c, fo);
	if (hdr->size & 1)
		putc('\n', fo);
	return (fclose(fi) == EOF) ? -1 : 0;
}