From: Jack O'Q. <jac...@gm...> - 2006-12-17 18:03:18
Attachments:
stage-rgb.patch
|
This eliminates the segfault that occurs when the X11 color file is not found. This file has moved to /etc/X11/rgb.txt on Ubuntu 6.06, so the error occurs unless the user knows to ./configure --with-color=/etc/X11/rgb.txt explicitly. This patch was generated against release-2-0-patches from CVS. I believe the same patch also applies to CVS HEAD. It merely eliminates the segfault. If there is interest, I will submit a patch for configure.ac to detect the new file location automatically. Regards, -- joq |
From: Reed H. <re...@mo...> - 2006-12-18 15:05:32
|
We could also check for some common color names. Some platforms never have the X11 color file, like Windows. From an old patch <http://sourceforge.net/tracker/index.php?func=detail&aid=1212767&group_id=42445&atid=433166>, the exceprt below adds a new function with the hardcoded list, stg_lookup_color_default(), which is called by stg_lookup_color() if there's no X11 file. Index: src/stage.c =================================================================== RCS file: /cvsroot/playerstage/code/stage/src/stage.c,v retrieving revision 1.68 diff -r1.68 stage.c 135,137c139,195 < // Look up the color in a database. (i.e. transform color name to < // color value). If the color is not found in the database, a bright < // red color will be returned instead. --- > > /* return color from a default hard-coded list of color names */ > stg_color_t stg_lookup_color_default(const char* name) > { > if(strcasecmp(name, "white") == 0) > return 0xFFFFFF; > if(strcasecmp(name, "black") == 0) > return 0x000000; > if(strcasecmp(name, "gray75") == 0) > return 0xBFBFBF; > if(strcasecmp(name, "powder blue") == 0) > return 0xB0E0E6; > if(strcasecmp(name, "gray85") == 0) > return 0xD9D9D9; > if(strcasecmp(name, "gray90") == 0) > return 0xE5E5E5; > if(strcasecmp(name, "red") == 0) > return 0xFF0000; > if(strcasecmp(name, "green") == 0) > return 0x00FF00; > if(strcasecmp(name, "blue") == 0) > return 0x0000FF; > if(strcasecmp(name, "magenta") == 0) > return 0xFF00FF; > if(strcasecmp(name, "yellow") == 0) > return 0xFFFF00; > if(strcasecmp(name, "cyan") == 0) > return 0x00FFFF; > if(strcasecmp(name, "grey") == 0 || strcasecmp(name, "gray") == 0) > return 0xBEBEBE; > if(strcasecmp(name, "lightblue") == 0) > return 0xADD8E6; > if(strcasecmp(name, "lightgreen") == 0) > return 0x90EE90; > if(strcasecmp(name, "lightgrey") == 0 || strcasecmp(name, "lightgray") == 0) > return 0xD3D3D3; > if(strcasecmp(name, "brown") == 0) > return 0xA52A2A; > if(strcasecmp(name, "darkgreen") == 0 || strcasecmp(name, "dark green") == 0) > return 0x006400; > if(strcasecmp(name, "orange") == 0) > return 0xFFA500; > if(strcasecmp(name, "purple") == 0) > return 0x6F08BE; > > /* Fall back on black: */ > PRINT_WARN1("Unrecognized color \"%s\". Using black.", name); > return 0x000000; > } > > > > /* Look up the color in a database. (i.e. transform color name to > color value). If the color is not found in the database, a bright > red color will be returned instead. If there is no database file, > try from a list of known names. > */ 148a207,209 > #ifdef _WIN32 > return stg_lookup_color_default(name); > #else 151c212 < if (!file) --- > if(!file) 153c214 < PRINT_ERR2("unable to open color database %s : %s", --- > PRINT_WARN2("unable to open color database %s : %s", 155,156c216 < fclose(file); < return 0xFFFFFF; --- > return stg_lookup_color_default(name); 190a251 > #endif Jack O'Quin wrote: > This eliminates the segfault that occurs when the X11 color > file is not found. This file has moved to /etc/X11/rgb.txt on > Ubuntu 6.06, so the error occurs unless the user knows to > ./configure --with-color=/etc/X11/rgb.txt explicitly. > > This patch was generated against release-2-0-patches from CVS. > I believe the same patch also applies to CVS HEAD. It merely > eliminates the segfault. > > If there is interest, I will submit a patch for configure.ac to > detect the new file location automatically. > > Regards, > > > ------------------------------------------------------------------------ > > Index: src/stage.c > =================================================================== > RCS file: /cvsroot/playerstage/code/stage/src/stage.c,v > retrieving revision 1.88 > diff -u -r1.88 stage.c > --- src/stage.c 27 Feb 2006 01:06:47 -0000 1.88 > +++ src/stage.c 17 Dec 2006 17:36:26 -0000 > @@ -157,7 +157,6 @@ > { > PRINT_ERR2("unable to open color database %s : %s", > filename, strerror(errno)); > - fclose(file); > return 0xFFFFFF; > } > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > > ------------------------------------------------------------------------ > > _______________________________________________ > Playerstage-developers mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-developers |
From: Jack O'Q. <jac...@gm...> - 2006-12-18 15:17:04
|
On 12/18/06, Reed Hedges <re...@mo...> wrote: > > We could also check for some common color names. Some platforms never have the > X11 color file, like Windows. Good idea. We can also certainly do a better job of finding the rgb.txt file on Linux. Too bad it's not always in a standard place. But, my patch is very simple: calling fclose() with a NULL file pointer is just wrong. It will segfault every time. -- joq |