fgetpos.c 780 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /* Copyright (C) 2004 Manuel Novoa III <mjn3@codepoet.org>
  2. *
  3. * GNU Library General Public License (LGPL) version 2 or later.
  4. *
  5. * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
  6. */
  7. #include "_stdio.h"
  8. #ifndef __DO_LARGEFILE
  9. #define FTELL ftell
  10. #endif
  11. libc_hidden_proto(FTELL)
  12. int fgetpos(FILE * __restrict stream, register fpos_t * __restrict pos)
  13. {
  14. #ifdef __STDIO_MBSTATE
  15. int retval = -1;
  16. __STDIO_AUTO_THREADLOCK_VAR;
  17. __STDIO_AUTO_THREADLOCK(stream);
  18. if ((pos->__pos = FTELL(stream)) >= 0) {
  19. __COPY_MBSTATE(&(pos->__mbstate), &(stream->__state));
  20. pos->__mblen_pending = stream->__ungot_width[0];
  21. retval = 0;
  22. }
  23. __STDIO_AUTO_THREADUNLOCK(stream);
  24. return retval;
  25. #else
  26. return ((pos->__pos = FTELL(stream)) >= 0) ? 0 : -1;
  27. #endif
  28. }