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
|
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
|
-
+
-
+
-
-
+
+
-
-
+
+
|
# define __NOLIBBASE__
# define Class IntuitionClass
# include <proto/intuition.h>
# undef Class
# undef __NOLIBBASE__
#endif
static objc_enumeration_mutation_handler_t enumerationMutationHandler = NULL;
static objc_enumeration_mutation_handler enumerationMutationHandler = NULL;
void
objc_enumerationMutation(id object)
{
if (enumerationMutationHandler != NULL)
enumerationMutationHandler(object);
else
OBJC_ERROR("Object was mutated during enumeration!");
}
void
objc_setEnumerationMutationHandler(objc_enumeration_mutation_handler_t handler)
objc_setEnumerationMutationHandler(objc_enumeration_mutation_handler handler)
{
enumerationMutationHandler = handler;
}
void
objc_error(const char *title, const char *format, ...)
{
#if defined(OF_WINDOWS) || defined(OF_AMIGAOS)
# define BUF_LEN 512
char message[BUF_LEN];
# define messageLen 512
char message[messageLen];
int status;
va_list args;
va_start(args, format);
status = vsnprintf(message, BUF_LEN, format, args);
if (status <= 0 || status >= BUF_LEN)
status = vsnprintf(message, messageLen, format, args);
if (status <= 0 || status >= messageLen)
message[0] = '\0';
va_end(args);
# undef BUF_LEN
#endif
#if defined(OF_WINDOWS)
fprintf(stderr, "[%s] %s\n", title, message);
|
127
128
129
130
131
132
133
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
va_end(args);
abort();
#endif
OF_UNREACHABLE
}
char *
objc_strdup(const char *string)
{
char *copy;
size_t length = strlen(string);
if ((copy = (char *)malloc(length + 1)) == NULL)
return NULL;
memcpy(copy, string, length + 1);
return copy;
}
|