| 114 | } |
| 115 | |
| 116 | void allocateAddrinfoArray(WasmEdge::Runtime::Instance::MemoryInstance &MemInst, |
| 117 | uint32_t Base, uint32_t Length, |
| 118 | uint32_t CanonnameMaxSize) { |
| 119 | for (uint32_t Item = 0; Item < Length; Item++) { |
| 120 | // allocate addrinfo struct |
| 121 | auto *ResItemPtr = MemInst.getPointer<__wasi_addrinfo_t *>(Base); |
| 122 | Base += sizeof(__wasi_addrinfo_t); |
| 123 | |
| 124 | // allocate sockaddr struct |
| 125 | ResItemPtr->ai_addr = Base; |
| 126 | ResItemPtr->ai_addrlen = sizeof(__wasi_sockaddr_t); |
| 127 | auto *Sockaddr = |
| 128 | MemInst.getPointer<__wasi_sockaddr_t *>(ResItemPtr->ai_addr); |
| 129 | Base += ResItemPtr->ai_addrlen; |
| 130 | // allocate sockaddr sa_data. |
| 131 | Sockaddr->sa_data = Base; |
| 132 | Sockaddr->sa_data_len = WasmEdge::Host::WASI::kMaxSaDataLen; |
| 133 | Base += Sockaddr->sa_data_len; |
| 134 | // allocate ai_canonname |
| 135 | ResItemPtr->ai_canonname = Base; |
| 136 | ResItemPtr->ai_canonname_len = CanonnameMaxSize; |
| 137 | Base += ResItemPtr->ai_canonname_len; |
| 138 | if (Item != (Length - 1)) { |
| 139 | ResItemPtr->ai_next = Base; |
| 140 | } |
| 141 | } |
| 142 | } |
| 143 | |
| 144 | } // namespace |
| 145 | |