Date: Thu, 29 Nov 2001 11:05:55 -0800 (PST) From: Archie Cobbs <archie@dellroad.org> To: freebsd-hackers@freebsd.org Cc: bmilekic@freebsd.org Subject: kernel realloc() ? Message-ID: <200111291905.fATJ5tX48250@arch20m.dellroad.org>
index | next in thread | raw e-mail
For a project I'm working on, we need a kernel version of "realloc()".
Two questions:
#1 Does the patch below look correct?
#2 If so, is this something worth committing?
Thanks for any comments.
-Archie
__________________________________________________________________________
Archie Cobbs * Packet Design * http://www.packetdesign.com
--- sys/malloc.h.orig Wed Nov 28 21:56:23 2001
+++ sys/malloc.h Thu Nov 29 10:58:30 2001
@@ -176,6 +176,8 @@
void *malloc __P((unsigned long size, struct malloc_type *type, int flags));
void malloc_init __P((void *));
void malloc_uninit __P((void *));
+void *realloc __P((void *addr, unsigned long size,
+ struct malloc_type *type, int flags));
#endif /* _KERNEL */
#endif /* !_SYS_MALLOC_H_ */
--- kern/kern_malloc.c.orig Wed Nov 28 21:45:18 2001
+++ kern/kern_malloc.c Wed Nov 28 22:12:07 2001
@@ -404,6 +404,43 @@
}
/*
+ * realloc: change the size of a memory block
+ */
+void *
+realloc(addr, size, type, flags)
+ void *addr;
+ unsigned long size;
+ struct malloc_type *type;
+ int flags;
+{
+ struct kmemusage *kup;
+ long alloc;
+ void *mem;
+
+ /* Sanity checks */
+ if (type->ks_limit == 0)
+ panic("realloc with unknown type (%s)", type->ks_shortdesc);
+ KASSERT(kmembase <= (char *)addr && (char *)addr < kmemlimit,
+ ("realloc: address %p out of range", (void *)addr));
+
+ /* Get size of original block; reuse if appropriate */
+ kup = btokup(addr);
+ alloc = 1 << kup->ku_indx;
+ if (size <= alloc
+ && (size >= (alloc >> 1) || alloc == MINALLOCSIZE))
+ return (addr);
+
+ /* Allocate new block */
+ if ((mem = malloc(size, type, flags)) == NULL)
+ return (NULL);
+
+ /* Copy over contents */
+ bcopy(addr, mem, alloc);
+ free(addr, type);
+ return (mem);
+}
+
+/*
* Initialize the kernel memory allocator
*/
/* ARGSUSED*/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111291905.fATJ5tX48250>
