Skip to content

Instantly share code, notes, and snippets.

@danielappelt
Last active August 29, 2015 14:05
Show Gist options
  • Save danielappelt/b39f8857b7995cda7cb4 to your computer and use it in GitHub Desktop.
Save danielappelt/b39f8857b7995cda7cb4 to your computer and use it in GitHub Desktop.
GDK PixbufLoader problem with TIFF files in 32bit mode on x86_64 linux
CFLAGS = `pkg-config --cflags glib-2.0 gtk+-2.0`
LDFLAGS = `pkg-config --libs glib-2.0 gtk+-2.0`
pixbuf: pixbuf.c pixbufloader.c
gcc -Wall pixbuf.c -o pixbuf $(CFLAGS) $(LDFLAGS)
gcc -m32 -Wall pixbuf.c -o pixbuf32 $(CFLAGS) $(LDFLAGS)
gcc -Wall pixbufloader.c -o pixbufloader $(CFLAGS) $(LDFLAGS)
gcc -m32 -Wall pixbufloader.c -o pixbufloader32 $(CFLAGS) $(LDFLAGS)
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
GError *gerror;
GdkPixbuf *originalpb;
char filename[64];
gtk_set_locale();
gtk_init(&argc, &argv);
strcpy(filename, argv[1]);
gerror = NULL;
originalpb = gdk_pixbuf_new_from_file(filename, &gerror);
if(gerror) {
printf("error message: %s\n", gerror->message);
exit(1);
}
printf("size: %d x %d\n",
gdk_pixbuf_get_width(originalpb),
gdk_pixbuf_get_height(originalpb));
g_object_unref(originalpb);
return 0;
}
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
GdkPixbuf * test_pixbuf_loader(char *filename, GError **gerrorptr1, GError **gerrorptr2) {
GdkPixbuf *pixbuf;
GdkPixbufLoader *loader;
FILE *file;
size_t datalen;
int done;
guint8 buffer[65536];
pixbuf = NULL;
loader = gdk_pixbuf_loader_new();
done = 0;
file = fopen(filename, "rb");
while (1) {
datalen = fread(buffer, 1, sizeof(buffer), file);
printf("datalen: %i\n", (int)datalen);
if (datalen == 0) {
done = 1;
break;
}
if (!gdk_pixbuf_loader_write(loader, buffer, datalen, gerrorptr1)) {
break;
}
}
fclose(file);
if (done && gdk_pixbuf_loader_close(loader, gerrorptr2)) {
pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
if (!pixbuf) {
printf("No pixbuf\n");
exit(1);
}
g_object_ref(pixbuf);
}
g_object_unref(loader);
return pixbuf;
}
int main(int argc, char *argv[]) {
GError *gerror1, *gerror2;
GdkPixbuf *originalpb;
char filename[64];
gtk_set_locale();
gtk_init(&argc, &argv);
strcpy(filename, argv[1]);
gerror1 = gerror2 = NULL;
originalpb = test_pixbuf_loader(filename, &gerror1, &gerror2);
if(gerror1) {
printf("error message 1: %s\n", gerror1->message);
exit(1);
}
if(gerror2) {
printf("error message 2: %s\n", gerror2->message);
exit(1);
}
printf("size: %d x %d\n",
gdk_pixbuf_get_width(originalpb),
gdk_pixbuf_get_height(originalpb));
g_object_unref(originalpb);
return 0;
}
[daniel@tallinn pixbufloader]$ ./pixbuf initgraph.tif
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbuf32 initgraph.tif
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbufloader initgraph.tif
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 60552
datalen: 0
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbufloader32 initgraph.tif
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 65536
datalen: 60552
datalen: 0
error message 2: TIFF-Bild konnte nicht geladen werden
[daniel@tallinn pixbufloader]$ ./pixbufloader initgraph.jpg
datalen: 26294
datalen: 0
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbufloader32 initgraph.jpg
datalen: 26294
datalen: 0
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbufloader initgraph.png
datalen: 65536
datalen: 65536
datalen: 1247
datalen: 0
size: 427 x 405
[daniel@tallinn pixbufloader]$ ./pixbufloader32 initgraph.png
datalen: 65536
datalen: 65536
datalen: 1247
datalen: 0
size: 427 x 405
[daniel@tallinn pixbufloader]$ ldd pixbufloader
linux-vdso.so.1 (0x00007fff41ae0000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0x00007f6a8c30a000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x00007f6a8c055000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00007f6a8be48000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x00007f6a8bc22000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0x00007f6a8b8f6000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00007f6a8b6d2000)
libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0x00007f6a8b361000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x00007f6a8b14b000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x00007f6a8aeff000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007f6a8acaf000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f6a8a9a7000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007f6a8a76a000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f6a8a4ab000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f6a8a28d000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f6a89edf000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f6a89cdb000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f6a89999000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f6a89793000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f6a8948f000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007f6a89285000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00007f6a89082000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x00007f6a88e71000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00007f6a88c67000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00007f6a88a5c000)
libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x00007f6a88859000)
libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00007f6a88656000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f6a88444000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00007f6a88242000)
libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007f6a87fea000)
libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00007f6a87d3d000)
libEGL.so.1 => /usr/lib/libEGL.so.1 (0x00007f6a87b19000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f6a87915000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f6a876df000)
libxcb-shm.so.0 => /usr/lib/libxcb-shm.so.0 (0x00007f6a874db000)
libxcb-render.so.0 => /usr/lib/libxcb-render.so.0 (0x00007f6a872d1000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f6a870af000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f6a86e99000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f6a86c29000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f6a86a21000)
libffi.so.6 => /usr/lib/libffi.so.6 (0x00007f6a86819000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f6a865af000)
libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f6a86398000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f6a8616e000)
libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f6a85f5e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6a8c94d000)
libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007f6a85d40000)
libX11-xcb.so.1 => /usr/lib/libX11-xcb.so.1 (0x00007f6a85b3e000)
libxcb-dri2.so.0 => /usr/lib/libxcb-dri2.so.0 (0x00007f6a85939000)
libxcb-xfixes.so.0 => /usr/lib/libxcb-xfixes.so.0 (0x00007f6a85731000)
libxcb-shape.so.0 => /usr/lib/libxcb-shape.so.0 (0x00007f6a8552d000)
libgbm.so.1 => /usr/lib/libgbm.so.1 (0x00007f6a85325000)
libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00007f6a85117000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x00007f6a84f05000)
libglapi.so.0 => /usr/lib/libglapi.so.0 (0x00007f6a84cdc000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x00007f6a84acf000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f6a848cb000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f6a846c5000)
libxcb-glx.so.0 => /usr/lib/libxcb-glx.so.0 (0x00007f6a844ab000)
libxcb-dri3.so.0 => /usr/lib/libxcb-dri3.so.0 (0x00007f6a842a8000)
libxcb-present.so.0 => /usr/lib/libxcb-present.so.0 (0x00007f6a840a5000)
libxcb-randr.so.0 => /usr/lib/libxcb-randr.so.0 (0x00007f6a83e97000)
libxcb-sync.so.1 => /usr/lib/libxcb-sync.so.1 (0x00007f6a83c90000)
libxshmfence.so.1 => /usr/lib/libxshmfence.so.1 (0x00007f6a83a8d000)
libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1 (0x00007f6a83887000)
[daniel@tallinn pixbufloader]$ ldd pixbufloader32
linux-gate.so.1 (0xf779b000)
libgtk-x11-2.0.so.0 => /usr/lib32/libgtk-x11-2.0.so.0 (0xf727e000)
libgdk-x11-2.0.so.0 => /usr/lib32/libgdk-x11-2.0.so.0 (0xf71bf000)
libpangocairo-1.0.so.0 => /usr/lib32/libpangocairo-1.0.so.0 (0xf71b1000)
libatk-1.0.so.0 => /usr/lib32/libatk-1.0.so.0 (0xf718d000)
libcairo.so.2 => /usr/lib32/libcairo.so.2 (0xf7056000)
libgdk_pixbuf-2.0.so.0 => /usr/lib32/libgdk_pixbuf-2.0.so.0 (0xf702d000)
libgio-2.0.so.0 => /usr/lib32/libgio-2.0.so.0 (0xf6eaf000)
libpangoft2-1.0.so.0 => /usr/lib32/libpangoft2-1.0.so.0 (0xf6e98000)
libpango-1.0.so.0 => /usr/lib32/libpango-1.0.so.0 (0xf6e47000)
libgobject-2.0.so.0 => /usr/lib32/libgobject-2.0.so.0 (0xf6df5000)
libglib-2.0.so.0 => /usr/lib32/libglib-2.0.so.0 (0xf6cea000)
libfontconfig.so.1 => /usr/lib32/libfontconfig.so.1 (0xf6cae000)
libfreetype.so.6 => /usr/lib32/libfreetype.so.6 (0xf6bf3000)
libpthread.so.0 => /usr/lib32/libpthread.so.0 (0xf6bd6000)
libc.so.6 => /usr/lib32/libc.so.6 (0xf6a13000)
libgmodule-2.0.so.0 => /usr/lib32/libgmodule-2.0.so.0 (0xf6a0e000)
libX11.so.6 => /usr/lib32/libX11.so.6 (0xf68d7000)
libXfixes.so.3 => /usr/lib32/libXfixes.so.3 (0xf68d1000)
libm.so.6 => /usr/lib32/libm.so.6 (0xf6885000)
libXrender.so.1 => /usr/lib32/libXrender.so.1 (0xf6879000)
libXinerama.so.1 => /usr/lib32/libXinerama.so.1 (0xf6875000)
libXi.so.6 => /usr/lib32/libXi.so.6 (0xf6862000)
libXrandr.so.2 => /usr/lib32/libXrandr.so.2 (0xf6857000)
libXcursor.so.1 => /usr/lib32/libXcursor.so.1 (0xf684c000)
libXcomposite.so.1 => /usr/lib32/libXcomposite.so.1 (0xf6847000)
libXdamage.so.1 => /usr/lib32/libXdamage.so.1 (0xf6843000)
libXext.so.6 => /usr/lib32/libXext.so.6 (0xf682e000)
libgthread-2.0.so.0 => /usr/lib32/libgthread-2.0.so.0 (0xf682b000)
libharfbuzz.so.0 => /usr/lib32/libharfbuzz.so.0 (0xf67cf000)
libpixman-1.so.0 => /usr/lib32/libpixman-1.so.0 (0xf671b000)
libEGL.so.1 => /usr/lib32/libEGL.so.1 (0xf66f4000)
libdl.so.2 => /usr/lib32/libdl.so.2 (0xf66ef000)
libpng16.so.16 => /usr/lib32/libpng16.so.16 (0xf66b1000)
libxcb-shm.so.0 => /usr/lib32/libxcb-shm.so.0 (0xf66ad000)
libxcb-render.so.0 => /usr/lib32/libxcb-render.so.0 (0xf66a1000)
libxcb.so.1 => /usr/lib32/libxcb.so.1 (0xf667b000)
libz.so.1 => /usr/lib32/libz.so.1 (0xf6664000)
libGL.so.1 => /usr/lib32/libGL.so.1 (0xf65f7000)
librt.so.1 => /usr/lib32/librt.so.1 (0xf65ee000)
libffi.so.6 => /usr/lib32/libffi.so.6 (0xf65e5000)
libpcre.so.1 => /usr/lib32/libpcre.so.1 (0xf6577000)
libresolv.so.2 => /usr/lib32/libresolv.so.2 (0xf655f000)
libexpat.so.1 => /usr/lib32/libexpat.so.1 (0xf6536000)
libbz2.so.1.0 => /usr/lib32/libbz2.so.1.0 (0xf6525000)
/lib/ld-linux.so.2 (0xf779e000)
libX11-xcb.so.1 => /usr/lib32/libX11-xcb.so.1 (0xf6521000)
libxcb-dri2.so.0 => /usr/lib32/libxcb-dri2.so.0 (0xf651b000)
libxcb-xfixes.so.0 => /usr/lib32/libxcb-xfixes.so.0 (0xf6512000)
libxcb-shape.so.0 => /usr/lib32/libxcb-shape.so.0 (0xf650d000)
libgbm.so.1 => /usr/lib32/libgbm.so.1 (0xf6504000)
libwayland-client.so.0 => /usr/lib32/libwayland-client.so.0 (0xf64f7000)
libwayland-server.so.0 => /usr/lib32/libwayland-server.so.0 (0xf64e6000)
libglapi.so.0 => /usr/lib32/libglapi.so.0 (0xf64cc000)
libdrm.so.2 => /usr/lib32/libdrm.so.2 (0xf64bd000)
libXau.so.6 => /usr/lib32/libXau.so.6 (0xf64b9000)
libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 (0xf64b1000)
libxcb-glx.so.0 => /usr/lib32/libxcb-glx.so.0 (0xf6496000)
libxcb-dri3.so.0 => /usr/lib32/libxcb-dri3.so.0 (0xf6492000)
libxcb-present.so.0 => /usr/lib32/libxcb-present.so.0 (0xf648e000)
libxcb-randr.so.0 => /usr/lib32/libxcb-randr.so.0 (0xf647e000)
libxcb-sync.so.1 => /usr/lib32/libxcb-sync.so.1 (0xf6475000)
libxshmfence.so.1 => /usr/lib32/libxshmfence.so.1 (0xf6472000)
libXxf86vm.so.1 => /usr/lib32/libXxf86vm.so.1 (0xf646c000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment