This is Unofficial EPICS BASE Doxygen Site
osdgetexec.c
Go to the documentation of this file.
1 
2 #include <string.h>
3 #include <stdlib.h>
4 #include <unistd.h>
5 #include <limits.h>
6 
7 #include <osiFileName.h>
8 
9 #ifndef PATH_MAX
10 # define PATH_MAX 100
11 #endif
12 
13 char *epicsGetExecName(void)
14 {
15  size_t max = PATH_MAX;
16  char *ret = NULL;
17  ssize_t n;
18 
19  while(1) {
20  char *temp = realloc(ret, max);
21  if(!temp) {
22  /* we treat alloc failure as terminal */
23  free(ret);
24  ret = NULL;
25  break;
26  }
27  ret = temp;
28 
29  n = readlink("/proc/self/exe", ret, max);
30  if(n == -1) {
31  free(ret);
32  ret = NULL;
33  break;
34  } else if(n < max) {
35  /* readlink() never adds a nil */
36  ret[n] = '\0';
37  break;
38  }
39 
40  max += 64;
41  }
42 
43  return ret;
44 }
45 
46 char *epicsGetExecDir(void)
47 {
48  char *ret = epicsGetExecName();
49  if(ret) {
50  char *sep = strrchr(ret, '/');
51  if(sep) {
52  /* nil the charactor after the / */
53  sep[1] = '\0';
54  }
55  }
56  return ret;
57 }
#define max(x, y)
Definition: flexdef.h:81
#define NULL
Definition: catime.c:38
char * epicsGetExecName(void)
Definition: osdgetexec.c:9
#define PATH_MAX
Definition: osdgetexec.c:10
char * epicsGetExecDir(void)
Definition: osdgetexec.c:38