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(unsigned 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(unsigned 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(unsigned 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 | bb_error_msg("#%lu for %s", arg, description);
|
---|
75 | else
|
---|
76 | bb_error_msg("#%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 | bb_error_msg("#%lu for %s", arg, bitmap->description);
|
---|
86 | else
|
---|
87 | bb_error_msg("#%lu", arg);
|
---|
88 | #endif
|
---|
89 | }
|
---|
90 |
|
---|