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:
parent
30c5982a95
commit
a7bbba0583
1 changed files with 14 additions and 14 deletions
|
@ -403,24 +403,24 @@ SCM scm_listofnullstr;
|
||||||
/* Utility functions for assembling C strings in a buffer.
|
/* Utility functions for assembling C strings in a buffer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct stringbuf {
|
struct stringbuf
|
||||||
|
{
|
||||||
char *buf, *ptr;
|
char *buf, *ptr;
|
||||||
size_t buf_len;
|
size_t buf_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
|
||||||
stringbuf_free (void *data)
|
|
||||||
{
|
|
||||||
struct stringbuf *buf = (struct stringbuf *)data;
|
|
||||||
free (buf->buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
stringbuf_grow (struct stringbuf *buf)
|
stringbuf_grow (struct stringbuf *buf)
|
||||||
{
|
{
|
||||||
size_t ptroff = buf->ptr - buf->buf;
|
size_t ptroff, prev_len;
|
||||||
buf->buf_len *= 2;
|
void *prev_buf = buf->buf;
|
||||||
buf->buf = scm_realloc (buf->buf, buf->buf_len);
|
|
||||||
|
prev_len = buf->buf_len;
|
||||||
|
ptroff = buf->ptr - buf->buf;
|
||||||
|
|
||||||
|
buf->buf_len *= 2;
|
||||||
|
buf->buf = scm_gc_malloc_pointerless (buf->buf_len, "search-path");
|
||||||
|
memcpy (buf->buf, prev_buf, prev_len);
|
||||||
buf->ptr = buf->buf + ptroff;
|
buf->ptr = buf->buf + ptroff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,6 +558,7 @@ search_path (SCM path, SCM filename, SCM extensions, SCM require_exts,
|
||||||
char *filename_chars;
|
char *filename_chars;
|
||||||
size_t filename_len;
|
size_t filename_len;
|
||||||
SCM result = SCM_BOOL_F;
|
SCM result = SCM_BOOL_F;
|
||||||
|
char initial_buffer[256];
|
||||||
|
|
||||||
if (scm_ilength (path) < 0)
|
if (scm_ilength (path) < 0)
|
||||||
scm_misc_error ("%search-path", "path is not a proper list: ~a",
|
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))
|
if (scm_is_null (extensions))
|
||||||
extensions = scm_listofnullstr;
|
extensions = scm_listofnullstr;
|
||||||
|
|
||||||
buf.buf_len = 512;
|
buf.buf_len = sizeof initial_buffer;
|
||||||
buf.buf = scm_malloc (buf.buf_len);
|
buf.buf = initial_buffer;
|
||||||
scm_dynwind_unwind_handler (stringbuf_free, &buf, SCM_F_WIND_EXPLICITLY);
|
|
||||||
|
|
||||||
/* Try every path element.
|
/* Try every path element.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue