/*
 * Copyright (c) 2016 MariaDB Corporation Ab
 *
 * Use of this software is governed by the Business Source License included
 * in the LICENSE.TXT file and at www.mariadb.com/bsl11.
 *
 * Change Date: 2020-01-01
 *
 * On the date above, in accordance with the Business Source License, use
 * of this software will be governed by version 2 or later of the General
 * Public License.
 */

#include <maxscale/paths.h>
#include <maxscale/alloc.h>
#include <maxscale/utils.h>

/**
 * Set the configuration file directory
 * @param str Path to directory
 */
void set_configdir(char* str)
{
    MXS_FREE(configdir);
    clean_up_pathname(str);
    configdir = str;
}

/**
 * Set the module configuration file directory
 * @param str Path to directory
 */
void set_module_configdir(char* str)
{
    MXS_FREE(module_configdir);
    clean_up_pathname(str);
    module_configdir = str;
}

/**
 * Set the configuration parts file directory
 * @param str Path to directory
 */
void set_config_persistdir(char* str)
{
    MXS_FREE(config_persistdir);
    clean_up_pathname(str);
    config_persistdir = str;
}

/**
 * Set the log file directory
 * @param str Path to directory
 */
void set_logdir(char* str)
{
    MXS_FREE(logdir);
    clean_up_pathname(str);
    logdir = str;
}

/**
 * Set the language file directory
 * @param str Path to directory
 */
void set_langdir(char* str)
{
    MXS_FREE(langdir);
    clean_up_pathname(str);
    langdir = str;
}

/**
 * Set the PID file directory
 * @param str Path to directory
 */
void set_piddir(char* str)
{
    MXS_FREE(piddir);
    clean_up_pathname(str);
    piddir = str;
}

/**
 * Set the cache directory
 * @param str Path to directory
 */
void set_cachedir(char* param)
{
    MXS_FREE(cachedir);
    clean_up_pathname(param);
    cachedir = param;
}

/**
 * Set the data directory
 * @param str Path to directory
 */
void set_datadir(char* param)
{
    MXS_FREE(maxscaledatadir);
    clean_up_pathname(param);
    maxscaledatadir = param;
}

/**
 * Set the data directory
 * @param str Path to directory
 */
void set_process_datadir(char* param)
{
    MXS_FREE(processdatadir);
    clean_up_pathname(param);
    processdatadir = param;
}

/**
 * Set the library directory. Modules will be loaded from here.
 * @param str Path to directory
 */
void set_libdir(char* param)
{
    MXS_FREE(libdir);
    clean_up_pathname(param);
    libdir = param;
}

/**
 * Set the executable directory. Internal processes will look for executables
 * from here.
 * @param str Path to directory
 */
void set_execdir(char* param)
{
    MXS_FREE(execdir);
    clean_up_pathname(param);
    execdir = param;
}

/**
 * Set the connector plugin directory.
 * @param str Path to directory
 */
void set_connector_plugindir(char* param)
{
    MXS_FREE(connector_plugindir);
    clean_up_pathname(param);
    connector_plugindir = param;
}

/**
 * Get the directory with all the modules.
 * @return The module directory
 */
char* get_libdir()
{
    return libdir ? libdir : (char*) default_libdir;
}

/**
 * Get the service cache directory
 * @return The path to the cache directory
 */
char* get_cachedir()
{
    return cachedir ? cachedir : (char*) default_cachedir;
}

/**
 * Get the MaxScale data directory
 * @return The path to the data directory
 */
char* get_datadir()
{
    return maxscaledatadir ? maxscaledatadir : (char*) default_datadir;
}

/**
 * Get the process specific data directory
 * @return The path to the process specific directory
 */
char* get_process_datadir()
{
    return processdatadir ? processdatadir : (char*) default_datadir;
}

/**
 * Get the configuration file directory
 * @return The path to the configuration file directory
 */
char* get_configdir()
{
    return configdir ? configdir : (char*) default_configdir;
}

/**
 * Get the module configuration file directory
 * @return The path to the module configuration file directory
 */
char* get_module_configdir()
{
    return module_configdir ? module_configdir : (char*) default_module_configdir;
}

/**
 * Get the configuration file directory
 * @return The path to the configuration file directory
 */
char* get_config_persistdir()
{
    return config_persistdir ? config_persistdir : (char*) default_config_persistdir;
}

/**
 * Get the PID file directory which contains maxscale.pid
 * @return Path to the PID file directory
 */
char* get_piddir()
{
    return piddir ? piddir : (char*) default_piddir;
}

/**
 * Return the log file directory
 * @return Path to the log file directory
 */
char* get_logdir()
{
    return logdir ? logdir : (char*) default_logdir;
}

/**
 * Path to the directory which contains the errmsg.sys language file
 * @return Path to the language file directory
 */
char* get_langdir()
{
    return langdir ? langdir : (char*) default_langdir;
}

/**
 * Get the directory with the executables.
 * @return The executables directory
 */
char* get_execdir()
{
    return execdir ? execdir : (char*) default_execdir;
}

/**
 * Get connector plugin directory
 * @return The connector plugin directory
 */
char* get_connector_plugindir()
{
    return connector_plugindir ? connector_plugindir : (char*) default_connector_plugindir;
}
