-
Notifications
You must be signed in to change notification settings - Fork 0
/
glm_util.cpp
131 lines (114 loc) · 2.44 KB
/
glm_util.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include "glm.h"
#include "glmint.h"
#ifndef HAVE_STRDUP
/* strdup is actually not a standard ANSI C or POSIX routine
so implement a private one for GLM. OpenVMS does not have a
strdup; Linux's standard libc doesn't declare strdup by default
(unless BSD or SVID interfaces are requested). */
char *
__glmStrdup(const char *string)
{
char *copy;
copy = (char*) malloc(strlen(string) + 1);
if (copy == NULL)
return NULL;
strcpy(copy, string);
return copy;
}
#endif
/* strip leading and trailing whitespace from a string and return a newly
allocated string containing the result (or NULL if the string is only
whitespace)*/
char *
__glmStrStrip(const char *s)
{
int first;
int last = strlen(s)-1;
int len;
int i;
char * rets;
i=0;
while(i <= last &&
(s[i]==' ' || s[i]=='\t' || s[i]=='\n' || s[i]=='\r'))
i++;
if (i>last)
return NULL;
first = i;
i = last;
while(i > first &&
(s[i]==' ' || s[i]=='\t' || s[i]=='\n' || s[i]=='\r'))
i--;
last = i;
len = last-first+1;
rets = (char*)malloc(len+1); /* add a trailing 0 */
memcpy(rets, s + first, len);
rets[len] = 0;
return rets;
}
void
__glmWarning(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLM: Warning: ");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
}
/* CENTRY */
void
__glmReportErrors(void)
{
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR)
__glmWarning("GL error: %s", gluErrorString(error));
}
/* ENDCENTRY */
void
__glmFatalError(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLM: Fatal Error: ");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
exit(1);
}
void
__glmFatalUsage(char *format,...)
{
va_list args;
va_start(args, format);
fprintf(stderr, "GLM: Fatal API Usage: ");
vfprintf(stderr, format, args);
va_end(args);
putc('\n', stderr);
abort();
}
/* glmDirName: return the directory given a path
*
* path - filesystem path
*
* NOTE: the return value should be free'd.
*/
char*
__glmDirName(char* path)
{
char* dir;
char* s;
dir = __glmStrdup(path);
s = strrchr(dir, '/');
if (s)
s[1] = '\0';
else
dir[0] = '\0';
return dir;
}