DXGL r278 - Code Review

Jump to navigation Jump to search
Repository:DXGL
Revision:r277‎ | r278 | r279 >
Date:16:58, 21 October 2012
Author:admin
Status:new
Tags:
Comment:
minilibc: Add malloc, realloc, and free
Modified paths:
  • /minilibc/common.c (modified) (history)
  • /minilibc/common.h (modified) (history)
  • /minilibc/common.inc (modified) (history)
  • /minilibc/errno.c (modified) (history)
  • /minilibc/memory.c (added) (history)
  • /minilibc/minilibc.vcxproj (modified) (history)
  • /minilibc/minilibc.vcxproj.filters (modified) (history)
  • /minilibc/strcpy_x86.asm (deleted) (history)
  • /minilibc/string_x86.asm (added) (history)
  • /minilibc/strlen_x86.asm (deleted) (history)
  • /minilibc/strncpy_x86.asm (deleted) (history)

Diff [purge]

Index: minilibc/strlen_x86.asm
@@ -1,67 +0,0 @@
2 -; DXGL
3 -; Copyright (C) 2012 William Feely
4 -
5 -; This library is free software; you can redistribute it and/or
6 -; modify it under the terms of the GNU Lesser General Public
7 -; License as published by the Free Software Foundation; either
8 -; version 2.1 of the License, or (at your option) any later version.
9 -
10 -; This library is distributed in the hope that it will be useful,
11 -; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 -; Lesser General Public License for more details.
14 -
15 -; You should have received a copy of the GNU Lesser General Public
16 -; License along with this library; if not, write to the Free Software
17 -; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 -
19 -.model flat, c
20 -.code
21 -INCLUDE common.inc
22 -
23 -strlen PROC string:ptr byte
24 - push ecx
25 - push ebx
26 - push esi
27 - mov eax, string
28 - and eax, 3
29 - jnz aligned_loop
30 -unaligned_loop:
31 - mov ecx, 0
32 - mov esi, string
33 - test byte ptr [esi],0
34 - jz return
35 - dec eax
36 - inc esi
37 - inc ecx
38 - jz aligned_loop
39 - jmp unaligned_loop
40 -aligned_loop:
41 - mov eax, dword ptr [esi]
42 - mov ebx, eax
43 - and ebx, 0FFh
44 - jz return
45 - inc ecx
46 - mov ebx, eax
47 - and ebx, 0FF00h
48 - jz return
49 - inc ecx
50 - mov ebx, eax
51 - and ebx, 0FF0000h
52 - jz return
53 - inc ecx
54 - mov ebx, eax
55 - and ebx, 0FF000000h
56 - jz return
57 - inc ecx
58 - add esi, 4
59 - jmp aligned_loop
60 -return:
61 - mov eax, ecx
62 - pop esi
63 - pop ebx
64 - pop ecx
65 - ret
66 -strlen ENDP
67 -
68 -end
\ No newline at end of file
Index: minilibc/strcpy_x86.asm
@@ -1,35 +0,0 @@
2 -; DXGL
3 -; Copyright (C) 2012 William Feely
4 -
5 -; This library is free software; you can redistribute it and/or
6 -; modify it under the terms of the GNU Lesser General Public
7 -; License as published by the Free Software Foundation; either
8 -; version 2.1 of the License, or (at your option) any later version.
9 -
10 -; This library is distributed in the hope that it will be useful,
11 -; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 -; Lesser General Public License for more details.
14 -
15 -; You should have received a copy of the GNU Lesser General Public
16 -; License along with this library; if not, write to the Free Software
17 -; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 -
19 -.model flat, c
20 -.code
21 -INCLUDE common.inc
22 -
23 -strcpy PROC dest:ptr byte, src:ptr byte
24 - push src
25 - call strlen
26 - add esp, 4
27 - push eax
28 - push src
29 - push dest
30 - call memcpy
31 - add esp, 12
32 - mov eax, dest
33 - ret
34 -strcpy ENDP
35 -
36 -end
\ No newline at end of file
Index: minilibc/strncpy_x86.asm
@@ -1,41 +0,0 @@
2 -; DXGL
3 -; Copyright (C) 2012 William Feely
4 -
5 -; This library is free software; you can redistribute it and/or
6 -; modify it under the terms of the GNU Lesser General Public
7 -; License as published by the Free Software Foundation; either
8 -; version 2.1 of the License, or (at your option) any later version.
9 -
10 -; This library is distributed in the hope that it will be useful,
11 -; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 -; Lesser General Public License for more details.
14 -
15 -; You should have received a copy of the GNU Lesser General Public
16 -; License along with this library; if not, write to the Free Software
17 -; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 -
19 -.model flat, c
20 -.code
21 -INCLUDE common.inc
22 -
23 -strncpy PROC dest:ptr byte, src:ptr byte, count:dword
24 - push src
25 - call strlen
26 - add esp, 4
27 - cmp eax, count
28 - jl shortstring
29 - push count
30 - jmp longstring
31 -shortstring:
32 - push eax
33 -longstring:
34 - push src
35 - push dest
36 - call memcpy
37 - add esp, 12
38 - mov eax, dest
39 - ret
40 -strncpy ENDP
41 -
42 -end
\ No newline at end of file
Index: minilibc/common.c
@@ -17,5 +17,4 @@
1818
1919 #include "common.h"
2020
21 -int errno;
2221 const char itoachars[37] = "0123456789abcdefghijklmnopqrstuvwxyz";
\ No newline at end of file
Index: minilibc/common.h
@@ -17,6 +17,7 @@
1818
1919 #include <stdio.h>
2020 #include <stdlib.h>
 21+#include <errno.h>
