Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions | Variables

darwin.c File Reference

#include "postgres.h"
#include <mach-o/dyld.h>
#include "dynloader.h"
Include dependency graph for darwin.c:

Go to the source code of this file.

Functions

void * pg_dlopen (char *filename)
void pg_dlclose (void *handle)
PGFunction pg_dlsym (void *handle, char *funcname)
char * pg_dlerror (void)

Variables

static NSObjectFileImageReturnCode cofiff_result = NSObjectFileImageFailure

Function Documentation

void pg_dlclose ( void *  handle  ) 

Definition at line 70 of file darwin.c.

{
    NSUnLinkModule(handle, FALSE);
}

char* pg_dlerror ( void   ) 

Definition at line 97 of file darwin.c.

{
    NSLinkEditErrors c;
    int         errorNumber;
    const char *fileName;
    const char *errorString = NULL;

    switch (cofiff_result)
    {
        case NSObjectFileImageSuccess:
            /* must have failed in NSLinkModule */
            NSLinkEditError(&c, &errorNumber, &fileName, &errorString);
            if (errorString == NULL || *errorString == '\0')
                errorString = "unknown link-edit failure";
            break;
        case NSObjectFileImageFailure:
            errorString = "failed to open object file";
            break;
        case NSObjectFileImageInappropriateFile:
            errorString = "inappropriate object file";
            break;
        case NSObjectFileImageArch:
            errorString = "object file is for wrong architecture";
            break;
        case NSObjectFileImageFormat:
            errorString = "object file has wrong format";
            break;
        case NSObjectFileImageAccess:
            errorString = "insufficient permissions for object file";
            break;
        default:
            errorString = "unknown failure to open object file";
            break;
    }

    return (char *) errorString;
}

void* pg_dlopen ( char *  filename  ) 

Definition at line 57 of file darwin.c.

{
    NSObjectFileImage image;

    cofiff_result = NSCreateObjectFileImageFromFile(filename, &image);
    if (cofiff_result != NSObjectFileImageSuccess)
        return NULL;
    return NSLinkModule(image, filename,
                        NSLINKMODULE_OPTION_BINDNOW |
                        NSLINKMODULE_OPTION_RETURN_ON_ERROR);
}

PGFunction pg_dlsym ( void *  handle,
char *  funcname 
)

Definition at line 76 of file darwin.c.

{
    NSSymbol symbol;
    char       *symname = (char *) malloc(strlen(funcname) + 2);

    sprintf(symname, "_%s", funcname);
    if (NSIsSymbolNameDefined(symname))
    {
        symbol = NSLookupAndBindSymbol(symname);

        free(symname);
        return (PGFunction) NSAddressOfSymbol(symbol);
    }
    else
    {
        free(symname);
        return NULL;
    }
}


Variable Documentation

NSObjectFileImageReturnCode cofiff_result = NSObjectFileImageFailure [static]

Definition at line 54 of file darwin.c.

Referenced by pg_dlerror(), and pg_dlopen().