00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "db_config.h"
00011
00012 #ifndef NO_SYSTEM_INCLUDES
00013 #include <sys/types.h>
00014
00015 #include <string.h>
00016 #endif
00017
00018 #include "db_int.h"
00019
00020
00021
00022
00023
00024
00025
00026 int
00027 __os_truncate(dbenv, fhp, pgno, pgsize)
00028 DB_ENV *dbenv;
00029 DB_FH *fhp;
00030 db_pgno_t pgno;
00031 u_int32_t pgsize;
00032 {
00033 off_t offset;
00034 int ret;
00035
00036
00037
00038
00039
00040 offset = (off_t)pgsize * pgno;
00041
00042 if (DB_GLOBAL(j_ftruncate) != NULL)
00043 ret = DB_GLOBAL(j_ftruncate)(fhp->fd, offset);
00044 else {
00045 #ifdef HAVE_FTRUNCATE
00046 RETRY_CHK((ftruncate(fhp->fd, offset)), ret);
00047 #else
00048 ret = DB_OPNOTSUP;
00049 #endif
00050 }
00051
00052 if (ret != 0)
00053 __db_err(dbenv,
00054 "ftruncate: %lu: %s", (u_long)offset, strerror(ret));
00055
00056 return (ret);
00057 }