Skip to content

Commit 3e211bd

Browse files
implement error context management
1 parent 097352f commit 3e211bd

File tree

6 files changed

+70
-3
lines changed

6 files changed

+70
-3
lines changed

src/crocket.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
#include "crocket_base.h"
55

66
#include "socket.h"
7+
#include "error_context.h"
78

8-
#endif
9+
#endif

src/crocket_base.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@
3434

3535
return true;
3636
}
37-
#endif
37+
#endif

src/crocket_base.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@ extern "C" {
6060
}
6161
#endif
6262

63-
#endif
63+
#endif

src/error_context.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include "error_context.h"
2+
3+
typedef struct _CROCKET_ERROR_CONTEXT {
4+
char message[CROCKET_ERROR_MESSAGE_LENGTH];
5+
int code;
6+
} error_context_t;
7+
8+
static error_context_t _crocket_error_context;
9+
10+
char* crocket_get_last_error_message() {
11+
return _crocket_error_context.message[0] ? _crocket_error_context.message : "???";
12+
}
13+
14+
int crocket_get_last_error_code() {
15+
return _crocket_error_context.code;
16+
}
17+
18+
void crocket_clear_last_error() {
19+
_crocket_error_context.message[0] = '\0';
20+
_crocket_error_context.code = 0;
21+
}
22+
23+
void _crocket_update_error_context(const char* message, int code) {
24+
_crocket_error_context.code = code;
25+
26+
if (message) {
27+
size_t context_message_length = strlen(_crocket_error_context.message);
28+
29+
strncpy(
30+
_crocket_error_context.message,
31+
message,
32+
context_message_length - 1
33+
);
34+
35+
_crocket_error_context.message[context_message_length] = '\0';
36+
}
37+
else {
38+
_crocket_error_context.message[0] = '\0';
39+
}
40+
}

src/error_context.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef __CROCKET_ERROR_CONTEXT
2+
#define __CROCKET_ERROR_CONTEXT
3+
4+
#include "crocket_base.h"
5+
6+
#ifndef CROCKET_ERROR_MESSAGE_LENGTH
7+
#define CROCKET_ERROR_MESSAGE_LENGTH (256)
8+
#endif
9+
10+
#ifdef __cplusplus
11+
extern "C" {
12+
#endif
13+
14+
char* crocket_get_last_error_message();
15+
int crocket_get_last_error_code();
16+
17+
void crocket_clear_last_error();
18+
19+
void _crocket_update_error_context(const char* message, int code);
20+
21+
#ifdef __cplusplus
22+
}
23+
#endif
24+
25+
#endif

src/socket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define __CROCKET_SOCKET_H
33

44
#include "crocket_base.h"
5+
#include "error_context.h"
56

67
#if defined(CROCKET_WINDOWS)
78
#ifndef CROCKET_INVALID_SOCKET

0 commit comments

Comments
 (0)