/*
* Copyright (c) 2002 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.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: falign.c,v 1.2 2002/05/09 16:35:30 ca Exp $")
#include <stdlib.h>
#include <string.h>
#include "sm/io.h"
#include "sm/assert.h"
#include "io-int.h"
/*
** SM_IO_FALIGN -- make sure that file buffer is aligned by n
**
** This routine can be used to move the file write pointer for
** fixed size records.
**
** Parameters:
** fp -- the file pointer to write to
** n -- alignment
**
** Returns:
** usual sm_error code
*/
#define ALIGN_N(p, n) (((p) + ((n) - 1)) & ~((n) - 1)) - (p)
#define RNDUP_N(x, n) ((((x) + (n) - 1) / (n)) * (n))
sm_ret_T
sm_io_falign(sm_file_T *fp, size_t n)
{
size_t len;
int a;
a = (int) (f_p(*fp) - f_bfbase(*fp));
len = ALIGN_N(a, n);
if (len == 0)
return SM_SUCCESS;
if (f_flags(*fp) & SMWR)
return sm_io_fpad(fp, len);
else
return sm_io_fskip(fp, len);
}
syntax highlighted by Code2HTML, v. 0.9.1