[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/kviewshell/plugins/dvi [POSSIBLY UNSAFE]
From:       Stefan Kebekus <kebekus () kde ! org>
Date:       2006-10-25 7:04:03
Message-ID: 1161759843.648116.29528.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 598957 by kebekus:

fixes problem with DVI files that contain references to non-existent EPS files


 M  +21 -2     psgs.cpp   [POSSIBLY UNSAFE: system]
 M  +9 -0      special.cpp  


--- trunk/KDE/kdegraphics/kviewshell/plugins/dvi/psgs.cpp #598956:598957
@@ -4,7 +4,7 @@
 //
 // Part of KDVI - A framework for multipage text/gfx viewers
 //
-// (C) 2004 Stefan Kebekus
+// (C) 2004--2006 Stefan Kebekus
 // Distributed under the GPL
 
 #include <config.h>
@@ -231,7 +231,7 @@
 
   proc << argus;
   //  if (proc.start(KProcess::Block) == false) {
-#warning We uses 'system' here because KProcess often crashes if started from a \
non-gui thread +#warning We use 'system' here because KProcess often crashes if \
started from a non-gui thread  
   if (system(argus.join(" ").latin1()) != 0) {
     // Starting ghostscript did not work. 
@@ -337,6 +337,24 @@
       return fi2.absoluteFilePath();
   }
 
+  // If all else fails, use kpsewhich to find the filename. Note: we
+  // can't use the convenient "KProcIO" class here because this
+  // crashes infrequently when this method is called from a
+  // non-GUI-thread. Instead, we use an ugly "system"-call, make
+  // kpsewhich write its output to a temporary file and read that
+  // file.
+  QTemporaryFile outFile;
+  outFile.open();
+  outFile.close(); // we are want the filename, not the file
+
+  QString cmd_line = "kpsewhich " + filename + ">" + outFile.name();
+  system(cmd_line.latin1());
+  if (outFile.open() == false)
+    return QString::null;
+  QTextStream in(&outFile);
+  return in.readLine().stripWhiteSpace();
+
+  /*
   // Otherwise, use kpsewhich to find the eps file.
   QString EPSfilename;
   KProcIO proc;
@@ -345,6 +363,7 @@
   proc.readln(EPSfilename);
   
   return EPSfilename;
+  */
 }
 
 #include "psgs.moc"
--- trunk/KDE/kdegraphics/kviewshell/plugins/dvi/special.cpp #598956:598957
@@ -354,12 +354,21 @@
   parse_special_argument(include_command, "angle=", &angle);
 
   // If we have a png, gif, jpeg or mng file, we need to draw it here.
+#warning We should be checking mime-types here (see below), but KDE mime-type \
functions crash if called from a non-GUI thread +  bool const isGFX = \
(EPSfilename.endsWith(".png", Qt::CaseInsensitive) || +                      \
EPSfilename.endsWith(".gif", Qt::CaseInsensitive) || +                      \
EPSfilename.endsWith(".jpg", Qt::CaseInsensitive) || +                      \
EPSfilename.endsWith(".jpeg", Qt::CaseInsensitive) || +                      \
EPSfilename.endsWith(".mng", Qt::CaseInsensitive)); +
+  /*
   KMimeType::Ptr const mime_type = KMimeType::findByFileContent(EPSfilename);
   QString const & mime_type_name = mime_type->name();
   bool const isGFX = (mime_type_name == "image/png" ||
                       mime_type_name == "image/gif" ||
                       mime_type_name == "image/jpeg" ||
                       mime_type_name == "video/x-mng");
+  */
 
   // So, if we do not have a PostScript file, but a graphics file, and
   // if that file exists, we draw it here.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic