X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=fastjar%2Fpushback.c;fp=fastjar%2Fpushback.c;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=c51577f2ee541b96010c2c66a90b3d3dbab3cc28;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/fastjar/pushback.c b/fastjar/pushback.c deleted file mode 100644 index c51577f2..00000000 --- a/fastjar/pushback.c +++ /dev/null @@ -1,209 +0,0 @@ -/* $Id: pushback.c,v 1.3 2002/01/03 04:57:56 rodrigc Exp $ - - $Log: pushback.c,v $ - Revision 1.3 2002/01/03 04:57:56 rodrigc - 2001-01-02 Craig Rodrigues - - PR bootstrap/5117 - * configure.in (AC_CHECK_HEADERS): Check for stdlib.h. - * Makefile.am: Move grepjar to bin_PROGRAMS. - * config.h.in: Regenerated. - * Makefile.in: Regenerated. - * aclocal.m4: Regenerated. - * jargrep.c: Eliminate some signed/unsigned and default - uninitialized warnings. Use HAVE_STDLIB_H instead of - STDC_HEADERS macro. - * jartool.c: Likewise. - * compress.c: Likewise. - - Revision 1.2 2000/12/14 18:45:35 ghazi - Warning fixes: - - * compress.c: Include stdlib.h and compress.h. - (rcsid): Delete. - (report_str_error): Make static. - (ez_inflate_str): Delete unused variable. Add parens in if-stmt. - (hrd_inflate_str): Likewise. - - * compress.h (init_compression, end_compression, init_inflation, - end_inflation): Prototype void arguments. - - * dostime.c (rcsid): Delete. - - * jargrep.c: Include ctype.h, stdlib.h, zlib.h and compress.h. - Make functions static. Cast ctype function argument to `unsigned - char'. Add parens in if-stmts. Constify. - (Usage): Change into a macro. - (jargrep): Remove unused parameter. - - * jartool.c: Constify. Add parens in if-stmts. Align - signed/unsigned char pointers in functions calls using casts. - (rcsid): Delete. - (list_jar): Fix printf format specifier. - (usage): Chop long string into bits. Reformat. - - * pushback.c (rcsid): Delete. - - Revision 1.1 2000/12/09 03:08:23 apbianco - 2000-12-08 Alexandre Petit-Bianco - - * fastjar: Imported. - - Revision 1.2 2000/08/23 19:42:17 cory - Added support for more Unix platforms. The following code has been hacked - to work on AIX, Solaris, True 64, and HP-UX. - Added bigendian check. Probably works on most big and little endian platforms - now. - - Revision 1.1.1.1 1999/12/06 03:09:13 toast - initial checkin.. - - - - Revision 1.1 1999/05/10 08:32:37 burnsbr - Initial revision - -*/ - -/* - pushback.c - code for a pushback buffer to handle file I/O - Copyright (C) 1999 Bryan Burns - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include - -#include "jartool.h" -#include "pushback.h" - -void pb_init(pb_file *pbf, int fd){ - pbf->fd = fd; - pbf->next = pbf->pb_buff; - pbf->buff_amt = 0; -} - -int pb_push(pb_file *pbf, void *buff, int amt){ - int in_amt; - int wrap = 0; - -#ifdef DEBUG - printf("%d bytes being pushed back to the buffer\n", amt); -#endif - - /* determine how much we can take */ - if((int)(RDSZ - pbf->buff_amt) < amt) - in_amt = RDSZ - pbf->buff_amt; - else - in_amt = amt; - - if(in_amt == 0) - return 0; - - /* figure out if we need to wrap around, and if so, by how much */ - if(((pbf->pb_buff + RDSZ) - pbf->next) < in_amt) - wrap = in_amt - ((pbf->pb_buff + RDSZ) - pbf->next); - - /* write everything up til the end of the buffer */ - memcpy(pbf->next, buff, (in_amt - wrap)); - - /* finish writing what's wrapped around */ - memcpy(pbf->pb_buff, ((char *)buff + (in_amt - wrap)), wrap); - - /* update the buff_amt field */ - pbf->buff_amt += in_amt; - -#ifdef DEBUG - printf("%d bytes we can't accept\n", (amt - in_amt)); -#endif - - return in_amt; -} - - -int pb_read(pb_file *pbf, void *buff, int amt){ - int out_amt = 0; - int wrap = 0; - void *bp = buff; - int tmp; - -#ifdef DEBUG - printf("%d bytes requested from us\n", amt); -#endif - while(out_amt < amt){ - /* if our push-back buffer contains some data */ - if(pbf->buff_amt > 0){ - -#ifdef DEBUG - printf("giving data from buffer\n"); -#endif - - /* calculate how much we can actually give the caller */ - if( (amt - out_amt) < (int)pbf->buff_amt ) - tmp = (amt - out_amt); - else - tmp = pbf->buff_amt; - - /* Determine if we're going to need to wrap around the buffer */ - if(tmp > ((pbf->pb_buff + RDSZ) - pbf->next)) - wrap = tmp - ((pbf->pb_buff + RDSZ) - pbf->next); - - memcpy(bp, pbf->next, (tmp - wrap)); - bp = &(((char *)bp)[tmp - wrap]); - - /* If we need to wrap, read from the start of the buffer */ - if(wrap > 0){ - memcpy(bp, pbf->pb_buff, wrap); - bp = &(((char *)bp)[wrap]); - } - - /* update the buff_amt field */ - pbf->buff_amt -= tmp; - pbf->next += tmp; - -#ifdef DEBUG - printf("%d bytes remaining in buffer\n", pbf->buff_amt); -#endif - - /* if the buffer is empty, reset the next header to the front of the - buffer so subsequent pushbacks/reads won't have to wrap */ - if(pbf->buff_amt == 0) - pbf->next = pbf->pb_buff; - - out_amt += tmp; - - } else { -#ifdef DEBUG - printf("Reading from file..\n"); -#endif - - /* The pushback buffer was empty, so we just need to read from the file */ - tmp = read(pbf->fd, bp, (amt - out_amt)); - if(tmp == 0) - break; - else - out_amt += tmp; - - bp = &(((char *)bp)[tmp]); - } - } - -#ifdef DEBUG - printf("managed to read %d bytes\n", out_amt); -#endif - return out_amt; -}