master
  1/*
  2 * Copyright (c) 2004-2008 Apple Inc. All rights reserved.
  3 *
  4 * @APPLE_LICENSE_HEADER_START@
  5 * 
  6 * This file contains Original Code and/or Modifications of Original Code
  7 * as defined in and that are subject to the Apple Public Source License
  8 * Version 2.0 (the 'License'). You may not use this file except in
  9 * compliance with the License. Please obtain a copy of the License at
 10 * http://www.opensource.apple.com/apsl/ and read it before using this
 11 * file.
 12 * 
 13 * The Original Code and all software distributed under the License are
 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 18 * Please see the License for the specific language governing rights and
 19 * limitations under the License.
 20 * 
 21 * @APPLE_LICENSE_HEADER_END@
 22 */
 23
 24/*
 25  Based on the dlcompat work done by:
 26		Jorge Acereda  <jacereda@users.sourceforge.net> &
 27		Peter O'Gorman <ogorman@users.sourceforge.net>
 28*/
 29
 30#ifndef _DLFCN_H_
 31#define _DLFCN_H_
 32
 33#include <sys/cdefs.h>
 34
 35#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 36#include <stdbool.h>
 37#include <Availability.h>
 38
 39#define __DYLDDL_UNAVAILABLE       __API_UNAVAILABLE(driverkit)
 40
 41#define __DYLDDL_DLSYM_UNAVAILABLE __API_UNAVAILABLE(driverkit)
 42
 43
 44#ifdef __cplusplus
 45extern "C" {
 46#endif
 47
 48/*
 49 * Structure filled in by dladdr().
 50 */
 51typedef struct dl_info {
 52        const char      *dli_fname;     /* Pathname of shared object */
 53        void            *dli_fbase;     /* Base address of shared object */
 54        const char      *dli_sname;     /* Name of nearest symbol */
 55        void            *dli_saddr;     /* Address of nearest symbol */
 56} Dl_info;
 57
 58extern int dladdr(const void *, Dl_info *);
 59
 60#ifdef __cplusplus
 61}
 62#endif
 63
 64#else
 65#define __DYLDDL_UNAVAILABLE
 66#define __DYLDDL_DLSYM_UNAVAILABLE
 67#endif /* not POSIX */
 68
 69#ifdef __cplusplus
 70extern "C" {
 71#endif
 72
 73extern int dlclose(void * __handle) __DYLDDL_UNAVAILABLE;
 74extern char * dlerror(void) __DYLDDL_UNAVAILABLE;
 75extern void * dlopen(const char * __path, int __mode) __DYLDDL_UNAVAILABLE;
 76extern void * dlsym(void * __handle, const char * __symbol) __DYLDDL_DLSYM_UNAVAILABLE;
 77
 78#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 79extern bool dlopen_preflight(const char* __path) __API_AVAILABLE(macos(10.5), ios(2.0)) __DYLDDL_UNAVAILABLE;
 80#endif /* not POSIX */
 81
 82
 83#define RTLD_LAZY	0x1
 84#define RTLD_NOW	0x2
 85#define RTLD_LOCAL	0x4
 86#define RTLD_GLOBAL	0x8
 87
 88#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
 89#define RTLD_NOLOAD	0x10
 90#define RTLD_NODELETE	0x80
 91#define RTLD_FIRST	0x100	/* Mac OS X 10.5 and later */
 92
 93/*
 94 * Special handle arguments for dlsym().
 95 */
 96#define	RTLD_NEXT	((void *) -1)	/* Search subsequent objects. */
 97#define	RTLD_DEFAULT	((void *) -2)	/* Use default search algorithm. */
 98#define	RTLD_SELF	((void *) -3)	/* Search this and subsequent objects (Mac OS X 10.5 and later) */
 99#define	RTLD_MAIN_ONLY	((void *) -5)	/* Search main executable only (Mac OS X 10.5 and later) */
100#endif /* not POSIX */
101
102#ifdef __cplusplus
103}
104#endif
105
106#endif /* _DLFCN_H_ */