|
Tesseract
3.02
|
Go to the source code of this file.
Functions | |
| DLLSYM inT8 | getpath (const char *code, const STRING &dll_module_name, STRING &path) |
Definition at line 40 of file basedir.cpp.
{
char directory[MAX_PATH]; //main directory
#ifdef __UNIX__
inT16 dirind; //index in directory
register char *pathlist; //$PATH
int fd; //file descriptor
strcpy(directory, code); //get demo directory
dirind = strlen (directory);
while (dirind > 0 && directory[dirind - 1] != '/')
dirind--; //look back for dirname
directory[dirind] = '\0'; //end at directory
if (dirind != 0) {
path = directory; //had it in arg
return 0;
}
pathlist = getenv ("PATH"); //find search path
while (pathlist != NULL && *pathlist) {
for (dirind = 0; *pathlist != '\0' && *pathlist != ':';)
//copy a directory
directory[dirind++] = *pathlist++;
if (*pathlist == ':')
pathlist++;
if (dirind == 0)
continue;
if (directory[dirind - 1] != '/');
directory[dirind++] = '/'; //add ending slash
directory[dirind++] = '\0';
path = directory; //try this path
strcat(directory, code);
fd = open (directory, 0);
if (fd >= 0) {
close(fd); //found it
return 0;
}
}
strcpy (directory, "./");
path = directory; //in current?
strcat(directory, code);
fd = open (directory, 0);
if (fd >= 0) {
close(fd);
return 0; //in current after all
}
return -1;
#endif
#ifdef _WIN32
char *path_end; //end of dir
if (code == NULL) {
// Attempt to get the path of the most relevant module. If the dll
// is being used, this will be the dll. Otherwise GetModuleHandle will
// return NULL and default to the path of the executable.
if (GetModuleFileName(GetModuleHandle(dll_module_name.string()),
directory, MAX_PATH - 1) == 0) {
return -1;
}
} else {
strncpy(directory, code, MAX_PATH - 1);
}
while ((path_end = strchr (directory, '\\')) != NULL)
*path_end = '/';
path_end = strrchr (directory, '/');
if (path_end != NULL)
path_end[1] = '\0';
else
strcpy (directory, "./");
path = directory;
return 0;
#endif
}