Re: A89: fwrite function


[Prev][Next][Index][Thread]

Re: A89: fwrite function




This is my third time writing this email (don't ask), so this is the
abrigded version of this email. fwrite is "buggy" or rather implemented
badly. fwrite does no memory checking, thus does not allocate the space
nessecary for the data being wrote. I suggest that the fwrite
implementation be changed to something similar to this: (btw, fputs has
a similar problem... which I don't have time to rewrite)

unsigned __fwrite(int(*fnc)(int,FILE*),void *ptr,unsigned size,unsigned
n,FILE *f)
{
  unsigned i,j,free,needed;
  int saveflags=f->flags;
  f->flags|=_F_BIN;
  free = f->alloc - f->pos - f->base; //I believe this is correct?
  needed = size*n;
  if(needed>free)
  {
    HeapUnlock(f->handle);
    if(!HeapRealloc(f->handle,f->alloc+=needed-free)) __FERROR(f);
    base=f->base=HLock(f->handle);
    f->fpos+=base-oldbase;
    oldbase=base;
  }
  for(i=0;i<n;i++)
    for(j=0;j<size;j++)
      if(fnc(*(char*)ptr++,f)<0) goto exit;
exit:
  f->flags=saveflags;
  return i;
}

Michael Cowart wrote:
> 
> Ok, what is wrong here?
> 
> FILE *fp = fopen("example","wb");
> fwrite (vplane0,3840,1,fp); /*vplane is a pointer to a 3840
> byte screen buffer*/
> fputc(0,fp);
> fputs("PNT",fp);
> fputc(0,fp);
> fputc(OTH_TAG,fp);
> fclose(fp);
> 
> When I create this file, it's only 371 bytes long... Is fwrite buggy, or am
> I just insane : ) ?
> 
> Thanx,
> Michael Cowart

-- 
Scott "Wrath" Dial
wrath@calc.org
ICQ#3608935
Member of TCPA - tcpa.calc.org
PGP key available

_____NetZero Free Internet Access and Email______
   http://www.netzero.net/download/index.html



References: