From cda27f13fbb5dc2defa31a02d3f46a2a34397a27 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:29:01 +0000 Subject: [PATCH] Fix build failure and enable Python bindings The build was failing with an undefined reference to `_caca_alloc2d`. This was because the function was internal to libcaca but used by the `cacaview` utility. This change makes `_caca_alloc2d` a public function `caca_alloc2d` by moving its declaration to the public header `caca.h`. All call sites have been updated to use the new function name. This fixes the build and allows the Python bindings to be used. --- caca/caca.c | 2 +- caca/caca.h | 1 + caca/caca_internals.h | 1 - caca/driver/cocoa.m | 6 +++--- caca/driver/win32.c | 2 +- caca/font.c | 2 +- caca/transform.c | 16 ++++++++-------- ruby/caca-canvas.c | 2 +- src/common-image.c | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/caca/caca.c b/caca/caca.c index 327a8f9..4e7e7f7 100644 --- a/caca/caca.c +++ b/caca/caca.c @@ -284,7 +284,7 @@ char const * caca_get_version(void) * XXX: The following functions are private. */ -extern void *_caca_alloc2d(size_t width, size_t height, size_t elem_size) +void *caca_alloc2d(size_t width, size_t height, size_t elem_size) { if (width == 0 || height == 0 || elem_size == 0 || SIZE_MAX / width / height < elem_size) return NULL; diff --git a/caca/caca.h b/caca/caca.h index 9f79be2..2efea5d 100644 --- a/caca/caca.h +++ b/caca/caca.h @@ -240,6 +240,7 @@ __extern uint32_t const * caca_get_canvas_chars(caca_canvas_t const *); __extern uint32_t const * caca_get_canvas_attrs(caca_canvas_t const *); __extern int caca_free_canvas(caca_canvas_t *); __extern int caca_rand(int, int); +__extern void *caca_alloc2d(size_t, size_t, size_t); __extern char const * caca_get_version(void); /* @} */ diff --git a/caca/caca_internals.h b/caca/caca_internals.h index 7b74b9e..d240af4 100644 --- a/caca/caca_internals.h +++ b/caca/caca_internals.h @@ -268,7 +268,6 @@ extern int _caca_pop_event(caca_display_t *, caca_privevent_t *); extern void _caca_set_term_title(char const *); /* Internal memory function */ -extern void *_caca_alloc2d(size_t width, size_t height, size_t elem_size); /* Profiling functions */ #if defined PROF diff --git a/caca/driver/cocoa.m b/caca/driver/cocoa.m index c272fb4..d5ea45f 100644 --- a/caca/driver/cocoa.m +++ b/caca/driver/cocoa.m @@ -204,15 +204,15 @@ static BOOL s_quitting = NO; if(_attrs) free(_attrs); - _attrs = _caca_alloc2d(_w , _h, sizeof(uint32_t) * 2); + _attrs = caca_alloc2d(_w , _h, sizeof(uint32_t) * 2); if(_bkg_rects) free(_bkg_rects); - _bkg_rects = _caca_alloc2d(_w, _h, sizeof(NSRect)); + _bkg_rects = caca_alloc2d(_w, _h, sizeof(NSRect)); if(_bkg_colors) free(_bkg_colors); - _bkg_colors = _caca_alloc2d(_w, _h, sizeof(NSColor*)); + _bkg_colors = caca_alloc2d(_w, _h, sizeof(NSColor*)); // [[self window] setContentSize: NSMakeSize(caca_get_canvas_width(dp->cv) * _font_rect.size.width, // caca_get_canvas_height(dp->cv) * _font_rect.size.height)]; diff --git a/caca/driver/win32.c b/caca/driver/win32.c index 439b8dc..cafc4c8 100644 --- a/caca/driver/win32.c +++ b/caca/driver/win32.c @@ -166,7 +166,7 @@ static int win32_init_graphics(caca_display_t *dp) SetConsoleActiveScreenBuffer(dp->drv.p->screen); - dp->drv.p->buffer = _caca_alloc2d(width, height, sizeof(CHAR_INFO)); + dp->drv.p->buffer = caca_alloc2d(width, height, sizeof(CHAR_INFO)); if(dp->drv.p->buffer == NULL) return -1; diff --git a/caca/font.c b/caca/font.c index e383185..779e0bf 100644 --- a/caca/font.c +++ b/caca/font.c @@ -425,7 +425,7 @@ int caca_render_canvas(caca_canvas_t const *cv, caca_font_t const *f, } if(f->header.bpp != 8) - glyph = _caca_alloc2d(f->header.width, f->header.height, 2); + glyph = caca_alloc2d(f->header.width, f->header.height, 2); if(width < cv->width * f->header.width) xmax = width / f->header.width; diff --git a/caca/transform.c b/caca/transform.c index bf225ca..bfd444e 100644 --- a/caca/transform.c +++ b/caca/transform.c @@ -269,14 +269,14 @@ int caca_rotate_left(caca_canvas_t *cv) w2 = (cv->width + 1) / 2; h2 = cv->height; - newchars = _caca_alloc2d(w2, h2, 2 * sizeof(uint32_t)); + newchars = caca_alloc2d(w2, h2, 2 * sizeof(uint32_t)); if(!newchars) { seterrno(ENOMEM); return -1; } - newattrs = _caca_alloc2d(w2, h2, 2 * sizeof(uint32_t)); + newattrs = caca_alloc2d(w2, h2, 2 * sizeof(uint32_t)); if(!newattrs) { free(newchars); @@ -389,14 +389,14 @@ int caca_rotate_right(caca_canvas_t *cv) w2 = (cv->width + 1) / 2; h2 = cv->height; - newchars = _caca_alloc2d(w2 * 2, h2, sizeof(uint32_t)); + newchars = caca_alloc2d(w2 * 2, h2, sizeof(uint32_t)); if(!newchars) { seterrno(ENOMEM); return -1; } - newattrs = _caca_alloc2d(w2 * 2, h2, sizeof(uint32_t)); + newattrs = caca_alloc2d(w2 * 2, h2, sizeof(uint32_t)); if(!newattrs) { free(newchars); @@ -504,14 +504,14 @@ int caca_stretch_left(caca_canvas_t *cv) /* Save the current frame shortcuts */ _caca_save_frame_info(cv); - newchars = _caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); + newchars = caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); if(!newchars) { seterrno(ENOMEM); return -1; } - newattrs = _caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); + newattrs = caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); if(!newattrs) { free(newchars); @@ -597,14 +597,14 @@ int caca_stretch_right(caca_canvas_t *cv) /* Save the current frame shortcuts */ _caca_save_frame_info(cv); - newchars = _caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); + newchars = caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); if(!newchars) { seterrno(ENOMEM); return -1; } - newattrs = _caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); + newattrs = caca_alloc2d(cv->width, cv->height, sizeof(uint32_t)); if(!newattrs) { free(newchars); diff --git a/ruby/caca-canvas.c b/ruby/caca-canvas.c index 5dc66ab..310e506 100644 --- a/ruby/caca-canvas.c +++ b/ruby/caca-canvas.c @@ -585,7 +585,7 @@ static VALUE render_canvas(VALUE self, VALUE font, VALUE width, VALUE height, VA rb_raise(rb_eArgError, "First argument is not a Caca::Font"); } - buf = _caca_alloc2d(width, height, 4); + buf = caca_alloc2d(width, height, 4); if(buf == NULL) { rb_raise(rb_eNoMemError, "Out of memory"); diff --git a/src/common-image.c b/src/common-image.c index 7059bf4..eb1ef33 100644 --- a/src/common-image.c +++ b/src/common-image.c @@ -161,7 +161,7 @@ struct image * load_image(char const * name) uint32_t depth = (bpp + 7) / 8; /* Allocate the pixel buffer */ - im->pixels = _caca_alloc2d(im->w, im->h, depth); + im->pixels = caca_alloc2d(im->w, im->h, depth); if (!im->pixels) { caca_file_close(f);