printf("%lu/%lu\t%s\n", (u_long)tstat->st_last_ckp.file, (u_long)tstat->st_last_ckp.offset, p); p = tstat->st_pending_ckp.file == 0 ?
printf("%lu/%lu\t%s\n", (u_long)sp->st_last_ckp.file, (u_long)sp->st_last_ckp.offset, p); p = sp->st_pending_ckp.file == 0 ?
txn_stats(dbenv)	DB_ENV *dbenv;{	DB_TXN_STAT *tstat;	u_int32_t i;	const char *p;	if (txn_stat(dbenv->tx_info, &tstat, NULL))		err(1, NULL);	p = tstat->st_last_ckp.file == 0 ?	    "No checkpoint LSN." : "File/offset for last checkpoint LSN.";	printf("%lu/%lu\t%s\n", (u_long)tstat->st_last_ckp.file,	    (u_long)tstat->st_last_ckp.offset, p);	p = tstat->st_pending_ckp.file == 0 ?	    "No pending checkpoint LSN." :	    "File/offset for last pending checkpoint LSN.";	printf("%lu/%lu\t%s\n",	    (u_long)tstat->st_pending_ckp.file,	    (u_long)tstat->st_pending_ckp.offset, p);	if (tstat->st_time_ckp == 0)		printf("0\tNo checkpoint timestamp.\n");	else		printf("%.24s\tCheckpoint timestamp.\n",		    ctime(&tstat->st_time_ckp));	printf("%lx\tLast transaction ID allocated.\n",	    (u_long)tstat->st_last_txnid);	printf("%lu\tMaximum number of active transactions.\n",	    (u_long)tstat->st_maxtxns);	printf("%lu\tNumber of transactions begun.\n",	    (u_long)tstat->st_nbegins);	printf("%lu\tNumber of transactions aborted.\n",	    (u_long)tstat->st_naborts);	printf("%lu\tNumber of transactions committed.\n",	    (u_long)tstat->st_ncommits);	printf("%lu\tActive transactions.\n", (u_long)tstat->st_nactive);	qsort(tstat->st_txnarray,	    tstat->st_nactive, sizeof(tstat->st_txnarray[0]), txn_compare);	for (i = 0; i < tstat->st_nactive; ++i)		printf("\tid: %lx; initial LSN file/offest %lu/%lu\n",		    (u_long)tstat->st_txnarray[i].txnid,		    (u_long)tstat->st_txnarray[i].lsn.file,		    (u_long)tstat->st_txnarray[i].lsn.offset);}