3 ** This program is distributed under the GNU General Public License, version 2.
4 ** A copy of this license is included with this source.
6 ** Copyright 2000, Michael Smith <msmith@xiph.org>
8 ** Portions from Vorbize, (c) Kenneth Arnold <kcarnold-xiph@arnoldnet.net>
9 ** and libvorbis examples, (c) Monty <monty@xiph.org>
12 /* Platform support routines - win32, OS/2, unix */
23 #if defined(_WIN32) || defined(__EMX__) || defined(__WATCOMC__)
29 #if defined(_WIN32) && defined(_MSC_VER)
31 void setbinmode(FILE *f
)
33 _setmode( _fileno(f
), _O_BINARY
);
38 void setbinmode(FILE *f
)
44 #if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(__MINGW32__)
45 void setbinmode(FILE *f
)
47 setmode(fileno(f
), O_BINARY
);
52 #if defined(_WIN32) || defined(__EMX__) || defined(__WATCOMC__)
53 void *timer_start(void)
55 time_t *start
= malloc(sizeof(time_t));
60 double timer_time(void *timer
)
62 time_t now
= time(NULL
);
63 time_t start
= *((time_t *)timer
);
66 return (double)(now
-start
);
68 return 1; /* To avoid division by zero later, for very short inputs */
72 void timer_clear(void *timer
)
74 free((time_t *)timer
);
77 #else /* unix. Or at least win32 */
82 void *timer_start(void)
84 struct timeval
*start
= malloc(sizeof(struct timeval
));
85 gettimeofday(start
, NULL
);
89 double timer_time(void *timer
)
92 struct timeval start
= *((struct timeval
*)timer
);
94 gettimeofday(&now
, NULL
);
96 return (double)now
.tv_sec
- (double)start
.tv_sec
+
97 ((double)now
.tv_usec
- (double)start
.tv_usec
)/1000000.0;
100 void timer_clear(void *timer
)
102 free((time_t *)timer
);
109 #include <sys/types.h>
110 #include <sys/stat.h>
116 #define PATH_SEPS "/\\"
117 #define mkdir(x,y) _mkdir((x))
119 /* MSVC does this, borland doesn't? */
126 #define PATH_SEPS "/"
130 int create_directories(char *fn
)
134 char *segment
= malloc(strlen(fn
)+1);
138 if(strlen(fn
) >= 3 && isalpha(fn
[0]) && fn
[1]==':')
142 while((end
= strpbrk(start
+1, PATH_SEPS
)) != NULL
)
144 memcpy(segment
, fn
, end
-fn
);
147 if(stat(segment
,&statbuf
)) {
148 if(errno
== ENOENT
) {
149 if(mkdir(segment
, 0777)) {
150 fprintf(stderr
, _("Couldn't create directory \"%s\": %s\n"),
151 segment
, strerror(errno
));
157 fprintf(stderr
, _("Error checking for existence of directory %s: %s\n"),
158 segment
, strerror(errno
));
163 #if defined(_WIN32) && !defined(__BORLANDC__)
164 else if(!(_S_IFDIR
& statbuf
.st_mode
)) {
165 #elif defined(__BORLANDC__)
166 else if(!(S_IFDIR
& statbuf
.st_mode
)) {
168 else if(!S_ISDIR(statbuf
.st_mode
)) {
170 fprintf(stderr
, _("Error: path segment \"%s\" is not a directory\n"),