bitops.c revision 21c84b71e205b5ab13f14343da5645dcc985856d
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#include <sys/types.h> 15 16#include <linux/ext2_fs.h> 17 18#include "ext2fs.h" 19 20#ifndef _EXT2_HAVE_ASM_BITOPS_ 21 22/* 23 * For the benefit of those who are trying to port Linux to another 24 * architecture, here are some C-language equivalents. You should 25 * recode these in the native assmebly language, if at all possible. 26 * 27 * C language equivalents written by Theodore Ts'o, 9/26/92. 28 * Modified by Pete A. Zaitcev 7/14/95 to be portable to big endian 29 * systems, as well as non-32 bit systems. 30 */ 31 32int ext2fs_set_bit(int nr,void * addr) 33{ 34 int mask, retval; 35 unsigned char *ADDR = (unsigned char *) addr; 36 37 ADDR += nr >> 3; 38 mask = 1 << (nr & 0x07); 39 retval = (mask & *ADDR) != 0; 40 *ADDR |= mask; 41 return retval; 42} 43 44int ext2fs_clear_bit(int nr, void * addr) 45{ 46 int mask, retval; 47 unsigned char *ADDR = (unsigned char *) addr; 48 49 ADDR += nr >> 3; 50 mask = 1 << (nr & 0x07); 51 retval = (mask & *ADDR) != 0; 52 *ADDR &= ~mask; 53 return retval; 54} 55 56int ext2fs_test_bit(int nr, const void * addr) 57{ 58 int mask; 59 const unsigned char *ADDR = (const unsigned char *) addr; 60 61 ADDR += nr >> 3; 62 mask = 1 << (nr & 0x07); 63 return ((mask & *ADDR) != 0); 64} 65 66#endif /* !_EXT2_HAVE_ASM_BITOPS_ */ 67 68void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg, 69 const char *description) 70{ 71 if (description) 72 com_err(0, errcode, "#%u for %s", arg, description); 73 else 74 com_err(0, errcode, "#%u", arg); 75} 76 77void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap, 78 int code, unsigned long arg) 79{ 80 if (bitmap->description) 81 com_err(0, bitmap->base_error_code+code, 82 "#%u for %s", arg, bitmap->description); 83 else 84 com_err(0, bitmap->base_error_code + code, "#%u", arg); 85} 86 87