/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1985-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* David Korn <[email protected]> *18* Phong Vo <[email protected]> *19* *20***********************************************************************/21#include "sfhdr.h"2223/* Read an unsigned long value coded in a portable format.24**25** Written by Kiem-Phong Vo26*/2728#if __STD_C29Sfulong_t sfgetu(Sfio_t* f)30#else31Sfulong_t sfgetu(f)32Sfio_t* f;33#endif34{35Sfulong_t v;36uchar *s, *ends, c;37int p;38SFMTXDECL(f); /* declare a local stream variable for multithreading */3940SFMTXENTER(f, (Sfulong_t)(-1));4142if(f->mode != SF_READ && _sfmode(f,SF_READ,0) < 0)43SFMTXRETURN(f, (Sfulong_t)(-1));4445SFLOCK(f,0);4647for(v = 0;;)48{ if(SFRPEEK(f,s,p) <= 0)49{ f->flags |= SF_ERROR;50v = (Sfulong_t)(-1);51goto done;52}53for(ends = s+p; s < ends;)54{ c = *s++;55v = (v << SF_UBITS) | SFUVALUE(c);56if(!(c&SF_MORE))57{ f->next = s;58goto done;59}60}61f->next = s;62}63done:64SFOPEN(f,0);65SFMTXRETURN(f, v);66}676869