| 127 | |
| 128 | |
| 129 | void * uriEmulateCalloc(UriMemoryManager * memory, size_t nmemb, size_t size) { |
| 130 | void * buffer; |
| 131 | const size_t total_size = nmemb * size; |
| 132 | |
| 133 | if (memory == NULL) { |
| 134 | errno = EINVAL; |
| 135 | return NULL; |
| 136 | } |
| 137 | |
| 138 | URI_CHECK_ALLOC_OVERFLOW(total_size, nmemb, size); /* may return */ |
| 139 | |
| 140 | buffer = memory->malloc(memory, total_size); |
| 141 | if (buffer == NULL) { |
| 142 | /* errno set by malloc */ |
| 143 | return NULL; |
| 144 | } |
| 145 | memset(buffer, 0, total_size); |
| 146 | return buffer; |
| 147 | } |
| 148 | |
| 149 | |
| 150 |