add #ifdefs for missing libjpeg libraries to avoid link problems, remove some warnings from compilers/glib versions that tave some functions marked as -Wunused-result

This commit is contained in:
stefan schippers 2024-03-15 13:59:52 +01:00
parent 56697dfc43
commit d30715bc2c
4 changed files with 49 additions and 19 deletions

View File

@ -65,15 +65,18 @@ p{padding: 15px 30px 10px;}
Tck/Tk versions may vary on different systems, 8.4, 8.5, 8.6 versions are all good.
</p>
<pre class="code">
libx11-6 libx11-dev
libxrender1 libxrender-dev
libxcb1 libx11-xcb-dev
libcairo2 libcairo2-dev
tcl8.6 tcl8.6-dev
tk8.6 tk8.6-dev
flex bison
libxpm4 libxpm-dev
libjpeg-dev
LIBRARIES DEVELOPMENT FILES
-----------------------------------------------------------
libx11-6 libx11-dev
libxrender1 libxrender-dev
libxcb1 libx11-xcb-dev
libcairo2 libcairo2-dev
tcl8.6 tcl8.6-dev
tk8.6 tk8.6-dev
flex bison
libxpm4 libxpm-dev
libjpeg62-turbo or libjpeg libjpeg-dev
# terminal program and editor used by default by xschem:
# alternative programs can be specified in xschemrc by
# setting tcl variables 'terminal' and 'editor', respectively.

View File