2122
2223 extern const char itoachars[37];
2324
Index: minilibc/common.inc
@@ -17,5 +17,4 @@
1818
1919 EXTERN C itoachars:ptr byte
2020 EXTERN C memset_ptr:ptr dword
21 -EXTERN C strlen:proc
2221 EXTERN C memcpy:proc
\ No newline at end of file
Index: minilibc/errno.c
@@ -16,7 +16,6 @@
1717 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1818
1919 #include "common.h"
20 -#include <errno.h>
2120
2221 static int errorno;
2322
Index: minilibc/memory.c
@@ -0,0 +1,55 @@
 2+// DXGL
 3+// Copyright (C) 2012 William Feely
 4+
 5+// This library is free software; you can redistribute it and/or
 6+// modify it under the terms of the GNU Lesser General Public
 7+// License as published by the Free Software Foundation; either
 8+// version 2.1 of the License, or (at your option) any later version.
 9+
 10+// This library is distributed in the hope that it will be useful,
 11+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 12+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 13+// Lesser General Public License for more details.
 14+
 15+// You should have received a copy of the GNU Lesser General Public
 16+// License along with this library; if not, write to the Free Software
 17+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 18+
 19+#include "common.h"
 20+#include <Windows.h>
 21+
 22+void *malloc(size_t size)
 23+{
 24+ void *ptr;
 25+ ptr = HeapAlloc(GetProcessHeap(),0,size);
 26+ if(!ptr)
 27+ {
 28+ _set_errno(ENOMEM);
 29+ return NULL;
 30+ }
 31+ return ptr;
 32+}
 33+
 34+void *realloc(void *memblock, size_t size)
 35+{
 36+ void *ptr;
 37+ if(!size)
 38+ {
 39+ free(memblock);
 40+ return NULL;
 41+ }
 42+ if(!memblock) ptr = HeapAlloc(GetProcessHeap(),0,size);
 43+ else ptr = HeapReAlloc(GetProcessHeap(),0,memblock,size);
 44+ if(!ptr)
 45+ {
 46+ _set_errno(ENOMEM);
 47+ return NULL;
 48+ }
 49+ return ptr;
 50+}
 51+
 52+void free(void *memblock)
 53+{
 54+ if(!memblock) return;
 55+ if(HeapFree(GetProcessHeap(),0,memblock)) errno = EINVAL;
 56+}
\ No newline at end of file
Index: minilibc/minilibc.vcxproj
@@ -99,15 +99,9 @@
100100 <CustomBuild Include="rtcapi_x86.asm">
101101 <FileType>Document</FileType>
102102 </CustomBuild>
103 - <CustomBuild Include="strlen_x86.asm">
 103+ <CustomBuild Include="string_x86.asm">
104104 <FileType>Document</FileType>
105105 </CustomBuild>
106 - <CustomBuild Include="strcpy_x86.asm">
107 - <FileType>Document</FileType>
108 - </CustomBuild>
109 - <CustomBuild Include="strncpy_x86.asm">
110 - <FileType>Document</FileType>
111 - </CustomBuild>
112106 </ItemGroup>
113107 <ItemGroup>
114108 <ClCompile Include="common.c">
@@ -118,6 +112,7 @@
119113 <ClCompile Include="exit.c" />
120114 <ClCompile Include="file.c" />
121115 <ClCompile Include="init.c" />
 116+ <ClCompile Include="memory.c" />
