fsck.minix: fix broken zone checking
This bug has been introduced by commit
95356e8b74
.
The fsck.minix code assumes that isset() macro returns boolean,
unfortunately the generic implementation from libc returns integer.
This patch also add a fallback for the bitmap macros to include/bitops.h.
Reported-by: "Andries E. Brouwer" <Andries.Brouwer@cwi.nl>
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
ed98508a1c
commit
e98754d6bb
|
@ -100,12 +100,12 @@
|
|||
#include <termios.h>
|
||||
#include <mntent.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/param.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include "minix.h"
|
||||
#include "nls.h"
|
||||
#include "pathnames.h"
|
||||
#include "bitops.h"
|
||||
|
||||
#define ROOT_INO 1
|
||||
|
||||
|
@ -166,8 +166,8 @@ static unsigned char * zone_count = NULL;
|
|||
static void recursive_check(unsigned int ino);
|
||||
static void recursive_check2(unsigned int ino);
|
||||
|
||||
#define inode_in_use(x) (isset(inode_map,(x)))
|
||||
#define zone_in_use(x) (isset(zone_map,(x)-FIRSTZONE+1))
|
||||
#define inode_in_use(x) (isset(inode_map,(x)) != 0)
|
||||
#define zone_in_use(x) (isset(zone_map,(x)-FIRSTZONE+1) != 0)
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)),changed=1)
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)),changed=1)
|
||||
|
|
|
@ -68,7 +68,6 @@
|
|||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/param.h>
|
||||
#include <mntent.h>
|
||||
#include <getopt.h>
|
||||
|
||||
|
@ -76,6 +75,7 @@
|
|||
#include "minix.h"
|
||||
#include "nls.h"
|
||||
#include "pathnames.h"
|
||||
#include "bitops.h"
|
||||
|
||||
#define MINIX_ROOT_INO 1
|
||||
#define MINIX_BAD_INO 2
|
||||
|
@ -131,8 +131,7 @@ static unsigned short good_blocks_table[MAX_GOOD_BLOCKS];
|
|||
static int used_good_blocks = 0;
|
||||
static unsigned long req_nr_inodes = 0;
|
||||
|
||||
#define inode_in_use(x) (isset(inode_map,(x)))
|
||||
#define zone_in_use(x) (isset(zone_map,(x)-FIRSTZONE+1))
|
||||
#define zone_in_use(x) (isset(zone_map,(x)-FIRSTZONE+1) != 0)
|
||||
|
||||
#define mark_inode(x) (setbit(inode_map,(x)))
|
||||
#define unmark_inode(x) (clrbit(inode_map,(x)))
|
||||
|
|
|
@ -4,6 +4,22 @@
|
|||
#include <stdint.h>
|
||||
#include <endian.h>
|
||||
|
||||
/*
|
||||
* Bit map related macros. Usually provided by libc.
|
||||
*/
|
||||
#include <sys/param.h>
|
||||
|
||||
#ifndef NBBY
|
||||
# define NBBY CHAR_BIT
|
||||
#endif
|
||||
|
||||
#ifndef setbit
|
||||
# define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
|
||||
# define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
|
||||
# define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
|
||||
# define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
|
||||
#endif
|
||||
|
||||
#if !defined __BYTE_ORDER || !(__BYTE_ORDER == __LITTLE_ENDIAN) && !(__BYTE_ORDER == __BIG_ENDIAN)
|
||||
#error missing __BYTE_ORDER
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue