Blob Blame History Raw
diff -up ghostscript-9.00/psi/zusparam.c.iccprofiles-initdir ghostscript-9.00/psi/zusparam.c
--- ghostscript-9.00/psi/zusparam.c.iccprofiles-initdir	2010-09-23 14:15:24.628921593 +0100
+++ ghostscript-9.00/psi/zusparam.c	2010-09-23 14:29:21.189796748 +0100
@@ -593,14 +593,31 @@ set_default_gray_icc(i_ctx_t *i_ctx_p, g
     return(code);
 }
 
+extern_gx_io_device_table();
+
 static void
 current_icc_directory(i_ctx_t *i_ctx_p, gs_param_string * pval)
 {
     static const char *const rfs = "%rom%iccprofiles/";   /* as good as any other */
     const gs_imager_state * pis = (gs_imager_state *) igs;
+    int have_rom_device = 0;
+
+    if (pis->icc_manager->profiledir != NULL)
+        pval->data = (const byte *) pis->icc_manager->profiledir;
+    else {
+        int i;
+        for (i = 0; i < gx_io_device_table_count; i++) {
+            const gx_io_device *iodev = gx_io_device_table[i];
+            const char *dname = iodev->dname;
+
+            if (dname && strlen(dname) == 5 && !memcmp("%rom%", dname, 5)) {
+                have_rom_device = 1;
+                break;
+            }
+         }
 
-    pval->data = (const byte *)( (pis->icc_manager->profiledir == NULL) ?
-		  rfs : pis->icc_manager->profiledir);
+         pval->data = (const byte *) (have_rom_device ? rfs : "");
+    }
     pval->size = strlen((const char *)pval->data);
     pval->persistent = true;
 }