OSDN Git Service

Fix a couple of warnings
[uclinux-h8/uClibc.git] / libc / stdlib / malloc-simple / alloc.c
1 #include <features.h>
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <unistd.h>
7 #include <sys/mman.h>
8
9
10 #ifdef L_calloc_dbg
11
12 void *calloc_dbg(size_t num, size_t size, char *function, char *file,
13                                  int line)
14 {
15         void *ptr;
16
17         fprintf(stderr, "calloc of %d bytes at %s @%s:%d = ", (int) (num * size),
18                         function, file, line);
19         ptr = calloc(num, size);
20         fprintf(stderr, "%p\n", ptr);
21         return ptr;
22 }
23
24 #endif
25
26 #ifdef L_malloc_dbg
27
28 void *malloc_dbg(size_t size, char *function, char *file, int line)
29 {
30         void *result;
31
32         fprintf(stderr, "malloc of %d bytes at %s @%s:%d = ", (int) size, function,
33                         file, line);
34         result = malloc(size);
35         fprintf(stderr, "%p\n", result);
36         return result;
37 }
38
39 #endif
40
41 #ifdef L_free_dbg
42
43 void free_dbg(void *ptr, char *function, char *file, int line)
44 {
45         fprintf(stderr, "free of %p at %s @%s:%d\n", ptr, function, file,
46                         line);
47         free(ptr);
48 }
49
50 #endif
51
52
53 #ifdef L_calloc
54
55 void *calloc(size_t num, size_t size)
56 {
57         void *ptr = malloc(num * size);
58
59         if (ptr)
60                 memset(ptr, 0, num * size);
61         return ptr;
62 }
63
64 #endif
65
66 #ifdef L_malloc
67
68 void *malloc(size_t size)
69 {
70         void *result;
71 #if 1
72     /* Some programs will call malloc (0).  Lets be strict and return NULL */
73     if (size == 0)
74         return NULL;
75 #endif
76         result = mmap((void *) 0, size, PROT_READ | PROT_WRITE,
77 #ifdef __UCLIBC_HAS_MMU__
78                                                 MAP_PRIVATE | MAP_ANONYMOUS, 0, 0
79 #else
80                                                 MAP_SHARED | MAP_ANONYMOUS, 0, 0
81 #endif
82                                                     );
83
84         if (result == MAP_FAILED)
85                 return 0;
86
87         return result;
88 }
89
90 #endif
91
92 #ifdef L_free
93
94 void free(void *ptr)
95 {
96         munmap(ptr, 0);
97 }
98
99 #endif
100
101 #ifdef L_realloc
102
103 void *realloc(void *ptr, size_t size)
104 {
105         void *newptr = NULL;
106
107         if (size > 0) {
108                 newptr = malloc(size);
109                 if (newptr && ptr) {
110                         memcpy(newptr, ptr, size);
111                         free(ptr);
112                 }
113         }
114         else
115                 free(ptr);
116         return newptr;
117 }
118
119 #endif