X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=cprogs%2Facctdump.c;h=b9040ac710f91eebe6a83af73262a2027a4e4e29;hp=0cd7a4e566b6acabf37c809d3cc5651f0bcaaa14;hb=a30213491e687db44dbf5ee15f35932bf8b82394;hpb=368f5cd303917d14b2f253bb24a1e34fe3cf9101 diff --git a/cprogs/acctdump.c b/cprogs/acctdump.c index 0cd7a4e..b9040ac 100644 --- a/cprogs/acctdump.c +++ b/cprogs/acctdump.c @@ -205,17 +205,26 @@ static void printrecord(const struct_acct *as, const char *filename) { struct passwd *pw; struct group *gr; time_t btime; + char commbuf[sizeof(as->ac_comm)]; if (raw) { printf("%10lu ",(unsigned long)as->ac_btime); } else { btime= as->ac_btime; tm= localtime(&btime); - strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S",tm); buf[sizeof(buf)-1]= 0; + if (tm) { + strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S",tm); buf[sizeof(buf)-1]= 0; + } else { + snprintf(buf,sizeof(buf),"@%lu",(unsigned long)btime); + } printf("%19s ",buf); } - - printf("%-16.16s ", as->ac_comm); + + for (i=0; iac_comm); i++) { + int c=as->ac_comm[i]; + commbuf[i]= ((c!=0 && c<=32) || c>=127) ? '?' : c; + } + printf("%-*.*s ", (int)sizeof(commbuf),(int)sizeof(commbuf), commbuf); pw= raw ? 0 : getpwuid(as->ac_uid); if (pw) printf("%-8s ",pw->pw_name);