vfs: check userland buffers before reading them.
[haiku.git] / docs / user / support / SupportDefs.dox
blob2592a14231447d97264b1a5702b989feaf079c4e
1 /*
2  * Copyright 2007-2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *              Niels Sascha Reedijk, niels.reedijk@gmail.com
7  *              John Scipione, jscipione@gmail.com
8  *
9  * Corresponds to:
10  *              headers/os/support/SupportDefs.h        rev 35018
11  */
14 /*!
15         \file SupportDefs.h
16         \ingroup support
17         \ingroup libbe
18         \brief Defines basic types and definitions for the Haiku API.
22 /*!
23         \name Fixed-Size Integer Types
27 //! @{
30 /*!
31         \typedef typedef __haiku_int8 int8
35 /*!
36         \typedef typedef __haiku_uint8 uint8
40 /*!
41         \typedef typedef __haiku_int16 int16
45 /*!
46         \typedef typedef __haiku_uint16 uint16
50 /*!
51         \typedef typedef __haiku_int32 int32
55 /*!
56         \typedef typedef __haiku_uint32 uint32
60 /*!
61         \typedef typedef __haiku_int64 int64
65 /*!
66         \typedef typedef __haiku_uint64 uint64
70 //! @}
73 /*!
74         \name Fixed-size Volatile Types
78 //! @{
81 /*!
82         \typedef typedef volatile int8 vint8
86 /*!
87         \typedef typedef volatile uint8 vuint8
91 /*!
92         \typedef typedef volatile int16 vint16
96 /*!
97         \typedef typedef volatile uint16 vuint16
102         \typedef typedef volatile int32 vint32
107         \typedef typedef volatile uint32 vuint32
112         \typedef typedef volatile int64 vint64
117         \typedef typedef volatile uint64 vuint64
121 //! @}
125         \name Short-hand Volatile Type Names
129 //! @{
133         \typedef typedef volatile long vlong
138         \typedef typedef volatile int vint
143         \typedef typedef volatile short vshort
148         \typedef typedef volatile char vchar
153         \typedef typedef volatile unsigned long vulong
158         \typedef typedef volatile unsigned int vuint
163         \typedef typedef volatile unsigned short vushort
168         \typedef typedef volatile unsigned char vuchar
172 //! @}
176         \name Character Type Formats
180 //! @{
184   \typedef typedef unsigned char uchar
189   \typedef typedef unsigned short unichar
193 //! @}
197         \name Descriptive Type Formats
201 //! @{
205         \typedef typedef int32 status_t
206         \brief Represents one of the status codes defined in Errors.h.
208         \since BeOS R3
213         \typedef typedef int64 bigtime_t
214         \brief Represents time. The unit depends on the context of the function.
216         \since BeOS R3
221         \typedef typedef int64 nanotime_t
222         \brief Represents time in nanoseconds.
227         \typedef typedef uint32 type_code
228         \brief Represents a certain type of data. See TypeConstants.h for
229                possible values.
231         \since Haiku R1
236         \typedef typedef uint32 perform_code
237         \brief Defined to support 'hidden' commands or extensions to classes.
239         The Haiku API has none of these.
241         \since Haiku R1
245 //! @}
249         \name Format strings for printf() and scanf()
253 //! @{
257         \def B_PRId8
262         \def B_PRIi8
267         \def B_PRId16
272         \def B_PRIi16
277         \def B_PRId32
282         \def B_PRIi32
287         \def B_PRId64
292         \def B_PRIi64
297         \def B_PRIu8
302         \def B_PRIo8
307         \def B_PRIx8
312         \def B_PRIX8
317         \def B_PRIu16
322         \def B_PRIo16
327         \def B_PRIx16
332         \def B_PRIX16
337         \def B_PRIu32
342         \def B_PRIo32
347         \def B_PRIx32
352         \def B_PRIX32
357         \def B_PRIu64
362         \def B_PRIo64
367         \def B_PRIx64
372         \def B_PRIX64
377         \def B_SCNd8
382         \def B_SCNi8
387         \def B_SCNd16
392         \def B_SCNi16
397         \def B_SCNd32
402         \def B_SCNi32
407         \def B_SCNd64
412         \def B_SCNi64
417         \def B_SCNu8
422         \def B_SCNo8
427         \def B_SCNx8
432         \def B_SCNu16
437         \def B_SCNo16
442         \def B_SCNx16
447         \def B_SCNu32
452         \def B_SCNo32
457         \def B_SCNx32
462         \def B_SCNu64
467         \def B_SCNo64
472         \def B_SCNx64
476 //! @}
480         \name Format strings for several standard types
484 //! @{
488         \def B_PRIuSIZE
489         \brief size_t
494         \def B_PRIoSIZE
495         \brief size_t
500         \def B_PRIxSIZE
501         \brief size_t
506         \def B_PRIXSIZE
507         \brief size_t
512         \def B_PRIdSSIZE
513         \brief ssize_t
518         \def B_PRIiSSIZE
519         \brief ssize_t
524         \def B_PRIuADDR
525         \brief addr_t
530         \def B_PRIoADDR
531         \brief addr_t
536         \def B_PRIxADDR
537         \brief addr_t
542         \def B_PRIXADDR
543         \brief addr_t
548         \def B_PRIdOFF
549         \brief off_t
554         \def B_PRIiOFF
555         \brief off_t
560         \def B_PRIdDEV
561         \brief dev_t
566         \def B_PRIiDEV
567         \brief dev_t
572         \def B_PRIdINO
573         \brief ino_t
578         \def B_PRIiINO
579         \brief ino_t
584         \def B_PRIdTIME
585         \brief time_t
590         \def B_PRIiTIME
591         \brief time_t
595 //! @}
598 //////////////// Odds and ends
602         \var const char* B_EMPTY_STRING
603         \brief Defines an empty string. Currently defined as the string "".
605         \since BeOS R3
610         \def min_c(a,b)
611         \brief Returns the minimum of the values a and b.
613         \note When including this header in a C file, use the C equivalent called
614               \c min(a,b).
616         \since Haiku R1
621         \def max_c(a,b)
622         \brief Returns the maximum of values a and b.
624         \note When including this header in a C file, use the C equivalent called
625               \c max(a,b).
627         \since Haiku R1
632         \def NULL
633         \brief Defines the constant \c NULL if it hasn't already been defined.
635         \since BeOS R3
640         \addtogroup support_globals
644 //! @{
648         \fn void atomic_set(int32* value, int32 newValue)
649         \brief Atomically set the variable \a value to \a newvalue.
651         This is a thread-safe way of performing the \c *value \c = \c newValue
652         operation. You should use these function when two or more threads might
653         access the variable simultaneously. You don't have to use a semaphore or a
654         mutex in this case. The variable must be naturally aligned.
656         \sa atomic_set64() for a version that works on \c long \c long.
657         \sa atomic_test_and_set()
658         \sa atomic_add()
659         \sa atomic_and()
660         \sa atomic_or(),
661         \sa atomic_get()
663         \since Haiku R1
667 /*!     \fn int32 atomic_get_and_set(int32* value, int32 newValue)
668         \brief Atomically set the variable \a value to \a newvalue and return the
669                old value.
671         This is a thread-safe way of performing the \c *value \c = \c newValue
672         operation. You should use these function when two or more threads might
673         access the variable simultaneously. You don't have to use a semaphore or a
674         mutex in this case.
676         \return The original value of \c value.
678         \sa atomic_get_and_set64() for a version that works on \c long \c long.
679         \sa atomic_set()
680         \sa atomic_test_and_set()
681         \sa atomic_add()
682         \sa atomic_and()
683         \sa atomic_or(),
684         \sa atomic_get()
686         \since Haiku R1
690 /*!     \fn int32 atomic_test_and_set(int32* value, int32 newValue,
691                 int32 testAgainst)
692         \brief Atomically set the variable \a value to \a newValue if the current
693                value is \a testAgainst.
695         This is a thread-safe way of conditionally performing the \c *value \c +=
696         \c newValue operation. You should use these function when two or more
697         threads might access the variable simultaneously. You don't have to use
698         a semaphore or a mutex in this case.
700         \return The original value of \c value.
702         \sa atomic_test_and_set64() for a version that works on \c long \c long.
703         \sa atomic_get_and_set()
704         \sa atomic_set()
705         \sa atomic_add()
706         \sa atomic_and()
707         \sa atomic_or()
708         \sa atomic_get()
710         \since Haiku R1
715         \fn int32 atomic_add(int32* value, int32 addValue)
716         \brief Atomically add the value of \a addValue to \a value.
718         This is a thread-safe way of performing the \c *value \c += \c addValue
719         operation. You should use these function when two or more threads might
720         access the variable simultaneously. You don't have to use a semaphore or a
721         mutex in this case.
723         \return The original value of \c value.
725         \sa atomic_add64() for a version that works on \c long \c long.
726         \sa atomic_get_and_set()
727         \sa atomic_set()
728         \sa atomic_test_and_set()
729         \sa atomic_and()
730         \sa atomic_or()
731         \sa atomic_get()
733         \since BeOS R3
737 /*!     \fn int32 atomic_and(int32* value, int32 andValue)
738         \brief Atomically perform a bitwise AND operation of \a andValue to the
739          variable \a andValue.
741         This is a thread-safe way of performing the \c *value \c &= \c andValue
742         operation. You should use these function when two or more threads might
743         access the variable simultaneously. You don't have to use a semaphore or a
744         mutex in this case.
746         \return The original value of \c value.
748         \sa atomic_and64() for a version that works on \c long \c long.
749         \sa atomic_get_and_set()
750         \sa atomic_set()
751         \sa atomic_test_and_set()
752         \sa atomic_add()
753         \sa atomic_or()
754         \sa atomic_get()
756         \since BeOS R3
761         \fn int32 atomic_or(int32* value, int32 orValue)
762         \brief Atomically perform a bitwise OR operation of \a orValue to the
763                variable \a andValue.
765         This is a thread-safe way of performing the \c *value \c |= \c orValue
766         operation. You should use these function when two or more threads might
767         access the variable simultaneously. You don't have to use a semaphore or a
768         mutex in this case.
770         \return The original value of \c value.
772         \sa atomic_or64() for a version that works on \c long \c long.
773         \sa atomic_get_and_set()
774         \sa atomic_set()
775         \sa atomic_test_and_set()
776         \sa atomic_add()
777         \sa atomic_and()
778         \sa atomic_get()
780         \since BeOS R3
785         \fn int32 atomic_get(int32* value)
786         \brief Atomically return the value of \c value.
788         This is a thread-safe way of reading the contents of the \c value
789         operation. You should use these function when two or more threads might
790         access the variable simultaneously. You don't have to use a semaphore or a
791         mutex in this case. The variable must be naturally aligned.
793         \return The original value of \c value.
795         \sa atomic_get64() for a version that works on \c long \c long.
796         \sa atomic_get_and_set()
797         \sa atomic_set()
798         \sa atomic_test_and_set()
799         \sa atomic_add()
800         \sa atomic_and()
801         \sa atomic_or()
803         \since Haiku R1
808         \fn void atomic_set64(int64* value, int64 newValue)
809         \brief Atomically set the variable \a value to \a newvalue.
811         This is a thread-safe way of performing the \c *value \c = \c newValue
812         operation. You should use these function when two or more threads might
813         access the variable simultaneously. You don't have to use a semaphore or a
814         mutex in this case. The variable must be naturally aligned.
816         \sa atomic_set() for a version that works on an \c int32.
817         \sa atomic_get_and_set64()
818         \sa atomic_test_and_set64()
819         \sa atomic_add64()
820         \sa atomic_and64()
821         \sa atomic_or64()
822         \sa atomic_get64()
824         \since Haiku R1
829         \fn int64 atomic_get_and_set64(int64* value, int64 newValue)
830         \brief Atomically set the variable \a value to \a newvalue and return
831                the old value.
833         This is a thread-safe way of performing the \c *value \c = \c newValue
834         operation. You should use these function when two or more threads might
835         access the variable simultaneously. You don't have to use a semaphore or a
836         mutex in this case.
838         \return The original value of \c value.
840         \sa atomic_get_and_set() for a version that works on an \c int32.
841         \sa atomic_set64()
842         \sa atomic_test_and_set64()
843         \sa atomic_add64()
844         \sa atomic_and64()
845         \sa atomic_or64()
846         \sa atomic_get64()
848         \since Haiku R1
853         \fn int64 atomic_test_and_set64(int64* value, int64 newValue,
854                 int64 testAgainst)
855         \brief Atomically set the variable \a value to \a newValue if the current
856                    value is \a testAgainst.
858         This is a thread-safe way of conditionally performing the \c *value
859         \c += \c newValue operation. You should use these function when two
860         or more threads might access the variable simultaneously. You don't
861         have to use a semaphore or a mutex in this case.
863         \return The original value of \c value.
865         \sa atomic_test_and_set() for a version that works on an \c int32.
866         \sa atomic_get_and_set64()
867         \sa atomic_set64()
868         \sa atomic_add64()
869         \sa atomic_and64()
870         \sa atomic_or64()
871         \sa atomic_get64()
873         \since Haiku R1
878         \fn int64 atomic_add64(int64* value, int64 addValue)
879         \brief Atomically add the value of \a addValue to \a value.
881         This is a thread-safe way of performing the \c *value \c += \c addValue
882         operation. You should use these function when two or more threads might
883         access the variable simultaneously. You don't have to use a semaphore or a
884         mutex in this case.
886         \return The original value of \c value.
888         \sa atomic_add() for a version that works on an \c int32.
889         \sa atomic_get_and_set64()
890         \sa atomic_set64()
891         \sa atomic_test_and_set64()
892         \sa atomic_and64()
893         \sa atomic_or64()
894         \sa atomic_get64()
896         \since Haiku R1
901         \fn int64 atomic_and64(int64* value, int64 andValue)
902         \brief Atomically perform a bitwise AND operation of \a andValue to the
903                variable \a andValue.
905         This is a thread-safe way of performing the \c *value \c &= \c andValue
906         operation. You should use these function when two or more threads might
907         access the variable simultaneously. You don't have to use a semaphore or a
908         mutex in this case.
910         \return The original value of \c value.
912         \sa atomic_and() for a version that works on an \c int32.
913         \sa atomic_get_and_set64()
914         \sa atomic_set64()
915         \sa atomic_test_and_set64()
916         \sa atomic_add64()
917         \sa atomic_or64()
918         \sa atomic_get64()
920         \since Haiku R1
925         \fn int64 atomic_or64(int64* value, int64 orValue)
926         \brief Atomically perform a bitwise OR operation of \a orValue to the
927                variable \a andValue.
929         This is a thread-safe way of performing the \c *value \c |= \c orValue
930         operation. You should use these function when two or more threads might
931         access the variable simultaneously. You don't have to use a semaphore or a
932         mutex in this case.
934         \return The original value of \c value.
936         \sa atomic_or() for a version that works on an \c int32.
937         \sa atomic_get_and_set64()
938         \sa atomic_set64()
939         \sa atomic_test_and_set64()
940         \sa atomic_add64()
941         \sa atomic_and64()
942         \sa atomic_get64()
944         \since Haiku R1
949         \fn int64 atomic_get64(int64* value)
950         \brief Atomically return the value of \c value.
952         This is a thread-safe way of reading the contents of the \c value
953         operation. You should use these function when two or more threads might
954         access the variable simultaneously. You don't have to use a semaphore or a
955         mutex in this case. The variable must be naturally aligned.
957         \return The original value of \c value.
959         \sa atomic_get() for a version that works on an \c int32.
960         \sa atomic_get_and_set64()
961         \sa atomic_set64()
962         \sa atomic_test_and_set64()
963         \sa atomic_add64()
964         \sa atomic_and64()
965         \sa atomic_or64()
967         \since Haiku R1
971 //! @}
975         \fn void* get_stack_frame(void)
976         \brief Internal function.
977         \internal
982         \name Deprecated defines
986 //! @{
990         \def FALSE
991         \brief Obsolete. Use \c false.
993         \since BeOS R3
998         \def TRUE
999         \brief Obsolete. Use \c true.
1001         \since BeOS R3
1005 //! @}