1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

Use on-stack or GC-managed memory in 'search-path'.

* libguile/load.c (stringbuf_free): Remove.
  (stringbuf_grow): Use 'scm_gc_malloc_pointerless' instead of 'scm_realloc'.
  (search_path): Use stack-allocated INITIAL_BUFFER instead of
  'scm_malloc'.  Remove use of 'stringbuf_free'.
This commit is contained in:
Ludovic Courtès 2014-10-31 22:53:04 +01:00
parent 30c5982a95
commit a7bbba0583

View file

@ -403,24 +403,24 @@ SCM scm_listofnullstr;
/* Utility functions for assembling C strings in a buffer.
*/
struct stringbuf {
struct stringbuf
{
char *buf, *ptr;
size_t buf_len;
};
static void
stringbuf_free (void *data)
{
struct stringbuf *buf = (struct stringbuf *)data;
free (buf->buf);
}
static void
stringbuf_grow (struct stringbuf *buf)
{
size_t ptroff = buf->ptr - buf->buf;
size_t ptroff, prev_len;
void *prev_buf = buf->buf;
prev_len = buf->buf_len;
ptroff = buf->ptr - buf->buf;
buf->buf_len *= 2;
buf->buf = scm_realloc (buf->buf, buf->buf_len);
buf->buf = scm_gc_malloc_pointerless (buf->buf_len, "search-path");
memcpy (buf->buf, prev_buf, prev_len);
buf->ptr = buf->buf + ptroff;
}
@ -558,6 +558,7 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts,
char *filename_chars;
size_t filename_len;
SCM result = SCM_BOOL_F;
char initial_buffer[256];
if (scm_ilength (path) < 0)
scm_misc_error ("%search-path", "path is not a proper list: ~a",
@ -619,9 +620,8 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts,
if (scm_is_null (extensions))
extensions = scm_listofnullstr;
buf.buf_len = 512;
buf.buf = scm_malloc (buf.buf_len);
scm_dynwind_unwind_handler (stringbuf_free, &buf, SCM_F_WIND_EXPLICITLY);
buf.buf_len = sizeof initial_buffer;
buf.buf = initial_buffer;
/* Try every path element.
*/