int
file_mbsrtowcs (int input, int output)
{
  /* MB_LEN_MAX kullanmalıyız.
      MB_CUR_MAX urada taşınabilir değildir.  */
  char buffer[BUFSIZ + MB_LEN_MAX];
  mbstate_t state;
  int filled = 0;
  int eof = 0;
  /* state'i ilklendirelim.  */
  memset (&state, '\0', sizeof (state));
  while (!eof)
    {
      ssize_t nread;
      ssize_t nwrite;
      char *inp = buffer;
      wchar_t outbuf[BUFSIZ];
      wchar_t *outp = outbuf;
      /* buffer'ı girdi dosyasından dolduralım.  */
      nread = read (input, buffer + filled, BUFSIZ);
      if (nread < 0)
        {
          perror ("read");
          return 0;
        }
      /* Dosya sonuna geldiğimizde bunu belirleyelim. */
      if (nread == 0)
        eof = 1;
      /* tampona aktarılan baytları sayalım */
      filled += nread;
      /* Bu baytları mümkün olduğunda geniş karakterlere dönüştürelim. */
      while (1)
        {
          size_t thislen = mbrtowc (outp, inp, filled, &state);
          /* Geçersiz karaktere rastlandığında dur;
             böylece son geçerli karaktere kadar olan parçayı okumuş olacağız  */
          if (thislen == (size_t) -1)
            break;
          /* Dizge içinde boş karakter bulursak 0 değeri ile döneceğiz.
             Bu bir düzeltme gerektirir.  */
          if (thislen == 0)
            thislen = 1;
          /* Bu karakterle işimiz bitti, sonrakine geçelim. */
          inp += thislen;
          filled -= thislen;
          ++outp;
        }
      /* Dönüştürülen geniş karakterleri yazalım.  */
      nwrite = write (output, outbuf,
                      (outp - outbuf) * sizeof (wchar_t));
      if (nwrite < 0)
        {
          perror ("write");
          return 0;
        }
      /* Gerçekten bir geçersiz karakterimiz var mı bakalım. */
      if ((eof && filled > 0) || filled >= MB_CUR_MAX)
        {
          error (0, 0, "cokbaytli karakter gecersiz");
          return 0;
        }
      /* karakterleri tamponun başından itibaren yerleştirelim. */
      if (filled > 0)
        memmove (inp, buffer, filled);
    }
  return 1;
}