#ifndef __DYLD_PATH_OVERRIDES_H__
#define __DYLD_PATH_OVERRIDES_H__
#include <stdint.h>
#if !DYLD_IN_PROCESS
#include <vector>
#include <string>
#endif
#include "Logging.h"
#include "MachOParser.h"
namespace dyld3 {
class VIS_HIDDEN PathOverrides
{
public:
#if !BUILDING_LIBDYLD
~PathOverrides();
#endif
#if DYLD_IN_PROCESS
void setEnvVars(const char* envp[]);
void forEachPathVariant(const char* initialPath, void (^handler)(const char* possiblePath, bool& stop)) const;
#else
PathOverrides(const std::vector<std::string>& env);
void forEachPathVariant(const char* initialPath, Platform platform, void (^handler)(const char* possiblePath, bool& stop)) const;
#endif
uint32_t envVarCount() const;
void forEachEnvVar(void (^handler)(const char* envVar)) const;
void forEachInsertedDylib(void (^handler)(const char* dylibPath)) const;
private:
void forEachInColonList(const char* list, void (^callback)(const char* path));
const char** parseColonListIntoArray(const char* list);
void freeArray(const char** array);
void addEnvVar(const char* keyEqualsValue);
const char* getFrameworkPartialPath(const char* path) const;
static const char* getLibraryLeafName(const char* path);
void handleListEnvVar(const char* key, const char** list, void (^handler)(const char* envVar)) const;
void handleEnvVar(const char* key, const char* value, void (^handler)(const char* envVar)) const;
void forEachDylibFallback(Platform platform, void (^handler)(const char* fallbackDir, bool& stop)) const;
void forEachFrameworkFallback(Platform platform, void (^handler)(const char* fallbackDir, bool& stop)) const;
const char** _dylibPathOverrides = nullptr;
const char** _frameworkPathOverrides = nullptr;
const char** _dylibPathFallbacks = nullptr;
const char** _frameworkPathFallbacks = nullptr;
const char** _insertedDylibs = nullptr;
const char* _imageSuffix = nullptr;
const char* _rootPath = nullptr; };
#if BUILDING_LIBDYLD
extern PathOverrides gPathOverrides;
#endif
}
#endif // __DYLD_PATH_OVERRIDES_H__