Hello! I'm fairly new to the list and the Argyll suite so please let me know if there is anything I should be including but am not. Background and Motivation: I noticed in the mailing list archives some Android profiling has come up before, my attempt is slightly different as I'm using the tablet to profile itself by way of a Debian chroot. As a result of the limitation of not having either VideoLUT access or a native windowing display system (I'm using VNC to provide Debian with an X environment) the attempt is here to profile the display only. As such I'll be doing other things to ensure consistent display settings--using scripts to set brightness and profiling at different known brightness levels. And I'm perfectly happy to only use color aware applications in said VNC environment (for the time being) as that is where I can run my photo processing applications (ufraw and gimp). Environment: Asus Transformer Prime with Android 4.0 and a Debian chroot (Wheezy) built with multistrap. $ uname -a Linux localhost 2.6.39.4-00003-g2108187 #1 SMP PREEMPT Tue Feb 21 18:40:24 CST 2012 armv7l GNU/Linux (funny enough, yes this is the version string from Android) OK, now to sweat and tears, I have generated a target file with targen, poured over documentation, tried a few different environments only to come back to find that when dispread tries to load up the target patch file it goes into an infinite loop, on the tablet--x86 laptop is fine of course. I'm still tracing through some of the parsing state machine code but could certainly use another pair of eyes to assist if anyone is willing. Let me know if anyone has any ideas for tracking down this issue, or circumventing it. This parse condition does not look like it should exist, but it stubbornly appears to. Thanks! I'm so glad to see such great open source tools and such a vibrant community around this stuff. Daniel <written on an android, wew it'll work better someday> :) off to look at p->fp->getch(p->fp) Data: Excuse annotation/verbosity, thought it might be handy. <snip from an system call trace on dispread when it gets stuck in a read loop> open("target-chart.ti1", O_RDONLY) = 16 fstat64(16, {st_mode=S_IFREG|0666, st_size=11281, ...}) = 0 fstat64(16, {st_mode=S_IFREG|0666, st_size=11281, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40041000 read(16, "CTI1 \n\nDESCRIPTOR \"Argyll Cali"..., 4096) = 4096 read(16, "7.642 39.734 73.389 18.751 \n79 7"..., 4096) = 4096 read(16, "166 86.118 44.061 13.217 36.160 "..., 4096) = 3089 read(16, "", 4096) = 0 read(16, "", 4096) = 0 read(16, "", 4096) = 0 read(16, "", 4096) = 0 ... stuck here in a loop reading... spectro/dispread:~580 it starts here, goes through declaring a new_cgats which in turn calls some allocator code in cgats/cgats.c and cgatsstd.c, but ultimately the parsing is what is going to read the file. cgats.c:370 -- should make the read calls stop if ((rc = pp->read_line(pp)) == 0) (file parsing exits if this condition is met) pars.c: 345 -- likewise this looks good too (in what pp->read_line calls) if ((c = p->fp->getch(p->fp)) == EOF) { if (p->bo == 0) { /* If there is nothing in the buffer */ p->line = 0; return 0; } c = 0; /* Finish the line */ }