| 118 | } |
| 119 | |
| 120 | int posix_memalign(void** memptr, const size_t alignment, const size_t size) { |
| 121 | #if defined(Y_COVER_PTR) |
| 122 | (void)alignment; |
| 123 | *memptr = malloc(size); |
| 124 | return 0; |
| 125 | #else |
| 126 | if (((alignment - 1) & alignment) != 0 || alignment < sizeof(void*)) { |
| 127 | return EINVAL; |
| 128 | } |
| 129 | if (alignment <= NBalloc::MINIMAL_ALIGNMENT) { |
| 130 | *memptr = NBalloc::Malloc(size); |
| 131 | return 0; |
| 132 | } |
| 133 | size_t bigSize = size + alignment - NBalloc::MINIMAL_ALIGNMENT; |
| 134 | void* res = NBalloc::Malloc(bigSize); |
| 135 | void* alignedPtr = (void*)NBalloc::Align((size_t)res, alignment); |
| 136 | if (alignedPtr != res) { |
| 137 | auto oldAllocHeader = (NBalloc::TAllocHeader*)res - 1; |
| 138 | auto newAllocHeader = (NBalloc::TAllocHeader*)alignedPtr - 1; |
| 139 | void* block = oldAllocHeader->Block; |
| 140 | newAllocHeader->Encode(block, size, NBalloc::ALIVE_SIGNATURE); |
| 141 | } |
| 142 | *memptr = alignedPtr; |
| 143 | return 0; |
| 144 | #endif |
| 145 | } |
| 146 | |
| 147 | void* operator new(size_t size, const std::nothrow_t&) OP_THROWNOTHING { |
| 148 | #if defined(Y_COVER_PTR) |
no test coverage detected