/* Platform-specific defaults for OpenWebSpider. */

#ifndef OWS_PLATFORM_H
#define OWS_PLATFORM_H

#include <stdio.h>
#include <string.h>

#if defined(_WIN32) && !defined(WIN32)
#define WIN32
#endif

#ifdef WIN32
#define OWS_MODULE_EXT ".dll"
#define OWS_TMP_DIR "."
#define OWS_DEFAULT_FFPROBE "ffprobe.exe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext.exe"
#define OWS_DEFAULT_PDFINFO "pdfinfo.exe"
#elif defined(__APPLE__)
#define OWS_MODULE_EXT ".dylib"
#define OWS_TMP_DIR "/tmp"
#define OWS_DEFAULT_FFPROBE "ffprobe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext"
#define OWS_DEFAULT_PDFINFO "pdfinfo"
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
#define OWS_MODULE_EXT ".so"
#define OWS_TMP_DIR "/tmp"
#define OWS_DEFAULT_FFPROBE "ffprobe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext"
#define OWS_DEFAULT_PDFINFO "pdfinfo"
#elif defined(_AIX) || defined(__PASE__) || defined(__OS400__)
#define OWS_MODULE_EXT ".so"
#define OWS_TMP_DIR "/tmp"
#define OWS_DEFAULT_FFPROBE "ffprobe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext"
#define OWS_DEFAULT_PDFINFO "pdfinfo"
#elif defined(__s390__) || defined(__s390x__)
#define OWS_MODULE_EXT ".so"
#define OWS_TMP_DIR "/tmp"
#define OWS_DEFAULT_FFPROBE "ffprobe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext"
#define OWS_DEFAULT_PDFINFO "pdfinfo"
#else
#define OWS_MODULE_EXT ".so"
#define OWS_TMP_DIR "/tmp"
#define OWS_DEFAULT_FFPROBE "/usr/bin/ffprobe"
#define OWS_DEFAULT_PDFTOTEXT "pdftotext"
#define OWS_DEFAULT_PDFINFO "pdfinfo"
#endif

#define OWS_TMP_TEMPLATE(name) OWS_TMP_DIR "/" name

#ifndef OWS_SYSCONFDIR
#define OWS_SYSCONFDIR "."
#endif

#ifdef WIN32
#define OWS_PATH_SEP "\\"
#else
#define OWS_PATH_SEP "/"
#endif

static FILE *ows_fopen_config(const char *filename, const char *mode, char *resolved, size_t resolvedSize)
{
    FILE *fp;
    char path[1024];

    if(resolved && resolvedSize > 0)
        resolved[0] = 0;

    if(!filename || !mode)
        return NULL;

    fp = fopen(filename, mode);
    if(fp)
    {
        if(resolved && resolvedSize > 0)
        {
            strncpy(resolved, filename, resolvedSize - 1);
            resolved[resolvedSize - 1] = 0;
        }
        return fp;
    }

    if(strcmp(OWS_SYSCONFDIR, ".") == 0 || OWS_SYSCONFDIR[0] == 0)
        return NULL;

    snprintf(path, sizeof(path), "%s%s%s", OWS_SYSCONFDIR, OWS_PATH_SEP, filename);
    path[sizeof(path) - 1] = 0;

    fp = fopen(path, mode);
    if(fp && resolved && resolvedSize > 0)
    {
        strncpy(resolved, path, resolvedSize - 1);
        resolved[resolvedSize - 1] = 0;
    }

    return fp;
}

#endif
