/*
* Copyright (c) 2004 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: rdwrcounter.c,v 1.1 2004/06/09 20:57:52 ca Exp $
*/
#include "sm/assert.h"
/*
** rdwrcounter -- increment a counter in a file
**
** Parameters:
** prg -- name of program (of which this is part)
** cntfn -- file name to use
** pcur -- (pointer to) current value of counter (output)
**
** Returns:
** 0 if ok, EX_USAGE otherwise
*/
static int
rdwrcounter(char *prg, char *cntfn, int *pcur)
{
int i;
FILE *cntfp;
SM_ASSERT(prg != NULL);
SM_ASSERT(cntfn != NULL);
SM_ASSERT(pcur != NULL);
/* get current invocation counter */
cntfp = fopen(cntfn, "r");
if (cntfp == NULL)
{
fprintf(stderr, "%s: can't open \"%s\" for reading %d\n",
prg, cntfn, errno);
return EX_USAGE;
}
i = fscanf(cntfp, "%d", pcur);
if (i != 1)
*pcur = 0;
fclose(cntfp);
cntfp = fopen(cntfn, "w");
if (cntfp == NULL)
{
fprintf(stderr, "%s: can't open \"%s\" for writing %d\n",
prg, cntfn, errno);
return EX_USAGE;
}
/* increase invocation counter */
fprintf(cntfp, "%d\n", *pcur + 1);
fclose(cntfp);
cntfp = NULL;
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1