73 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * JFFS2 -- Journalling Flash File System, Version 2. | ||
|  |  * | ||
|  |  * Copyright (C) 2001, 2002 Red Hat, Inc. | ||
|  |  * | ||
|  |  * Created by David Woodhouse <dwmw2@infradead.org> | ||
|  |  * | ||
|  |  * For licensing information, see the file 'LICENCE' in this directory. | ||
|  |  * | ||
|  |  * $Id: pushpull.h,v 1.10 2004/11/16 20:36:11 dwmw2 Exp $ | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef __PUSHPULL_H__
 | ||
|  | #define __PUSHPULL_H__
 | ||
|  | 
 | ||
|  | #include <linux/errno.h>
 | ||
|  | 
 | ||
|  | struct pushpull { | ||
|  | 	unsigned char *buf; | ||
|  | 	unsigned int buflen; | ||
|  | 	unsigned int ofs; | ||
|  | 	unsigned int reserve; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | static inline void init_pushpull(struct pushpull *pp, char *buf, unsigned buflen, unsigned ofs, unsigned reserve) | ||
|  | { | ||
|  | 	pp->buf = buf; | ||
|  | 	pp->buflen = buflen; | ||
|  | 	pp->ofs = ofs; | ||
|  | 	pp->reserve = reserve; | ||
|  | } | ||
|  | 
 | ||
|  | static inline int pushbit(struct pushpull *pp, int bit, int use_reserved) | ||
|  | { | ||
|  | 	if (pp->ofs >= pp->buflen - (use_reserved?0:pp->reserve)) { | ||
|  | 		return -ENOSPC; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (bit) { | ||
|  | 		pp->buf[pp->ofs >> 3] |= (1<<(7-(pp->ofs &7))); | ||
|  | 	} | ||
|  | 	else { | ||
|  | 		pp->buf[pp->ofs >> 3] &= ~(1<<(7-(pp->ofs &7))); | ||
|  | 	} | ||
|  | 	pp->ofs++; | ||
|  | 
 | ||
|  | 	return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static inline int pushedbits(struct pushpull *pp) | ||
|  | { | ||
|  | 	return pp->ofs; | ||
|  | } | ||
|  | 
 | ||
|  | static inline int pullbit(struct pushpull *pp) | ||
|  | { | ||
|  | 	int bit; | ||
|  | 
 | ||
|  | 	bit = (pp->buf[pp->ofs >> 3] >> (7-(pp->ofs & 7))) & 1; | ||
|  | 
 | ||
|  | 	pp->ofs++; | ||
|  | 	return bit; | ||
|  | } | ||
|  | 
 | ||
|  | static inline int pulledbits(struct pushpull *pp) | ||
|  | { | ||
|  | 	return pp->ofs; | ||
|  | } | ||
|  | 
 | ||
|  | #endif /* __PUSHPULL_H__ */
 |