ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/paths.h
Revision: 2.13
Committed: Sun Jun 8 12:01:52 2003 UTC (20 years, 10 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 2.12: +49 -1 lines
Log Message:
Cross-platform functions to find a writeable directory for tempfiles,
create unique filenames therein, and create a file.

File Contents

# User Rev Content
1 schorsch 2.13 /* RCSid $Id: paths.h,v 2.12 2003/06/06 16:38:47 schorsch Exp $ */
2 greg 2.1 /*
3     * Definitions for paths on different machines
4 greg 2.9 */
5 schorsch 2.12 #ifndef _RAD_PATHS_H_
6     #define _RAD_PATHS_H_
7     #ifdef __cplusplus
8     extern "C" {
9     #endif
10 greg 2.9
11 greg 2.10 #include "copyright.h"
12 greg 2.1
13 schorsch 2.13 #include <stdlib.h>
14     #include <string.h>
15     #ifdef _WIN32
16     #include <io.h>
17     #define access _access
18     #define PATH_MAX _MAX_PATH
19     #else /* _WIN32 */
20     #include <unistd.h>
21     #include <sys/param.h>
22     #endif /* _WIN32 */
23    
24 schorsch 2.11 #ifdef _WIN32
25 greg 2.1
26 greg 2.2 #define DIRSEP '/'
27     #define ISDIRSEP(c) ((c)=='/' || (c)=='\\')
28 schorsch 2.13 #define ISABS(s) ((s)!=NULL \
29     && (s[0])!='\0' \
30     && ( ISDIRSEP(s[0]) \
31     || ( (s[1])!='\0' \
32     && (isupper(s[0])||islower(s[0])) \
33     && (s[1])==':')))
34 greg 2.2 #define CASEDIRSEP case '/': case '\\'
35 greg 2.1 #define PATHSEP ';'
36 greg 2.2 #define MAXPATH 128
37 schorsch 2.13 #define DEFAULT_TEMPDIRS {"C:/TMP", "C:/TEMP", ".", NULL}
38 greg 2.7 #define TEMPLATE "rtXXXXXX"
39     #define TEMPLEN 8
40 greg 2.1 #define ULIBVAR "RAYPATH"
41 greg 2.3 #ifndef DEFPATH
42     #define DEFPATH ";c:/ray/lib"
43 greg 2.1 #endif
44 schorsch 2.13 /* <io.h> only does half the work for access() */
45     #ifndef F_OK
46     #define F_OK 00
47     #define W_OK 02
48     #define R_OK 04
49     #endif
50 greg 2.4 extern char *fixargv0();
51 greg 2.1
52 greg 2.3 #else
53 greg 2.1 #ifdef AMIGA
54    
55     #define DIRSEP '/'
56 schorsch 2.13 #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
57 greg 2.1 #define PATHSEP ';'
58 greg 2.2 #define MAXPATH 128
59 schorsch 2.13 #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
60 greg 2.1 #define TEMPLATE "/tmp/rtXXXXXX"
61     #define TEMPLEN 13
62     #define ULIBVAR "RAYPATH"
63 greg 2.3 #ifndef DEFPATH
64     #define DEFPATH ";/ray/lib"
65 greg 2.1 #endif
66 greg 2.4 #define fixargv0(a0) (a0)
67 greg 2.1
68     #else
69    
70     #define DIRSEP '/'
71 schorsch 2.13 #define ISABS(s) ((s)!=NULL && (ISDIRSEP(s[0])))
72 greg 2.1 #define PATHSEP ':'
73 greg 2.2 #define MAXPATH 256
74 schorsch 2.13 #define DEFAULT_TEMPDIRS {"/var/tmp", "/usr/tmp", "/tmp", ".", NULL}
75 greg 2.5 #define TEMPLATE "/usr/tmp/rtXXXXXX"
76 greg 2.6 #define TEMPLEN 17
77 greg 2.1 #define ULIBVAR "RAYPATH"
78 greg 2.3 #ifndef DEFPATH
79     #define DEFPATH ":/usr/local/lib/ray"
80 greg 2.1 #endif
81 greg 2.4 #define fixargv0(a0) (a0)
82 greg 2.1
83 greg 2.3 #endif
84 greg 2.2 #endif
85    
86     #ifndef ISDIRSEP
87     #define ISDIRSEP(c) ((c)==DIRSEP)
88     #endif
89     #ifndef CASEDIRSEP
90     #define CASEDIRSEP case DIRSEP
91 greg 2.1 #endif
92    
93     extern char *mktemp(), *getenv();
94 greg 2.8
95     #ifdef BSD
96     extern char *getwd();
97     #else
98     extern char *getcwd();
99     #define getwd(p) getcwd(p, sizeof(p))
100     #endif
101 schorsch 2.13
102    
103     /* Find a writeable directory for temporary files */
104     /* If s is NULL, we return a static string */
105     extern char *temp_directory(char *s, size_t len);
106    
107     /* Compose a *currently* unique name within a temporary directory */
108     /* If s is NULL, we return a static string */
109     /* If templ is NULL, we take our default template */
110     /* WARNING: On Windows, there's a maximum of 27 unique names within
111     one process for the same template. */
112     extern char *temp_filename(char *s, size_t len, char *templ);
113    
114     /* Same as above, but also open the file and return the descriptor */
115     /* This one is supposed to protect against race conditions on unix */
116     /* WARNING: On Windows, there's no protection against race conditions */
117     extern int temp_file(char *s, size_t len, char *templ);
118    
119     /* Concatenate two strings, leaving exactly one DIRSEP in between */
120     extern char *append_filepath(char *s1, char *s2, size_t len);
121 schorsch 2.12
122    
123     #ifdef __cplusplus
124     }
125     #endif
126     #endif /* _RAD_PATHS_H_ */
127