Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 1990 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that the above copyright notice and this paragraph are
  7.  * duplicated in all such forms and that any documentation,
  8.  * advertising materials, and other materials related to such
  9.  * distribution and use acknowledge that the software was developed
  10.  * by the University of California, Berkeley.  The name of the
  11.  * University may not be used to endorse or promote products derived
  12.  * from this software without specific prior written permission.
  13.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  14.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  15.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  16.  */
  17.  
  18. /*
  19. FUNCTION
  20. <<putchar_unlocked>>---non-thread-safe version of putchar (macro)
  21.  
  22. INDEX
  23.         putchar_unlocked
  24.  
  25. SYNOPSIS
  26.         #include <stdio.h>
  27.         int putchar_unlocked(int <[ch]>);
  28.  
  29. DESCRIPTION
  30. <<putchar_unlocked>> is a non-thread-safe version of <<putchar>>
  31. declared in <<stdio.h>>.  <<putchar_unlocked>> may only safely be used
  32. within a scope protected by flockfile() (or ftrylockfile()) and
  33. funlockfile().  These functions may safely be used in a multi-threaded
  34. program if and only if they are called while the invoking thread owns
  35. the ( FILE *) object, as is the case after a successful call to the
  36. flockfile() or ftrylockfile() functions.  If threads are disabled,
  37. then <<putchar_unlocked>> is equivalent to <<putchar>>.
  38.  
  39. RETURNS
  40. See <<putchar>>.
  41.  
  42. PORTABILITY
  43. POSIX 1003.1 requires <<putchar_unlocked>>.  <<putchar_unlocked>> may
  44. be implemented as a macro.
  45.  
  46. Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
  47. <<lseek>>, <<read>>, <<sbrk>>, <<write>>.  */
  48.  
  49. #if defined(LIBC_SCCS) && !defined(lint)
  50. static char sccsid[] = "%W% (Berkeley) %G%";
  51. #endif /* LIBC_SCCS and not lint */
  52.  
  53. /*
  54.  * A subroutine version of the macro putchar_unlocked.
  55.  */
  56.  
  57. #include <_ansi.h>
  58. #include <reent.h>
  59. #include <stdio.h>
  60.  
  61. #undef putchar_unlocked
  62.  
  63. int
  64. _DEFUN(_putchar_unlocked_r, (ptr, c),
  65.        struct _reent *ptr _AND
  66.        int c)
  67. {
  68.   return putc_unlocked (c, _stdout_r (ptr));
  69. }
  70.  
  71. #ifndef _REENT_ONLY
  72.  
  73. int
  74. _DEFUN(putchar_unlocked, (c),
  75.        int c)
  76. {
  77.   /* CHECK_INIT is (eventually) called by __swbuf.  */
  78.  
  79.   return _putchar_unlocked_r (_REENT, c);
  80. }
  81.  
  82. #endif
  83.