opnsense-ports/lang/siod/files/patch-gd
Franco Fichtner e33de29b16 */*: sync with upstream
Taken from: HardenedBSD
2021-02-17 12:24:01 +01:00

391 lines
10 KiB
Text

--- gd.c 2014-03-25 04:10:42.000000000 -0400
+++ gd.c 2021-02-16 11:58:57.946320000 -0500
@@ -9,5 +9,11 @@
#include <stdlib.h>
#include <string.h>
-#include "gd.h"
+#include <gd.h>
+#include <gdfontg.h>
+#include <gdfontl.h>
+#include <gdfontmb.h>
+#include <gdfonts.h>
+#include <gdfontt.h>
+
#include "siod.h"
@@ -17,15 +23,9 @@
NIL);}
-long tc_gdimage = 0;
-long tc_gdfont = 0;
-long tc_gdpoint = 0;
-
-extern gdFontPtr gdFontGiant;
-extern gdFontPtr gdFontLarge;
-extern gdFontPtr gdFontMediumBold;
-extern gdFontPtr gdFontSmall;
-extern gdFontPtr gdFontTiny;
+static long tc_gdimage = 0;
+static long tc_gdfont = 0;
+static long tc_gdpoint = 0;
-LISP lgdImageCreate(LISP sx,LISP sy)
+static LISP lgdImageCreate(LISP sx,LISP sy)
{LISP result;
long iflag;
@@ -38,5 +38,5 @@
return(result);}
-LISP lgdImageCreateFromGif(LISP f)
+static LISP lgdImageCreateFromGif(LISP f)
{LISP result;
long iflag;
@@ -49,5 +49,5 @@
return(result);}
-LISP lgdImageCreateFromXbm(LISP f)
+static LISP lgdImageCreateFromXbm(LISP f)
{LISP result;
long iflag;
@@ -61,13 +61,13 @@
-gdImagePtr get_gdImagePtr(LISP ptr)
+static gdImagePtr get_gdImagePtr(LISP ptr)
{gdImagePtr im;
if (NTYPEP(ptr,tc_gdimage))
err("not a gdImage",ptr);
- if (!(im = (gdImagePtr) ptr->storage_as.string.data))
+ if (!(im = (gdImagePtr)(void *)ptr->storage_as.string.data))
err("gd Image deallocated",ptr);
return(im);}
-LISP lcgdFontCreate(gdFontPtr font)
+static LISP lcgdFontCreate(gdFontPtr font)
{LISP result;
long iflag;
@@ -80,13 +80,13 @@
return(result);}
-gdFontPtr get_gdFontPtr(LISP ptr)
+static gdFontPtr get_gdFontPtr(LISP ptr)
{gdFontPtr fn;
if (NTYPEP(ptr,tc_gdfont))
err("not a gdFont",ptr);
- if (!(fn = (gdFontPtr) ptr->storage_as.string.data))
+ if (!(fn = (gdFontPtr)(void *)ptr->storage_as.string.data))
err("gd Font deallocated",ptr);
return(fn);}
-LISP lgdPoint(LISP args)
+static LISP lgdPoint(LISP args)
{LISP result,l;
long iflag,j,m,n = nlength(args);
@@ -98,5 +98,5 @@
result->type = tc_gdpoint;
iflag = no_interrupt(1);
- pt = (gdPointPtr) must_malloc(sizeof(gdPoint) * m);
+ pt = must_malloc(sizeof(gdPoint) * m);
result->storage_as.string.data = (char *) pt;
result->storage_as.string.dim = m;
@@ -107,14 +107,14 @@
return(result);}
-gdPointPtr get_gdPointPtr(LISP ptr,long *n)
+static gdPointPtr get_gdPointPtr(LISP ptr,long *n)
{gdPointPtr pt;
if (NTYPEP(ptr,tc_gdpoint))
err("not a gdPoint",ptr);
- if (!(pt = (gdPointPtr) ptr->storage_as.string.data))
+ if (!(pt = (gdPointPtr)(void *)ptr->storage_as.string.data))
err("gd point deallocated",ptr);
*n = ptr->storage_as.string.dim;
return(pt);}
-LISP lgdPointx(LISP ptr,LISP j,LISP value)
+static LISP lgdPointx(LISP ptr,LISP j,LISP value)
{long n,i;
gdPointPtr pt;
@@ -129,5 +129,5 @@
-LISP lgdPointy(LISP ptr,LISP j,LISP value)
+static LISP lgdPointy(LISP ptr,LISP j,LISP value)
{long n,i;
gdPointPtr pt;
@@ -141,5 +141,5 @@
return(value);}
-LISP lgdImageGif(LISP im,LISP f)
+static LISP lgdImageGif(LISP im,LISP f)
{long iflag;
iflag = no_interrupt(1);
@@ -156,19 +156,22 @@
#include <unistd.h>
-void gdImageGifmem(gdImagePtr im, char *buffer, size_t *len)
+static void gdImageGifmem(gdImagePtr im, char *buffer, size_t *len)
{FILE *f;
char tmpname[32];
struct stat sb;
- strcpy(tmpname, "/tmp/gd.XXXXXX");
- mktemp(tmpname);
- if ((f = fopen(tmpname, "wb+")) != NULL) {
- gdImageGif(im, f);
- fstat(fileno(f), &sb);
- if (sb.st_size < *len) *len = sb.st_size;
- rewind(f);
- fread(buffer, 1, *len, f);
+ int fd;
+ strcpy(tmpname, "/tmp/gd.XXXXXX.gif");
+ fd = mkstemps(tmpname, 4);
+ if (fd != -1 && (f = fdopen(fd, "wb+")) != NULL) {
+ gdImageGif(im, f); /* XXX no error-checking from here on */
+ if (fstat(fileno(f), &sb) == 0 && sb.st_size <= (off_t)*len) {
+ *len = sb.st_size;
+ rewind(f);
+ *len = fread(buffer, 1, *len, f);
+ } else
+ *len = 0;
fclose(f);
} else {
- *len = 0;
+ *len = 0; /* XXX and no reporting for what little checking there is */
}
unlink(tmpname);
@@ -177,10 +180,10 @@
#endif
-LISP lgdImageGifmem(LISP im,LISP b)
-{long iflag,dim;
+static LISP lgdImageGifmem(LISP im, LISP b)
+{long iflag;
size_t len;
char *buffer;
- buffer = get_c_string_dim(b,&dim);
- len = dim;
+ buffer = get_string_data(b);
+ len = b->storage_as.string.dim;
iflag = no_interrupt(1);
gdImageGifmem(get_gdImagePtr(im),buffer,&len);
@@ -188,5 +191,5 @@
return(flocons(len));}
-LISP lgdImageColorAllocate(LISP l)
+static LISP lgdImageColorAllocate(LISP l)
{long iflag;
int result;
@@ -202,5 +205,5 @@
return(flocons(result));}
-LISP lgdImageColorClosest(LISP l)
+static LISP lgdImageColorClosest(LISP l)
{long iflag;
int result;
@@ -216,5 +219,5 @@
return(flocons(result));}
-LISP lgdImageColorExact(LISP l)
+static LISP lgdImageColorExact(LISP l)
{long iflag;
int result;
@@ -230,5 +233,5 @@
return(flocons(result));}
-LISP lgdImageLine(LISP l)
+static LISP lgdImageLine(LISP l)
{gdImagePtr im;
int x1,y1,x2,y2,color;
@@ -242,5 +245,5 @@
return(NIL);}
-LISP lgdImageSetPixel(LISP l)
+static LISP lgdImageSetPixel(LISP l)
{gdImagePtr im;
int x,y,color;
@@ -252,5 +255,5 @@
return(NIL);}
-LISP lgdImagePolygon(LISP im,LISP points,LISP color)
+static LISP lgdImagePolygon(LISP im,LISP points,LISP color)
{gdPointPtr pt;
long n;
@@ -262,5 +265,5 @@
return(NIL);}
-LISP lgdImageFilledPolygon(LISP im,LISP points,LISP color)
+static LISP lgdImageFilledPolygon(LISP im,LISP points,LISP color)
{gdPointPtr pt;
long n;
@@ -272,5 +275,5 @@
return(NIL);}
-LISP lgdImageRectangle(LISP l)
+static LISP lgdImageRectangle(LISP l)
{gdImagePtr im;
int x1,y1,x2,y2,color;
@@ -284,5 +287,5 @@
return(NIL);}
-LISP lgdImageFilledRectangle(LISP l)
+static LISP lgdImageFilledRectangle(LISP l)
{gdImagePtr im;
int x1,y1,x2,y2,color;
@@ -296,5 +299,5 @@
return(NIL);}
-LISP lgdImageArc(LISP l)
+static LISP lgdImageArc(LISP l)
{gdImagePtr im;
int cx,cy,w,h,s,e,color;
@@ -311,5 +314,5 @@
-LISP lgdImageFillToBorder(LISP l)
+static LISP lgdImageFillToBorder(LISP l)
{gdImagePtr im;
int x,y,border,color;
@@ -322,5 +325,5 @@
return(NIL);}
-LISP lgdImageFill(LISP l)
+static LISP lgdImageFill(LISP l)
{gdImagePtr im;
int x,y,color;
@@ -331,14 +334,6 @@
gdImageFill(im,x,y,color);
return(NIL);}
-
-/*
-void gdImageSetBrush(gdImagePtr im, gdImagePtr brush)
-void gdImageSetTile(gdImagePtr im, gdImagePtr tile)
-void gdImageSetStyle(gdImagePtr im, int *style, int styleLength)
-
-*/
-
-LISP lgdImageChar(LISP l)
+static LISP lgdImageChar(LISP l)
{gdImagePtr im;
gdFontPtr font;
@@ -353,5 +348,5 @@
return(NIL);}
-LISP lgdImageCharUp(LISP l)
+static LISP lgdImageCharUp(LISP l)
{gdImagePtr im;
gdFontPtr font;
@@ -366,5 +361,5 @@
return(NIL);}
-LISP lgdImageString(LISP l)
+static LISP lgdImageString(LISP l)
{gdImagePtr im;
gdFontPtr font;
@@ -375,10 +370,10 @@
x = get_c_long(poparg(&l,NIL));
y = get_c_long(poparg(&l,NIL));
- c = get_c_string(poparg(&l,NIL));
+ c = get_string_data(poparg(&l, NIL));
color = get_c_long(poparg(&l,NIL));
gdImageString(im,font,x,y,c,color);
return(NIL);}
-LISP lgdImageStringUp(LISP l)
+static LISP lgdImageStringUp(LISP l)
{gdImagePtr im;
gdFontPtr font;
@@ -389,21 +384,21 @@
x = get_c_long(poparg(&l,NIL));
y = get_c_long(poparg(&l,NIL));
- c = get_c_string(poparg(&l,NIL));
+ c = get_string_data(poparg(&l, NIL));
color = get_c_long(poparg(&l,NIL));
gdImageStringUp(im,font,x,y,c,color);
return(NIL);}
-LISP lgdImageColorTransparent(LISP im,LISP color)
+static LISP lgdImageColorTransparent(LISP im,LISP color)
{gdImageColorTransparent(get_gdImagePtr(im),get_c_long(color));
return(NIL);}
-LISP lgdImageInterlace(LISP im,LISP interlace)
+static LISP lgdImageInterlace(LISP im,LISP interlace)
{gdImageInterlace(get_gdImagePtr(im),get_c_long(interlace));
return(NIL);}
-void gdimage_prin1(LISP ptr,struct gen_printio *f)
+static void gdimage_prin1(LISP ptr,struct gen_printio *f)
{char buff[256];
gdImagePtr im;
- if ((im = (gdImagePtr) ptr->storage_as.string.data))
+ if ((im = (gdImagePtr)(void *)ptr->storage_as.string.data))
sprintf(buff,"#<GDIMAGE %p %d by %d>",
im,im->sx,im->sy);
@@ -412,14 +407,14 @@
gput_st(f,buff);}
-void gdimage_gc_free(LISP ptr)
+static void gdimage_gc_free(LISP ptr)
{gdImagePtr im;
- if ((im = (gdImagePtr) ptr->storage_as.string.data))
+ if ((im = (gdImagePtr)(void *)ptr->storage_as.string.data))
{gdImageDestroy(im);
ptr->storage_as.string.data = NULL;}}
-void gdfont_prin1(LISP ptr,struct gen_printio *f)
+static void gdfont_prin1(LISP ptr,struct gen_printio *f)
{char buff[256];
gdFontPtr fnt;
- if ((fnt = (gdFontPtr) ptr->storage_as.string.data))
+ if ((fnt = (gdFontPtr)(void *)ptr->storage_as.string.data))
sprintf(buff,"#<GDFONT %p %d by %d>",
fnt,fnt->w,fnt->h);
@@ -428,7 +423,7 @@
gput_st(f,buff);}
-void gdfont_gc_free(LISP ptr)
+static void gdfont_gc_free(LISP ptr)
{gdFontPtr fnt;
- if ((fnt = (gdFontPtr) ptr->storage_as.string.data) &&
+ if ((fnt = (gdFontPtr)(void *)ptr->storage_as.string.data) &&
ptr->storage_as.string.dim)
/* there is no api in gd 1.2 for loading a file from a file.
@@ -437,29 +432,31 @@
}
-void gdpoint_prin1(LISP ptr,struct gen_printio *f)
+static void gdpoint_prin1(LISP ptr,struct gen_printio *f)
{char buff[256];
gdPointPtr pt;
- pt = (gdPointPtr) ptr->storage_as.string.data;
+ pt = (gdPointPtr)(void *)ptr->storage_as.string.data;
sprintf(buff,"#<GDPOINT %p %ld>",
pt,ptr->storage_as.string.dim);
gput_st(f,buff);}
-void gdpoint_gc_free(LISP ptr)
+static void gdpoint_gc_free(LISP ptr)
{gdPointPtr pt;
- if ((pt = (gdPointPtr) ptr->storage_as.string.data))
+ if ((pt = (gdPointPtr)(void *)ptr->storage_as.string.data))
{free(pt);
ptr->storage_as.string.data = NULL;
ptr->storage_as.string.dim = 0;}}
-LISP gdfont_w(LISP ptr)
+static LISP gdfont_w(LISP ptr)
{gdFontPtr font;
font = get_gdFontPtr(ptr);
return(flocons(font->w));}
-LISP gdfont_h(LISP ptr)
+static LISP gdfont_h(LISP ptr)
{gdFontPtr font;
font = get_gdFontPtr(ptr);
return(flocons(font->h));}
+void init_gd(void); /* Module entry point - our sole exported function */
+
void init_gd(void)
{long j;