BBString *bbStringFromShorts( const unsigned short *p,int n ){ BBString *str; if( !n ) return &bbEmptyString; str=bbStringNew( n ); bbMemCopy( str->buf,p,n*sizeof(short) ); return str; }
void *bbMemExtend( void *mem,int size,int new_size ){ void *p; p=bbMemAlloc( new_size ); bbMemCopy( p,mem,size ); bbMemFree( mem ); return p; }
BBString *bbReadStdin(){ #define BUF_SIZE 256 int sz=0; char *str=0; BBString *t; for(;;){ int t_sz; char buf[BUF_SIZE],*p; fgets( buf,BUF_SIZE,stdin ); buf[BUF_SIZE-1]=0; if( p=strchr( buf,'\n' ) ){ t_sz=p-buf; if( t_sz && isspace(buf[t_sz-1]) ) --t_sz; }else{ t_sz=strlen( buf ); } str=(char*)bbMemExtend( str,sz,sz+t_sz ); bbMemCopy( str+sz,buf,t_sz ); sz+=t_sz; if( t_sz<BUF_SIZE-1 ) break; } if( sz ) t=bbStringFromBytes( str,sz ); else t=&bbEmptyString; bbMemFree( str ); return t; }