Skip to content

Commit 0fcdbff

Browse files
committed
finished copying inside exception_create
1 parent 0e67549 commit 0fcdbff

File tree

1 file changed

+72
-2
lines changed

1 file changed

+72
-2
lines changed

source/reflect/source/reflect_exception.c

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,84 @@ exception exception_create(const char *message, const char *label, int code, con
4242

4343
if (ex == NULL)
4444
{
45-
return NULL;
45+
goto exception_bad_alloc;
46+
}
47+
48+
if (message != NULL)
49+
{
50+
size_t message_size = strlen(message) + 1;
51+
52+
ex->message = malloc(sizeof(char) * message_size);
53+
54+
if (ex->message == NULL)
55+
{
56+
goto message_bad_alloc;
57+
}
58+
59+
memcpy(ex->message, message, message_size);
60+
}
61+
else
62+
{
63+
ex->message = NULL;
4664
}
4765

48-
// TODO: Copy
66+
if (label != NULL)
67+
{
68+
size_t label_size = strlen(label) + 1;
69+
70+
ex->label = malloc(sizeof(char) * label_size);
71+
72+
if (ex->label == NULL)
73+
{
74+
goto label_bad_alloc;
75+
}
76+
77+
memcpy(ex->label, label, label_size);
78+
}
79+
else
80+
{
81+
ex->label = NULL;
82+
}
83+
84+
if (stacktrace != NULL)
85+
{
86+
size_t stacktrace_size = strlen(stacktrace) + 1;
87+
88+
ex->stacktrace = malloc(sizeof(char) * stacktrace_size);
89+
90+
if (ex->stacktrace == NULL)
91+
{
92+
goto stacktrace_bad_alloc;
93+
}
94+
95+
memcpy(ex->stacktrace, stacktrace, stacktrace_size);
96+
}
97+
else
98+
{
99+
ex->stacktrace = NULL;
100+
}
101+
102+
ex->code = code;
49103

50104
ex->id = thread_id_get_current();
51105

52106
return ex;
107+
108+
stacktrace_bad_alloc:
109+
110+
free(ex->label);
111+
112+
label_bad_alloc:
113+
114+
free(ex->message);
115+
116+
message_bad_alloc:
117+
118+
free(ex);
119+
120+
exception_bad_alloc:
121+
122+
return NULL;
53123
}
54124

55125
const char *exception_message(exception ex)

0 commit comments

Comments
 (0)