acctmerg.c revision 414388d7cb2ee98771e2ac7c2338c460abd44304
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings/*
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * CDDL HEADER START
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings *
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * The contents of this file are subject to the terms of the
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * Common Development and Distribution License, Version 1.0 only
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * (the "License"). You may not use this file except in compliance
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * with the License.
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings *
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * or http://www.opensolaris.org/os/licensing.
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * See the License for the specific language governing permissions
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * and limitations under the License.
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings *
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * When distributing Covered Code, include this CDDL HEADER in each
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * If applicable, add the following below this CDDL HEADER, with the
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * fields enclosed by brackets "[]" replaced with your own identifying
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna * information: Portions Copyright [yyyy] [name of copyright owner]
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings *
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna * CDDL HEADER END
1bc34195922e97727f62045e776cf103d36199deDavid Luna */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna/* All Rights Reserved */
ac9dd9e75a80689b7521adce2fe76501a4b7d707Peter Major
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings/*
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * Use is subject to license terms.
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings#pragma ident "%Z%%M% %I% %E% SMI"
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
716579c1eaca460b012b046afe7c50107eff7081David Luna/*
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * acctmerg [-a] [-i] [-p] [-t] [-u] [-v] [file...]
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * -a output in tacct.h/ascii (instead of tacct.h)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * -i input is in tacct.h/ascii (instead of tacct.h)
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna * -p print input files with no processing
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * -t output single record that totals all input
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * -u summarize by uid, rather than uid/name
716579c1eaca460b012b046afe7c50107eff7081David Luna * -v output in verbose tacct.h/ascii
716579c1eaca460b012b046afe7c50107eff7081David Luna * reads std input and 0-NFILE files, all in tacct.h format,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * sorted by uid/name.
37183f9f7fc44e4a154cfc28805bf2719e13f6a6Diego Colantoni * merge/adds all records with same uid/name (or same uid if -u,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * or all records if -t], writes to std. output
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * (still in tacct.h format)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * note that this can be used to summarize the std input
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings#include <stdio.h>
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna#include <sys/types.h>
ac9dd9e75a80689b7521adce2fe76501a4b7d707Peter Major#include <sys/param.h>
ac9dd9e75a80689b7521adce2fe76501a4b7d707Peter Major#include "acctdef.h"
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings#include <stdlib.h>
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Lunaint nfile; /* index of last used in fl */
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid LunaFILE *fl[NFILE] = {stdin};
716579c1eaca460b012b046afe7c50107eff7081David Luna
716579c1eaca460b012b046afe7c50107eff7081David Lunastruct tacct tb[NFILE]; /* current record from each file */
716579c1eaca460b012b046afe7c50107eff7081David Lunastruct tacct tt = {
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna 0,
1bc34195922e97727f62045e776cf103d36199deDavid Luna "TOTAL"
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings};
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Lunaint asciiout;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsint asciiinp;
716579c1eaca460b012b046afe7c50107eff7081David Lunaint printonly;
716579c1eaca460b012b046afe7c50107eff7081David Lunaint totalonly;
716579c1eaca460b012b046afe7c50107eff7081David Lunaint uidsum;
716579c1eaca460b012b046afe7c50107eff7081David Lunaint verbose;
716579c1eaca460b012b046afe7c50107eff7081David Luna
716579c1eaca460b012b046afe7c50107eff7081David Lunaint exitcode = 0;
716579c1eaca460b012b046afe7c50107eff7081David Luna
716579c1eaca460b012b046afe7c50107eff7081David Lunavoid prtacct(struct tacct *);
716579c1eaca460b012b046afe7c50107eff7081David Lunastruct tacct *getleast(void);
716579c1eaca460b012b046afe7c50107eff7081David Lunavoid output(struct tacct *);
716579c1eaca460b012b046afe7c50107eff7081David Lunavoid tacctadd(struct tacct *, struct tacct *);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsvoid sumcurr(struct tacct *);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsint
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Lunamain(int argc, char **argv)
4bbdf963522fa870a0d52637d8e88d2a7a31002cDavid Luna{
4bbdf963522fa870a0d52637d8e88d2a7a31002cDavid Luna int i;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna struct tacct *tp;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna while (--argc > 0) {
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna if (**++argv == '-')
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna switch (*++*argv) {
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna case 'a':
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna asciiout++;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna continue;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna case 'i':
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna asciiinp++;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna continue;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna case 'p':
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna printonly++;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna continue;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna case 't':
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna totalonly++;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna continue;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna case 'u':
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna uidsum++;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna continue;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings case 'v':
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna verbose++;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings asciiout++;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings continue;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings }
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings else {
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (++nfile >= NFILE) {
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings fprintf(stderr, "acctmerg: >%d files\n", NFILE);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings exit(1);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings }
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if ((fl[nfile] = fopen(*argv, "r")) == NULL) {
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna fprintf(stderr, "acctmerg: can't open %s\n", *argv);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings exitcode = 1;
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna /* exit(1); */
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna }
1bc34195922e97727f62045e776cf103d36199deDavid Luna }
1bc34195922e97727f62045e776cf103d36199deDavid Luna }
1bc34195922e97727f62045e776cf103d36199deDavid Luna
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna if (printonly) {
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna for (i = 0; i <= nfile; i++)
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna while (getnext(i))
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna prtacct(&tb[i]);
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna exit(exitcode);
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna }
716579c1eaca460b012b046afe7c50107eff7081David Luna
c45f849ecddd875604998c51bda1f1b14ae86f98Peter Major for (i = 0; i <= nfile; i++)
c45f849ecddd875604998c51bda1f1b14ae86f98Peter Major if(getnext(i) == 0) {
716579c1eaca460b012b046afe7c50107eff7081David Luna fprintf(stderr,"acctmerg: read error file %d. File may be empty.\n", i);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings exitcode = 2;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
1bc34195922e97727f62045e776cf103d36199deDavid Luna }
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings while ((tp = getleast()) != NULL) /* get least uid of all files, */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings sumcurr(tp); /* sum all entries for that uid, */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (totalonly) /* and write the 'summed' record */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings output(&tt);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna exit(exitcode);
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna}
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings/*
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna * getleast returns ptr to least (lowest uid) element of current
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna * avail, NULL if none left; always returns 1st of equals
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings */
1bc34195922e97727f62045e776cf103d36199deDavid Lunastruct tacct *
1bc34195922e97727f62045e776cf103d36199deDavid Lunagetleast(void)
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna{
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna struct tacct *tp, *least;
1bc34195922e97727f62045e776cf103d36199deDavid Luna
1bc34195922e97727f62045e776cf103d36199deDavid Luna least = NULL;
1bc34195922e97727f62045e776cf103d36199deDavid Luna for (tp = tb; tp <= &tb[nfile]; tp++) {
1bc34195922e97727f62045e776cf103d36199deDavid Luna if (tp->ta_name[0] == '\0')
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings continue;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna if (least == NULL ||
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna tp->ta_uid < least->ta_uid ||
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna ((tp->ta_uid == least->ta_uid) &&
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna !uidsum &&
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna (strncmp(tp->ta_name, least->ta_name, NSZ) < 0)))
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna least = tp;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna }
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings return(least);
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna}
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna/*
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna * sumcurr sums all entries with same uid/name (into tp->tacct record)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * writes it out, gets new entry
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsvoid
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Lunasumcurr(struct tacct *tp)
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna{
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings struct tacct tc;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings char *memcpy();
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings memcpy(&tc, tp, sizeof(struct tacct));
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna tacctadd(&tt, tp); /* gets total of all uids */
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna getnext(tp-&tb[0]); /* get next one in same file */
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna while (tp <= &tb[nfile])
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna if (tp->ta_name[0] != '\0' &&
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna tp->ta_uid == tc.ta_uid &&
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna (uidsum || EQN(tp->ta_name, tc.ta_name))) {
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tacctadd(&tc, tp);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tacctadd(&tt, tp);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings getnext(tp-&tb[0]);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings } else
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp++; /* look at next file */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (!totalonly)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings output(&tc);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings}
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsvoid
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingstacctadd(struct tacct *t1, struct tacct *t2)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings{
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings t1->ta_cpu[0] = t1->ta_cpu[0] + t2->ta_cpu[0];
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings t1->ta_cpu[1] = t1->ta_cpu[1] + t2->ta_cpu[1];
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings t1->ta_kcore[0] = t1->ta_kcore[0] + t2->ta_kcore[0];
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings t1->ta_kcore[1] = t1->ta_kcore[1] + t2->ta_kcore[1];
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings t1->ta_con[0] = t1->ta_con[0] + t2->ta_con[0];
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna t1->ta_con[1] = t1->ta_con[1] + t2->ta_con[1];
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna t1->ta_du = t1->ta_du + t2->ta_du;
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna t1->ta_pc += t2->ta_pc;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna t1->ta_sc += t2->ta_sc;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna t1->ta_dc += t2->ta_dc;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna t1->ta_fee += t2->ta_fee;
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna}
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Lunavoid
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Lunaoutput(struct tacct *tp)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings{
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (asciiout)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings prtacct(tp);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings else
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings fwrite(tp, sizeof(*tp), 1, stdout);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings}
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings/*
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings * getnext reads next record from stream i, returns 1 if one existed
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings */
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsint
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingsgetnext(int i)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings{
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings struct tacct *tp;
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp = &tb[i];
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp->ta_name[0] = '\0';
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (fl[i] == NULL)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings return(0);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (asciiinp) {
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (fscanf(fl[i],
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings "%ld\t%s\t%e %e %e %e %e %e %e %lu\t%hu\t%hu\t%hu",
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_uid,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp->ta_name,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_cpu[0], &tp->ta_cpu[1],
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_kcore[0], &tp->ta_kcore[1],
8279d2cb2de322c2dd643c10b0722a32f5eca939David Luna &tp->ta_con[0], &tp->ta_con[1],
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_du,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_pc,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_sc,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_dc,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings &tp->ta_fee) != EOF)
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings return(1);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings } else {
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings if (fread(tp, sizeof(*tp), 1, fl[i]) == 1)
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna return(1);
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings }
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna fclose(fl[i]);
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna fl[i] = NULL;
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna return(0);
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna}
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Lunachar fmt[] = "%ld\t%.*s\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%lu\t%hu\t%hu\t%hu\n";
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbingschar fmtv[] = "%ld\t%.*s\t%e %e %e %e %e %e %e %lu %hu\t%hu\t%hu\n";
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Lunavoid
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Lunaprtacct(struct tacct *tp)
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna{
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna printf(verbose ? fmtv : fmt,
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna tp->ta_uid,
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna OUTPUT_NSZ,
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna tp->ta_name,
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna tp->ta_cpu[0], tp->ta_cpu[1],
37183f9f7fc44e4a154cfc28805bf2719e13f6a6Diego Colantoni tp->ta_kcore[0], tp->ta_kcore[1],
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna tp->ta_con[0], tp->ta_con[1],
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna tp->ta_du,
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna tp->ta_pc,
cc6ccc94bd50cdd55be1e94c95826b7820dde91cDavid Luna tp->ta_sc,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp->ta_dc,
d3017d563ca61f904d4baff6fcd4de8e0f748a82Ken Stubbings tp->ta_fee);
4f39fae2f8671f7389a26412a6203c455b80f06dDavid Luna}
fcd6acb1b62bf3deb3c74185be351e86cf636325David Luna