Mercurial > hg > octave-kai > gnulib-hg
annotate lib/fileblocks.c @ 2427:28f8722c956c
*** empty log message ***
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 15 Apr 2000 21:58:37 +0000 |
parents | d562a3cf9041 |
children | 5994c6f939c5 |
rev | line source |
---|---|
5 | 1 /* Convert file size to number of blocks on System V-like machines. |
1997
d562a3cf9041
Use HAVE_STRUCT_STAT_ST_BLOCKS, not deprecated HAVE_ST_BLOCKS.
Jim Meyering <jim@meyering.net>
parents:
1557
diff
changeset
|
2 Copyright (C) 1990, 1997, 1998, 1999 Free Software Foundation, Inc. |
5 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
650
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
599
diff
changeset
|
15 along with this program; if not, write to the Free Software Foundation, |
b4ef1c1a0171
update FSF address in copyright
Jim Meyering <jim@meyering.net>
parents:
599
diff
changeset
|
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
5 | 17 |
18 /* Written by Brian L. Matthews, blm@6sceng.UUCP. */ | |
19 | |
1278
9ad625a30b7d
Use #if, not #ifdef with HAVE_ macros
Jim Meyering <jim@meyering.net>
parents:
1240
diff
changeset
|
20 #if HAVE_CONFIG_H |
599 | 21 # include <config.h> |
163
4aeea06507af
[!NINDIR]: Define BSIZE only if it's not already defined.
Jim Meyering <jim@meyering.net>
parents:
5
diff
changeset
|
22 #endif |
4aeea06507af
[!NINDIR]: Define BSIZE only if it's not already defined.
Jim Meyering <jim@meyering.net>
parents:
5
diff
changeset
|
23 |
1214
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
24 #include <sys/types.h> |
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
25 |
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
26 #if HAVE_SYS_PARAM_H |
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
27 # include <sys/param.h> |
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
28 #endif |
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
29 |
1997
d562a3cf9041
Use HAVE_STRUCT_STAT_ST_BLOCKS, not deprecated HAVE_ST_BLOCKS.
Jim Meyering <jim@meyering.net>
parents:
1557
diff
changeset
|
30 #if !HAVE_STRUCT_STAT_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE |
5 | 31 |
933
6c3fbfcdb059
[HAVE_UNISTD_H]: Include unistd.h.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
32 # if HAVE_UNISTD_H |
6c3fbfcdb059
[HAVE_UNISTD_H]: Include unistd.h.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
33 # include <unistd.h> |
6c3fbfcdb059
[HAVE_UNISTD_H]: Include unistd.h.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
34 # endif |
6c3fbfcdb059
[HAVE_UNISTD_H]: Include unistd.h.
Jim Meyering <jim@meyering.net>
parents:
650
diff
changeset
|
35 |
599 | 36 # ifndef NINDIR |
1240
92fcf946db19
[__DJGPP__]: Add missing typedef for daddr_t.
Jim Meyering <jim@meyering.net>
parents:
1214
diff
changeset
|
37 |
92fcf946db19
[__DJGPP__]: Add missing typedef for daddr_t.
Jim Meyering <jim@meyering.net>
parents:
1214
diff
changeset
|
38 # if defined (__DJGPP__) |
92fcf946db19
[__DJGPP__]: Add missing typedef for daddr_t.
Jim Meyering <jim@meyering.net>
parents:
1214
diff
changeset
|
39 typedef long daddr_t; /* for disk address */ |
92fcf946db19
[__DJGPP__]: Add missing typedef for daddr_t.
Jim Meyering <jim@meyering.net>
parents:
1214
diff
changeset
|
40 # endif |
92fcf946db19
[__DJGPP__]: Add missing typedef for daddr_t.
Jim Meyering <jim@meyering.net>
parents:
1214
diff
changeset
|
41 |
1134
b2ed35578119
(st_blocks): long -> off_t.
Jim Meyering <jim@meyering.net>
parents:
933
diff
changeset
|
42 /* Some SysV's, like Irix, seem to lack this. Hope it's correct. */ |
5 | 43 /* Number of inode pointers per indirect block. */ |
1214
a6150f7af1bd
Include sys/param.h only #if HAVE_SYS_PARAM_H.
Jim Meyering <jim@meyering.net>
parents:
1134
diff
changeset
|
44 # define NINDIR (BSIZE / sizeof (daddr_t)) |
599 | 45 # endif /* !NINDIR */ |
5 | 46 |
47 /* Number of direct block addresses in an inode. */ | |
599 | 48 # define NDIR 10 |
5 | 49 |
50 /* Return the number of 512-byte blocks in a file of SIZE bytes. */ | |
51 | |
1134
b2ed35578119
(st_blocks): long -> off_t.
Jim Meyering <jim@meyering.net>
parents:
933
diff
changeset
|
52 off_t |
1557 | 53 st_blocks (off_t size) |
5 | 54 { |
1134
b2ed35578119
(st_blocks): long -> off_t.
Jim Meyering <jim@meyering.net>
parents:
933
diff
changeset
|
55 off_t datablks = size / 512 + (size % 512 != 0); |
b2ed35578119
(st_blocks): long -> off_t.
Jim Meyering <jim@meyering.net>
parents:
933
diff
changeset
|
56 off_t indrblks = 0; |
5 | 57 |
58 if (datablks > NDIR) | |
59 { | |
60 indrblks = (datablks - NDIR - 1) / NINDIR + 1; | |
61 | |
62 if (datablks > NDIR + NINDIR) | |
63 { | |
64 indrblks += (datablks - NDIR - NINDIR - 1) / (NINDIR * NINDIR) + 1; | |
65 | |
66 if (datablks > NDIR + NINDIR + NINDIR * NINDIR) | |
67 indrblks++; | |
68 } | |
69 } | |
70 | |
71 return datablks + indrblks; | |
72 } | |
598
e504ab9c8abf
[HAVE_ST_BLOCKS || _POSIX_VERSION]: Add extern dcl
Jim Meyering <jim@meyering.net>
parents:
498
diff
changeset
|
73 #else |
e504ab9c8abf
[HAVE_ST_BLOCKS || _POSIX_VERSION]: Add extern dcl
Jim Meyering <jim@meyering.net>
parents:
498
diff
changeset
|
74 /* This declaration is solely to ensure that after preprocessing |
e504ab9c8abf
[HAVE_ST_BLOCKS || _POSIX_VERSION]: Add extern dcl
Jim Meyering <jim@meyering.net>
parents:
498
diff
changeset
|
75 this file is never empty. */ |
e504ab9c8abf
[HAVE_ST_BLOCKS || _POSIX_VERSION]: Add extern dcl
Jim Meyering <jim@meyering.net>
parents:
498
diff
changeset
|
76 extern int textutils_fileblocks_unused; |
5 | 77 #endif |