123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /* Copyright (C) 2004 Manuel Novoa III <mjn3@codepoet.org>
- *
- * GNU Library General Public License (LGPL) version 2 or later.
- *
- * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
- */
- #include "_stdio.h"
- #include <stdio_ext.h>
- libc_hidden_proto(__fsetlocking)
- #ifdef __UCLIBC_HAS_THREADS__
- libc_hidden_proto(_stdio_user_locking)
- #endif
- /* Not threadsafe. */
- /* Notes:
- * When setting the locking mode, glibc returns the previous setting.
- * glibc treats invalid locking_mode args as FSETLOCKING_INTERNAL.
- */
- int __fsetlocking(FILE *stream, int locking_mode)
- {
- #ifdef __UCLIBC_HAS_THREADS__
- int current = 1 + (stream->__user_locking & 1);
- /* Check constant assumptions. We can't test at build time
- * since these are enums. */
- assert((FSETLOCKING_QUERY == 0) && (FSETLOCKING_INTERNAL == 1)
- && (FSETLOCKING_BYCALLER == 2));
- __STDIO_STREAM_VALIDATE(stream);
- assert(((unsigned int) locking_mode) <= 2);
- if (locking_mode != FSETLOCKING_QUERY) {
- stream->__user_locking = ((locking_mode == FSETLOCKING_BYCALLER)
- ? 1
- : _stdio_user_locking); /* 0 or 2 */
- __STDIO_STREAM_VALIDATE(stream);
- }
- return current;
- #else
- __STDIO_STREAM_VALIDATE(stream);
- assert(((unsigned int) locking_mode) <= 2);
- return FSETLOCKING_INTERNAL;
- #endif
- }
- libc_hidden_def(__fsetlocking)
|