Rev 5036 | Rev 5085 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4997 | gtament | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
||
3 | ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; |
||
4 | ;; Distributed under terms of the GNU General Public License ;; |
||
5 | ;; ;; |
||
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
7 | |||
5037 | gtament | 8 | head dd 0 |
4975 | gtament | 9 | |
4997 | gtament | 10 | linkedlist_add: |
5037 | gtament | 11 | push ebx |
12 | mov ebx, [head] |
||
13 | mov [head], eax |
||
14 | mov [eax + node.next], ebx |
||
15 | pop ebx |
||
4979 | gtament | 16 | ret |
4975 | gtament | 17 | |
4997 | gtament | 18 | linkedlist_delete: |
5037 | gtament | 19 | push ebx ecx |
20 | mov ebx, eax ; eax - pointer to node for delete |
||
21 | cmp eax, [head] |
||
22 | jz .unlink_head |
||
4975 | gtament | 23 | |
24 | .getnext: |
||
5037 | gtament | 25 | cmp [ebx+node.next], eax |
26 | jz .unlink |
||
27 | cmp [ebx+node.next], 0 |
||
28 | jz .invalid_pointer |
||
29 | mov ebx, [ebx+node.next] |
||
30 | jmp .getnext |
||
4975 | gtament | 31 | |
32 | .unlink: |
||
5037 | gtament | 33 | mov ecx, [eax+node.next] |
34 | mov [ebx+node.next], ecx |
||
35 | jmp @f |
||
4997 | gtament | 36 | |
4975 | gtament | 37 | .unlink_head: |
5037 | gtament | 38 | mov ebx, [eax+node.next] |
39 | mov [head], ebx |
||
4975 | gtament | 40 | @@: |
5037 | gtament | 41 | mov ecx, eax |
42 | call Kfree |
||
4975 | gtament | 43 | .invalid_pointer: |
5037 | gtament | 44 | pop ecx ebx |
4979 | gtament | 45 | ret |
4997 | gtament | 46 | |
5023 | gtament | 47 | linkedlist_isvalid: ;eax - pointer to check; returns zero if valid |
5037 | gtament | 48 | push ebx ecx |
49 | xor ecx, ecx |
||
50 | test eax, eax |
||
51 | jz .invalid_pointer |
||
52 | mov ebx, [head] |
||
4997 | gtament | 53 | .next_check: |
5037 | gtament | 54 | cmp eax, ebx |
55 | jz .valid_pointer |
||
56 | mov ebx, [ebx + node.next] |
||
57 | test ebx, ebx |
||
58 | jz .invalid_pointer |
||
59 | jmp .next_check |
||
4997 | gtament | 60 | .invalid_pointer: |
5037 | gtament | 61 | inc ecx |
4997 | gtament | 62 | .valid_pointer: |
5037 | gtament | 63 | mov eax, ecx |
64 | pop ecx ebx |
||
4997 | gtament | 65 | ret |
4975 | gtament | 66 | |
4997 | gtament | 67 | linkedlist_gethead: |
5037 | gtament | 68 | mov eax, [head] |
4979 | gtament | 69 | ret |
4975 | gtament | 70 | |
71 | restore node |
||
4979 | gtament | 72 | restore node.next |