Skip to content

Commit 5c946a5

Browse files
authored
Merge pull request #150 from staalmannen/claude/upgrade-ape-c-library-mmZGd
libap: add idx_t (ptrdiff_t) xmalloc variants
2 parents 64ed89d + 86f4149 commit 5c946a5

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

sys/include/ape/xalloc.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ extern void *x2nrealloc(void *, size_t *, size_t); /* growing: ~1.5x */
2828
extern void *x2realloc(void *, size_t *);
2929
extern void *xpalloc(void *, ptrdiff_t *, ptrdiff_t, ptrdiff_t, ptrdiff_t);
3030

31+
/* idx_t (ptrdiff_t) signed-size variants */
32+
extern void *ximalloc(ptrdiff_t);
33+
extern void *xirealloc(void *, ptrdiff_t);
34+
extern void *xicalloc(ptrdiff_t, ptrdiff_t);
35+
extern void *xizalloc(ptrdiff_t);
36+
extern void *ximemdup(void const *, ptrdiff_t);
37+
extern char *ximemdup0(void const *, ptrdiff_t);
38+
3139
/* Convenience: typed versions */
3240
#define XMALLOC(t, n) ((t *)xmalloc((n) * sizeof(t)))
3341
#define XCALLOC(t, n) ((t *)xcalloc((n), sizeof(t)))

sys/src/ape/lib/ap/malloc/xmalloc.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,43 @@ xpalloc(void *pa, ptrdiff_t *pn, ptrdiff_t n_incr_min, ptrdiff_t n_max, ptrdiff_
169169
*pn = n;
170170
return pa;
171171
}
172+
173+
/* idx_t (ptrdiff_t) variants — same semantics, signed-size argument. */
174+
175+
void *
176+
ximalloc(ptrdiff_t s)
177+
{
178+
return xmalloc((size_t)s);
179+
}
180+
181+
void *
182+
xirealloc(void *p, ptrdiff_t s)
183+
{
184+
return xrealloc(p, (size_t)s);
185+
}
186+
187+
void *
188+
xicalloc(ptrdiff_t n, ptrdiff_t s)
189+
{
190+
return xcalloc((size_t)n, (size_t)s);
191+
}
192+
193+
void *
194+
xizalloc(ptrdiff_t s)
195+
{
196+
return xicalloc(s, 1);
197+
}
198+
199+
void *
200+
ximemdup(void const *p, ptrdiff_t s)
201+
{
202+
return xmemdup(p, (size_t)s);
203+
}
204+
205+
char *
206+
ximemdup0(void const *p, ptrdiff_t s)
207+
{
208+
char *result = ximalloc(s + 1);
209+
result[s] = '\0';
210+
return memcpy(result, p, s);
211+
}

0 commit comments

Comments
 (0)