msvcr90: Implement fread_s. (try 2)

Piotr Caban piotr.caban at gmail.com
Fri Dec 23 05:41:56 CST 2011


On 12/23/11 08:44, Kusanagi Kouichi wrote:
> +  if (!buf)
> +  {
> +    _invalid_parameter(NULL, NULL, NULL, 0, 0);
> +    return 0;
> +  }
You should set errno here.

> +  if (bufsize / size<  count)
> +  {
> +    fread(buf, bufsize, 1, fp);
> +    if (!feof(fp))
> +    {
> +      _invalid_parameter(NULL, NULL, NULL, 0, 0);
> +      memset(buf, 0, bufsize);
> +      fseek(fp, 1, SEEK_SET);
> +    }
> +    return 0;
> +  }
This is still not working good. I don't know how it should be 
implemented without doing much more testing. Probably printing a FIXME 
message and returning an error will be acceptable.

If you want to fully implement it I guess it should do something like this:
  - execute _filbuf (this is probably causing the one character position 
change you're observing)
  - analyze internal FILE buffer and return error if needed
  - do the read
There are some problems if more data should be read then can be stored 
in internal FILE  buffer.



More information about the wine-devel mailing list