fsetpos.c 869 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. #ifdef __DO_LARGEFILE
  9. # ifndef __UCLIBC_HAS_LFS__
  10. # error large file support is not enabled!
  11. # endif
  12. # define fsetpos fsetpos64
  13. # define fpos_t fpos64_t
  14. # define fseek fseeko64
  15. #endif
  16. int fsetpos(FILE *stream, register const fpos_t *pos)
  17. {
  18. #ifdef __STDIO_MBSTATE
  19. int retval = -1;
  20. __STDIO_AUTO_THREADLOCK_VAR;
  21. __STDIO_AUTO_THREADLOCK(stream);
  22. if ((retval = fseek(stream, pos->__pos, SEEK_SET)) == 0) {
  23. __COPY_MBSTATE(&(stream->__state), &(pos->__mbstate));
  24. stream->__ungot_width[0]= pos->__mblen_pending;
  25. }
  26. __STDIO_AUTO_THREADUNLOCK(stream);
  27. return retval;
  28. #else
  29. return fseek(stream, pos->__pos, SEEK_SET);
  30. #endif
  31. }