1 // This is core/vpl/os_unix/vpl.cxx
2 // Include system headers for UNIX-like operating system :
3 #undef _XOPEN_SOURCE
4 #define _XOPEN_SOURCE 1 // necessary on alpha
5 #undef _XOPEN_SOURCE_EXTENDED
6 #define _XOPEN_SOURCE_EXTENDED 1 // usleep is not declared
7 #include <cstdlib>
8 #include <cstring>
9 extern "C"
10 {
11 #include <unistd.h>
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 }
15 #include "vxl_config.h" // for VXL_UNISTD_*
16
17 char *
vpl_getcwd(char * buf,std::size_t buf_size)18 vpl_getcwd(char * buf, std::size_t buf_size)
19 {
20 return getcwd(buf, buf_size);
21 }
22
23 int
vpl_mkdir(const char * dir,unsigned short mode)24 vpl_mkdir(const char * dir, unsigned short mode)
25 {
26 return mkdir(dir, (mode_t)mode);
27 }
28
29 int
vpl_rmdir(const char * dir)30 vpl_rmdir(const char * dir)
31 {
32 return rmdir(dir);
33 }
34
35 int
vpl_chdir(const char * dir)36 vpl_chdir(const char * dir)
37 {
38 return chdir(dir);
39 }
40
41 int
vpl_unlink(const char * file)42 vpl_unlink(const char * file)
43 {
44 return unlink(file);
45 }
46
47 unsigned int
vpl_sleep(unsigned int t)48 vpl_sleep(unsigned int t)
49 {
50 return sleep(t);
51 }
52
53 int
vpl_usleep(unsigned int t)54 vpl_usleep(unsigned int t)
55 {
56 // some implementations require argument to usleep < 1000000 :
57 if (t > 1000000)
58 sleep(t / 1000000);
59 t %= 1000000;
60 #if VXL_UNISTD_HAS_USLEEP
61 # if VXL_UNISTD_USLEEP_IS_VOID
62 usleep(t);
63 return 0;
64 # else
65 return usleep(t);
66 # endif
67 #else
68 return 0;
69 #endif
70 }
71
72 unsigned
vpl_getpid()73 vpl_getpid()
74 {
75 #if VXL_UNISTD_HAS_GETPID
76 return getpid();
77 #else
78 return 0;
79 #endif
80 }
81
82 int
vpl_putenv(const char * envvar)83 vpl_putenv(const char * envvar)
84 {
85 char * storage_space = strdup(envvar); // This causes a memory leak
86 // but this can't be helped
87 // Why copy the string? putenv is meant to take a const char* of the
88 // form "name=value". Also, putenv is neither ANSI C nor ANSI C++, but
89 // is often present in stdlib on most Unix-like systems. -- AGAP.
90 // But on some platforms (Linux), putenv "captures" the string. -- AGAP.
91
92 return putenv(storage_space);
93 }
94
95 int
vpl_gethostname(char * name,size_t len)96 vpl_gethostname(char * name, size_t len)
97 {
98 #if VXL_UNISTD_HAS_GETHOSTNAME
99 return gethostname(name, len);
100 #else
101 if (len)
102 *name = 0;
103 return -1;
104 #endif
105 }
106