@ -3910,8 +3910,10 @@ void inspect_image(cairo_surface_t* surface)
*/
void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2, int rot, int flip)
{
#if HAS_CAIRO == 1
#if HAS_CAIRO==1
#if defined(HAS_LIBJPEG)
int jpeg_quality=75;
#endif
const char *ptr;
int w,h;
double x, y, rw, rh;
@ -3944,9 +3946,11 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
}
my_strncpy(filename, get_tok_value(r->prop_ptr, "image", 0), S(filename));
my_strdup(_ALLOC_ID_, &filter, get_tok_value(r->prop_ptr, "filter", 0));
#if defined(HAS_LIBJPEG)
ptr = get_tok_value(r->prop_ptr, "quality", 0);
jpeg_quality = 75;
if(ptr[0]) jpeg_quality = atoi(ptr);
#endif
/* read image from in-memory buffer ... */
if(emb_ptr && emb_ptr->image) {
; /* nothing to do, image is already created */
@ -3962,7 +3966,9 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
if(jpg == 0) {
emb_ptr->image = cairo_image_surface_create_from_png_stream(png_reader, &closure);
} else if(jpg == 1) {
#if defined(HAS_LIBJPEG)
emb_ptr->image = cairo_image_surface_create_from_jpeg_mem(closure.buffer, closure.size);
#endif
}
if(! emb_ptr->image || cairo_surface_status(emb_ptr->image) != CAIRO_STATUS_SUCCESS) {
dbg(0, "draw_image(): failure creating image surface from \"image_data\" attribute\n");
@ -3988,8 +3994,12 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
if(filesize) {
fd = fopen(filename, "r");
if(fd) {
size_t bytes_read;
filedata = my_malloc(_ALLOC_ID_, filesize);
fread(filedata, filesize, 1, fd);
if((bytes_read = fread(filedata, filesize, 1, fd)) < filesize) {
filesize = bytes_read;
dbg(0, "draw_image(): less bytes read than expected from %s, got %ld bytes\n", filename, bytes_read);
}
fclose(fd);
}
}
@ -4003,7 +4013,9 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
if(jpg == 0) {
emb_ptr->image = cairo_image_surface_create_from_png_stream(png_reader, &closure);
} else if(jpg == 1) {
#if defined(HAS_LIBJPEG)
emb_ptr->image = cairo_image_surface_create_from_jpeg_mem(closure.buffer, closure.size);
#endif
}
if(! emb_ptr->image || cairo_surface_status(emb_ptr->image) != CAIRO_STATUS_SUCCESS) {
dbg(0, "draw_image(): failure creating image surface with filtered data from %s\n", filename);
@ -4022,7 +4034,12 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
header[0] = '\0';
fd = fopen(filename, "r");
if(fd) {
fread(header, size, 1, fd);
size_t bytes_read;
if((bytes_read = fread(header, size, 1, fd)) < size) {
size = bytes_read;
dbg(0, "draw_image(): less bytes read than expected from %s, got %ld bytes\n", filename, bytes_read);
}
fclose(fd);
}
if(!strncmp(header, "\x89PNG", 4)) jpg = 0;
@ -4034,7 +4051,9 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
if(jpg == 0) {
emb_ptr->image = cairo_image_surface_create_from_png(filename);
} else if(jpg == 1) {
#if defined(HAS_LIBJPEG)
emb_ptr->image = cairo_image_surface_create_from_jpeg(filename);
#endif
}
if(! emb_ptr->image || cairo_surface_status(emb_ptr->image) != CAIRO_STATUS_SUCCESS) {
dbg(0, "draw_image(): failure creating image surface from %s\n", filename);
@ -4046,7 +4065,9 @@ void draw_image(int dr, xRect *r, double *x1, double *y1, double *x2, double *y2
cairo_surface_write_to_png_stream(emb_ptr->image, png_writer, &closure);
} else if(jpg == 1) {
/* write JPG to in-memory buffer */
#if defined(HAS_LIBJPEG)
cairo_image_surface_write_to_jpeg_mem(emb_ptr->image, &closure.buffer, &closure.pos, jpeg_quality);
#endif
}
encoded_data = base64_encode(closure.buffer, closure.pos, &olength, 0);
my_free(_ALLOC_ID_, &closure.buffer);

View File

@ -73,6 +73,7 @@ static void child_handler(int signum)
int main(int argc, char **argv)
{
int i;
FILE *retval = 0;
#ifdef __unix__
int stdin_is_a_fifo = 0;
struct stat statbuf;
@ -137,8 +138,10 @@ int main(int argc, char **argv)
if(cli_opt_detach) {
fclose(stdin);
#ifdef __unix__
freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
retval = freopen("/dev/null", "w", stdout);
if(!retval) fprintf(stderr, "main(): freopen stdout to /dev/null failed\n");
retval = freopen("/dev/null", "w", stderr);
if(!retval) fprintf(stderr, "main(): freopen stderr to /dev/null failed\n");
#else
freopen("nul", "w", stdout);
freopen("nul", "w", stderr);

View File

@ -76,8 +76,8 @@ int filter_data(const char *din, const size_t ilen,
}
dbg(1, "filter_data(): ilen=%ld, cmd=%s\n", ilen, cmd);
pipe(p1);
pipe(p2);
if(pipe(p1) == -1) dbg(0, "filter_data(): pipe creation failed\n");
if(pipe(p2) == -1) dbg(0, "filter_data(): pipe creation failed\n");
dbg(1, "p1[0] = %d\n", p1[0]);
dbg(1, "p1[1] = %d\n", p1[1]);
@ -104,10 +104,10 @@ int filter_data(const char *din, const size_t ilen,
close(p1[1]); /* only read from p1 */
close(p2[0]); /* only write to p2 */
close(0); /* dup2(p1[0],0); */ /* connect read side of read pipe to stdin */
dup(p1[0]);
if(dup(p1[0]) == -1) dbg(0, "filter_data(): dup() call failed\n");
close(p1[0]);
close(1); /* dup2(p2[1],1); */ /* connect write side of write pipe to stdout */
dup(p2[1]);
if(dup(p2[1]) == -1) dbg(0, "filter_data(): dup() call failed\n");
close(p2[1]);
#if 1
@ -775,8 +775,11 @@ char *base64_from_file(const char *f, size_t *length)
len = st.st_size;
fd = fopen(f, fopen_read_mode);
if(fd) {
size_t bytes_read;
s = my_malloc(_ALLOC_ID_, len);
fread(s, len, 1, fd);
if((bytes_read = fread(s, len, 1, fd)) < len) {
dbg(0, "base64_from_file(): less bytes FROM %S, got %ld bytes\n", f, bytes_read);
}
fclose(fd);
b64s = base64_encode(s, len, length, 1);
my_free(_ALLOC_ID_, &s);