122117 <ClCompile Include="memset.c" />
123118 </ItemGroup>
124119 <ItemGroup>
Index: minilibc/minilibc.vcxproj.filters
@@ -33,15 +33,9 @@
3434 <CustomBuild Include="rtcapi_x86.asm">
3535 <Filter>Source Files</Filter>
3636 </CustomBuild>
37 - <CustomBuild Include="strlen_x86.asm">
 37+ <CustomBuild Include="string_x86.asm">
3838 <Filter>Source Files</Filter>
3939 </CustomBuild>
40 - <CustomBuild Include="strcpy_x86.asm">
41 - <Filter>Source Files</Filter>
42 - </CustomBuild>
43 - <CustomBuild Include="strncpy_x86.asm">
44 - <Filter>Source Files</Filter>
45 - </CustomBuild>
4640 </ItemGroup>
4741 <ItemGroup>
4842 <ClCompile Include="exit.c">
@@ -62,6 +56,9 @@
6357 <ClCompile Include="errno.c">
6458 <Filter>Source Files</Filter>
6559 </ClCompile>
 60+ <ClCompile Include="memory.c">
 61+ <Filter>Source Files</Filter>
 62+ </ClCompile>
6663 </ItemGroup>
6764 <ItemGroup>
6865 <ClInclude Include="common.h">
Index: minilibc/string_x86.asm
@@ -0,0 +1,99 @@
 2+; DXGL
 3+; Copyright (C) 2012 William Feely
 4+
 5+; This library is free software; you can redistribute it and/or
 6+; modify it under the terms of the GNU Lesser General Public
 7+; License as published by the Free Software Foundation; either
 8+; version 2.1 of the License, or (at your option) any later version.
 9+
 10+; This library is distributed in the hope that it will be useful,
 11+; but WITHOUT ANY WARRANTY; without even the implied warranty of
 12+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 13+; Lesser General Public License for more details.
 14+
 15+; You should have received a copy of the GNU Lesser General Public
 16+; License along with this library; if not, write to the Free Software
 17+; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 18+
 19+.model flat, c
 20+.code
 21+INCLUDE common.inc
 22+
 23+strcpy PROC dest:ptr byte, src:ptr byte
 24+ push src
 25+ call strlen
 26+ add esp, 4
 27+ push eax
 28+ push src
 29+ push dest
 30+ call memcpy
 31+ add esp, 12
 32+ mov eax, dest
 33+ ret
 34+strcpy ENDP
 35+
 36+strlen PROC string:ptr byte
 37+ push ecx
 38+ push ebx
 39+ push esi
 40+ mov eax, string
 41+ and eax, 3
 42+ jnz aligned_loop
 43+unaligned_loop:
 44+ mov ecx, 0
 45+ mov esi, string
 46+ test byte ptr [esi],0
 47+ jz return
 48+ dec eax
 49+ inc esi
 50+ inc ecx
 51+ jz aligned_loop
 52+ jmp unaligned_loop
 53+aligned_loop:
 54+ mov eax, dword ptr [esi]
 55+ mov ebx, eax
 56+ and ebx, 0FFh
 57+ jz return
 58+ inc ecx
 59+ mov ebx, eax
 60+ and ebx, 0FF00h
 61+ jz return
 62+ inc ecx
 63+ mov ebx, eax
 64+ and ebx, 0FF0000h
 65+ jz return
 66+ inc ecx
 67+ mov ebx, eax
 68+ and ebx, 0FF000000h
 69+ jz return
 70+ inc ecx
 71+ add esi, 4
 72+ jmp aligned_loop
 73+return:
 74+ mov eax, ecx
 75+ pop esi
 76+ pop ebx
 77+ pop ecx
 78+ ret
 79+strlen ENDP
 80+
 81+strncpy PROC dest:ptr byte, src:ptr byte, count:dword
 82+ push src
 83+ call strlen
 84+ add esp, 4
 85+ cmp eax, count
 86+ jl shortstring
 87+ push count
 88+ jmp longstring
 89+shortstring:
 90+ push eax
 91+longstring:
 92+ push src
 93+ push dest
 94+ call memcpy
 95+ add esp, 12
 96+ mov eax, dest
 97+ ret
 98+strncpy ENDP
 99+
 100+end
\ No newline at end of file