- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL (falls
- through) */
- }
-#endif /* WIN32 */
-
-#ifdef SOLARIS
- char *p = getexecname();
- if (p)
- {
- /* According to the Sun manpages, getexecname will
- "normally" return an */
- /* absolute path - BUT might not... AND that IF it is not,
- pre-pending */
- /* getcwd() will "usually" be the correct thing... Urgh!
- */
-
- /* check pathname is absolute (begins with a / ???) */
- if (p[0] == '/') /* assume this means we have an
- absolute path */
- {
- strncpy(pname, p, pathsize);
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- }
- else /* if not, prepend getcwd() then check if file
- exists */
- {
- getcwd(pname, pathsize);
- long result = strlen(pname);
- strncat(pname, "/", (pathsize - result));
- result ++;
- strncat(pname, p, (pathsize - result));
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL
- (falls through) */
- }
- }
-#endif /* SOLARIS */
-
-#ifdef MACOSX /* assume this is OSX */
- /*
- from http://www.hmug.org/man/3/NSModule.html
-
- extern int _NSGetExecutablePath(char *buf, unsigned long
- *bufsize);
-
- _NSGetExecutablePath copies the path of the executable
- into the buffer and returns 0 if the path was successfully
- copied in the provided buffer. If the buffer is not large
- enough, -1 is returned and the expected buffer size is
- copied in *bufsize. Note that _NSGetExecutablePath will
- return "a path" to the executable not a "real path" to the
- executable. That is the path may be a symbolic link and
- not the real file. And with deep directories the total
- bufsize needed could be more than MAXPATHLEN.
- */
- int status = -1;
- char *given_path = (char*)malloc(MAXPATHLEN * 2);
- if (!given_path) return status;
-
- uint32_t npathsize = MAXPATHLEN * 2;
- long result = _NSGetExecutablePath(given_path, &npathsize);
- if (result == 0)
- { /* OK, we got something - now try and resolve the real path...
- */
- if (realpath(given_path, pname) != NULL)
- {
- if ((access(pname, 0) == 0))
- status = 0; /* file exists, return OK */
- }
- }
- free (given_path);
- return status;
-#endif /* MACOSX */
-
- return -1; /* Path Lookup Failed */
- }
-
-
-
- //=========================================================================
- std::string ConfigurationFile::GetExecutablePath()
- {
- char name[PATH_MAX];
- int err = get_app_path(name, PATH_MAX);
- if (err)
- {
- bbtkError("Could not determine current executable path ?");
- }
-
- // remove the exe name
- char *slash;
- slash = strrchr(name, VALID_FILE_SEPARATOR_CHAR);
- if (slash)
- {
- *slash = 0;
- }
-printf("EED ConfigurationFile::GetExecutablePath %s\n",name);
- return name;
- }
-
-/*
- /// \todo : Think to delete it!
- char *buf = (char *)malloc(512);
- if (!buf)
- {
- bbtkError("Could not allocate 512 bytes !");
- }
- char *slash;
-
-#if defined(WIN32)
- GetModuleFileName(NULL, buf, 511);
- slash = strrchr(buf, '\\');
- if (slash)
- {
- *slash = 0;
- }
-#endif
-
-
-#if defined(__GNUC__)
- int res;
- res = readlink("/proc/self/exe", buf, 512);
- if (res == -1)
- {
- free(buf);
-
- }
- buf[res] = 0;
- slash = strrchr(buf, '/');
- if (slash)
- {
- *slash = 0;
- }
-#endif
- std::string ret(buf);
- free(buf);
- return ret;
- }
- //=========================================================================
-*/