ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/paths.h
Revision: 2.18
Committed: Mon Jul 14 20:02:29 2003 UTC (20 years, 9 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 2.17: +2 -1 lines
Log Message:
Moved some more platform dependencies to common header files.
Included a few necessary system headers.

File Contents

# Content
1 /* RCSid $Id: paths.h,v 2.17 2003/07/03 22:41:44 schorsch Exp $ */
2 /*
3 * Definitions for paths on different machines
4 */
5 #ifndef _RAD_PATHS_H_
6 #define _RAD_PATHS_H_
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <fcntl.h>
15 #include <sys/types.h>
16 #include <sys/stat.h>
17
18 #ifdef _WIN32
19 #include <io.h>
20 #include <direct.h> /* getcwd(), chdir(), etc. */
21
22 #define access _access
23 #define PATH_MAX _MAX_PATH
24 #define DIRSEP '/'
25 #define ISDIRSEP(c) ((c)=='/' || (c)=='\\')
26 #define ISABS(s) ((s)!=NULL \
27 && (s[0])!='\0' \
28 && ( ISDIRSEP(s[0]) \
29 || ( (s[1])!='\0' \
30 && (isupper(s[0])||islower(s[0])) \
31 && (s[1])==':')))
32 #define CASEDIRSEP case '/': case '\\'
33 #define PATHSEP ';'
34 #define CURDIR '.'
35 #define DEFAULT_TEMPDIRS {"C:/TMP", "C:/TEMP", ".", NULL}
36 #define TEMPLATE "rtXXXXXX"
37 #define TEMPLEN 8
38 #define ULIBVAR "RAYPATH"
39 #ifndef DEFPATH
40 #define DEFPATH ";c:/ray/lib"
41 #endif
42 /* <io.h> only does half the work for access() */
43 #ifndef F_OK
44 #define F_OK 00
45 #define X_OK 01
46 #define W_OK 02
47 #define R_OK 04
48 #endif
49 /* to make the permissions user specific we'd need to use CreateFile() */
50 #ifndef S_IRUSR
51 #define S_IRUSR _S_IREAD
52 #define S_IWUSR _S_IWRITE
53 #endif
54 extern char *fixargv0();
55
56 #else /* everything but Windows */
57 #include <unistd.h>
58 #include <sys/param.h>
59
60 #define RMAX_PATH_MAX 4096 /* our own maximum */
61 #ifndef PATH_MAX
62 #define PATH_MAX 512
63 #elif PATH_MAX > RMAX_PATH_MAX /* the OS is exaggerating */
64 #undef PATH_MAX
65 #define PATH_MAX RMAX_PATH_MAX
66 #endif
67
68 #ifdef AMIGA
69
70 #define DIRSEP '/'
71 #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
72 #define PATHSEP ';'
73 #define CURDIR '.'
74 #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
75 #define TEMPLATE "/tmp/rtXXXXXX"
76 #define TEMPLEN 13
77 #define ULIBVAR "RAYPATH"
78 #ifndef DEFPATH
79 #define DEFPATH ";/ray/lib"
80 #endif
81 #define fixargv0(a0) (a0)
82
83 #else
84
85 /* posix */
86
87 /* this is defined as _PATH_DEVNULL in /usr/include/paths.h on Linux */
88 #define NULL_DEVICE "/dev/null"
89 #define DIRSEP '/'
90 #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
91 #define PATHSEP ':'
92 #define CURDIR '.'
93 #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
94 #define TEMPLATE "/usr/tmp/rtXXXXXX"
95 #define TEMPLEN 17
96 #define ULIBVAR "RAYPATH"
97 #ifndef DEFPATH
98 #define DEFPATH ":/usr/local/lib/ray"
99 #endif
100 #define fixargv0(a0) (a0)
101
102 #endif
103 #endif
104
105 #ifndef ISDIRSEP
106 #define ISDIRSEP(c) ((c)==DIRSEP)
107 #endif
108 #ifndef CASEDIRSEP
109 #define CASEDIRSEP case DIRSEP
110 #endif
111
112
113 /* Find a writeable directory for temporary files */
114 /* If s is NULL, we return a static string */
115 extern char *temp_directory(char *s, size_t len);
116
117 /* Compose a *currently* unique name within a temporary directory */
118 /* If s is NULL, we return a static string */
119 /* If templ is NULL, we take our default template */
120 /* WARNING: On Windows, there's a maximum of 27 unique names within
121 one process for the same template. */
122 extern char *temp_filename(char *s, size_t len, char *templ);
123
124 /* Same as above, but also open the file and return the descriptor */
125 /* This one is supposed to protect against race conditions on unix */
126 /* WARNING: On Windows, there's no protection against race conditions */
127 extern int temp_fd(char *s, size_t len, char *templ);
128
129 /* Same as above, but return a file pointer instead of a descriptor */
130 extern FILE *temp_fp(char *s, size_t len, char *templ);
131
132 /* Concatenate two strings, leaving exactly one DIRSEP in between */
133 extern char *append_filepath(char *s1, char *s2, size_t len);
134
135
136 #ifdef __cplusplus
137 }
138 #endif
139 #endif /* _RAD_PATHS_H_ */
140