Skip to content

Commit f036f65

Browse files
committed
redid some of the eventhook code
1 parent 64fc4a0 commit f036f65

1 file changed

Lines changed: 24 additions & 26 deletions

File tree

libogc/stm.c

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct eventhook {
6666
s32 fd;
6767
u32 event_code;
6868
stmcallback callback;
69-
u32 state; /* 0: unset, 1: set, 2: release */
69+
enum { EVENTHOOK_UNSET = 0, EVENTHOOK_SET } state;
7070
};
7171

7272
static struct eventhook __stm_eventhook;
@@ -92,7 +92,7 @@ s32 __STM_SetEventHook(void)
9292
{
9393
s32 ret;
9494

95-
if (__stm_eventhook.state == 1)
95+
if (__stm_eventhook.state == EVENTHOOK_SET)
9696
return 0;
9797

9898
if (__stm_eventhook.fd < 0) {
@@ -107,7 +107,7 @@ s32 __STM_SetEventHook(void)
107107
{
108108
ret = IOS_IoctlAsync(__stm_eventhook.fd, IOCTL_STM_EVENTHOOK, NULL, 0, &__stm_eventhook.event_code, sizeof(u32), __STMEventCallback, &__stm_eventhook);
109109
if (ret == 0)
110-
__stm_eventhook.state = 1;
110+
__stm_eventhook.state = EVENTHOOK_SET;
111111
}
112112
IRQ_Restore(level);
113113

@@ -116,46 +116,44 @@ s32 __STM_SetEventHook(void)
116116

117117
s32 __STM_ReleaseEventHook(void)
118118
{
119-
s32 ret = STM_ENOHANDLER, fd;
119+
s32 ret, fd;
120120

121121
STM_printf("Release\n");
122122

123-
if (__stm_eventhook.state == 1) {
124-
ret = fd = IOS_Open("/dev/stm/immediate", 0);
125-
if (ret >= 0) {
126-
__stm_eventhook.state = 2;
127-
ret = IOS_Ioctl(fd, IOCTL_STM_RELEASE_EH, NULL, 0, NULL, 0);
128-
IOS_Close(fd);
129-
} else {
130-
STM_printf("Open /dev/stm/immediate failed {%i}\n", ret);
131-
}
123+
ret = fd = IOS_Open("/dev/stm/immediate", 0);
124+
if (ret >= 0) {
125+
ret = IOS_Ioctl(fd, IOCTL_STM_RELEASE_EH, NULL, 0, NULL, 0);
126+
if (ret == IPC_ENOENT)
127+
ret = STM_ENOHANDLER;
128+
129+
IOS_Close(fd);
130+
} else {
131+
STM_printf("Open /dev/stm/immediate failed {%i}\n", ret);
132132
}
133-
else if (__stm_eventhook.fd >= 0) {
134-
ret = IOS_Close(__stm_eventhook.fd);
133+
134+
if (__stm_eventhook.fd >= 0) {
135+
IOS_Close(__stm_eventhook.fd);
135136
__stm_eventhook.fd = -1;
136137
}
137138

138-
139139
return ret;
140140
}
141141

142142
static s32 __STMEventCallback(s32 result, void *usrdata)
143143
{
144-
__stm_eventhook.state = 0;
145-
146-
if (__stm_eventhook.state == 2) {
147-
/* Release. event_code will probably be 0. */
148-
result = IOS_Close(__stm_eventhook.fd);
149-
__stm_eventhook.fd = -1;
150-
}
144+
__stm_eventhook.state = EVENTHOOK_UNSET;
151145

152-
else if (result < 0) {
146+
if (result < 0) {
153147
STM_printf("STM eventhook error (%i), was it already registered?\n", result);
148+
return result;
154149
}
155150

156-
else {
157-
STM_printf("STM eventhook handler, event=%08x\n", __stm_eventhook.event_code);
151+
STM_printf("event=%08x\n", __stm_eventhook.event_code);
158152

153+
if (__stm_eventhook.event_code == 0) { // Release
154+
return 0;
155+
}
156+
else {
159157
if (__stm_eventhook.callback)
160158
__stm_eventhook.callback(__stm_eventhook.event_code);
161159

0 commit comments

Comments
 (0)