-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathjumpstack.c
More file actions
52 lines (47 loc) · 1.28 KB
/
jumpstack.c
File metadata and controls
52 lines (47 loc) · 1.28 KB
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
#include "jumpstack.h"
int jumpstack_clear(JumpStack* prStack) {
int i = 0;
if (prStack == NULL) {
return JUMPSTACK_NULLPTR;
}
for (i = 0; i < JUMPSTACK_SIZE; i++) {
prStack->element[i] = 0;
}
prStack->elements = 0;
return JUMPSTACK_SUCCESS;
}
int jumpstack_init(JumpStack* prStack) {
if (prStack == NULL) {
return JUMPSTACK_NULLPTR;
}
if (jumpstack_clear(prStack) != JUMPSTACK_SUCCESS) {
return JUMPSTACK_FAILURE;
}
return JUMPSTACK_SUCCESS;
}
SceUInt32 jumpstack_pop(JumpStack* prStack) {
SceUInt32 address = 0;
if (prStack != NULL) {
if (prStack->elements > 0) {
address = prStack->element[prStack->elements - 1];
prStack->elements--;
}
}
return address;
}
int jumpstack_push(JumpStack* prStack, SceUInt32 address) {
int i = 0;
if (prStack == NULL) {
return JUMPSTACK_NULLPTR;
}
if (prStack->elements + 1 >= JUMPSTACK_SIZE) {
for (i = 1; i < JUMPSTACK_SIZE; i++) {
prStack->element[i - 1] = prStack->element[i];
}
prStack->element[prStack->elements - 1] = address;
} else {
prStack->element[prStack->elements] = address;
prStack->elements++;
}
return JUMPSTACK_SUCCESS;
}