| 242 | } |
| 243 | |
| 244 | void strbuf_splice(struct strbuf *sb, size_t pos, size_t len, |
| 245 | const void *data, size_t dlen) |
| 246 | { |
| 247 | if (unsigned_add_overflows(pos, len)) |
| 248 | die("you want to use way too much memory"); |
| 249 | if (pos > sb->len) |
| 250 | die("`pos' is too far after the end of the buffer"); |
| 251 | if (pos + len > sb->len) |
| 252 | die("`pos + len' is too far after the end of the buffer"); |
| 253 | |
| 254 | if (dlen >= len) |
| 255 | strbuf_grow(sb, dlen - len); |
| 256 | memmove(sb->buf + pos + dlen, |
| 257 | sb->buf + pos + len, |
| 258 | sb->len - pos - len); |
| 259 | memcpy(sb->buf + pos, data, dlen); |
| 260 | strbuf_setlen(sb, sb->len + dlen - len); |
| 261 | } |
| 262 | |
| 263 | void strbuf_insert(struct strbuf *sb, size_t pos, const void *data, size_t len) |
| 264 | { |
no test coverage detected