diff options
Diffstat (limited to 'e2fsprogs/ext2fs/bitops.c')
-rw-r--r-- | e2fsprogs/ext2fs/bitops.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/e2fsprogs/ext2fs/bitops.c b/e2fsprogs/ext2fs/bitops.c new file mode 100644 index 000000000..207c44d92 --- /dev/null +++ b/e2fsprogs/ext2fs/bitops.c | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * bitops.c --- Bitmap frobbing code. See bitops.h for the inlined | ||
3 | * routines. | ||
4 | * | ||
5 | * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. | ||
6 | * | ||
7 | * %Begin-Header% | ||
8 | * This file may be redistributed under the terms of the GNU Public | ||
9 | * License. | ||
10 | * %End-Header% | ||
11 | */ | ||
12 | |||
13 | #include <stdio.h> | ||
14 | #if HAVE_SYS_TYPES_H | ||
15 | #include <sys/types.h> | ||
16 | #endif | ||
17 | |||
18 | #include "ext2_fs.h" | ||
19 | #include "ext2fs.h" | ||
20 | |||
21 | #ifndef _EXT2_HAVE_ASM_BITOPS_ | ||
22 | |||
23 | /* | ||
24 | * For the benefit of those who are trying to port Linux to another | ||
25 | * architecture, here are some C-language equivalents. You should | ||
26 | * recode these in the native assmebly language, if at all possible. | ||
27 | * | ||
28 | * C language equivalents written by Theodore Ts'o, 9/26/92. | ||
29 | * Modified by Pete A. Zaitcev 7/14/95 to be portable to big endian | ||
30 | * systems, as well as non-32 bit systems. | ||
31 | */ | ||
32 | |||
33 | int ext2fs_set_bit(int nr,void * addr) | ||
34 | { | ||
35 | int mask, retval; | ||
36 | unsigned char *ADDR = (unsigned char *) addr; | ||
37 | |||
38 | ADDR += nr >> 3; | ||
39 | mask = 1 << (nr & 0x07); | ||
40 | retval = mask & *ADDR; | ||
41 | *ADDR |= mask; | ||
42 | return retval; | ||
43 | } | ||
44 | |||
45 | int ext2fs_clear_bit(int nr, void * addr) | ||
46 | { | ||
47 | int mask, retval; | ||
48 | unsigned char *ADDR = (unsigned char *) addr; | ||
49 | |||
50 | ADDR += nr >> 3; | ||
51 | mask = 1 << (nr & 0x07); | ||
52 | retval = mask & *ADDR; | ||
53 | *ADDR &= ~mask; | ||
54 | return retval; | ||
55 | } | ||
56 | |||
57 | int ext2fs_test_bit(int nr, const void * addr) | ||
58 | { | ||
59 | int mask; | ||
60 | const unsigned char *ADDR = (const unsigned char *) addr; | ||
61 | |||
62 | ADDR += nr >> 3; | ||
63 | mask = 1 << (nr & 0x07); | ||
64 | return (mask & *ADDR); | ||
65 | } | ||
66 | |||
67 | #endif /* !_EXT2_HAVE_ASM_BITOPS_ */ | ||
68 | |||
69 | void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg, | ||
70 | const char *description) | ||
71 | { | ||
72 | #ifndef OMIT_COM_ERR | ||
73 | if (description) | ||
74 | com_err(0, errcode, "#%lu for %s", arg, description); | ||
75 | else | ||
76 | com_err(0, errcode, "#%lu", arg); | ||
77 | #endif | ||
78 | } | ||
79 | |||
80 | void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap, | ||
81 | int code, unsigned long arg) | ||
82 | { | ||
83 | #ifndef OMIT_COM_ERR | ||
84 | if (bitmap->description) | ||
85 | com_err(0, bitmap->base_error_code+code, | ||
86 | "#%lu for %s", arg, bitmap->description); | ||
87 | else | ||
88 | com_err(0, bitmap->base_error_code + code, "#%lu", arg); | ||
89 | #endif | ||
90 | } | ||
91 | |||