Exemple #1
0
wint_t __fputwc_unlocked(wchar_t c, FILE* f) {
  char mbc[MB_LEN_MAX];
  int l;
  locale_t *ploc = &CURRENT_LOCALE, loc = *ploc;

  if (f->mode <= 0)
    fwide(f, 1);
  *ploc = f->locale;

  if (isascii(c)) {
    c = putc_unlocked(c, f);
  } else if (f->wpos + MB_LEN_MAX < f->wend) {
    l = wctomb((void*)f->wpos, c);
    if (l < 0)
      c = WEOF;
    else
      f->wpos += l;
  } else {
    l = wctomb(mbc, c);
    if (l < 0 || __fwritex((void*)mbc, l, f) < l)
      c = WEOF;
  }
  if (c == WEOF)
    f->flags |= F_ERR;
  *ploc = loc;
  return c;
}
Exemple #2
0
size_t fwrite(const void *src, size_t size, size_t nmemb, FILE *f)
{
	size_t k, l = size*nmemb;
	if (!l) return l;
	FLOCK(f);
	k = __fwritex(src, l, f);
	FUNLOCK(f);
	return k==l ? nmemb : k/size;
}