On Sun, Jul 09, 2006 at 07:00:03PM +0800, LI Daobing wrote:
> this diff does not contain escape.h and escape.cpp
Oops; try this one instead.
/* Steinar */
--
Homepage: http://www.sesse.net/
diff -Nur xdrawchem-1.9.9/xdrawchem/application.cpp
../xdrawchem-1.9.9/xdrawchem/application.cpp
--- xdrawchem-1.9.9/xdrawchem/application.cpp 2005-11-16 04:01:55.000000000
+0100
+++ ../xdrawchem-1.9.9/xdrawchem/application.cpp 2006-07-09
12:45:51.000000000 +0200
@@ -79,6 +79,7 @@
#include "xruler.h"
#include "dyk.h"
#include "charsel.h"
+#include "escape.h"
// main window icon
#include "xdc.xpm"
@@ -871,14 +872,12 @@
}
if (sendto == 1) {
std::cout << "Ghemical: ";
- exportFileName.prepend("ghemical ");
- passfail = system(exportFileName.ascii());
+ passfail = system("ghemical " + shell_escape(exportFileName));
std::cout << passfail << std::endl;
}
if (sendto == 2) {
std::cout << "KryoMol: ";
- exportFileName.prepend("kryomol ");
- passfail = system(exportFileName.ascii());
+ passfail = system("kryomol " + shell_escape(exportFileName));
std::cout << passfail << std::endl;
}
if (passfail != 0) {
@@ -1340,8 +1339,7 @@
QString n1, cmd1;
n1.setNum( getpid() );
n1.prepend("/tmp/");
- cmd1 = "convert > " + n1;
- system( cmd1.ascii() );
+ system( "convert > " + shell_escape(n1) );
QFile f1( n1 );
f1.open(IO_ReadOnly);
@@ -1352,8 +1350,7 @@
imagemagick = true;
}
- cmd1 = "rm " + n1;
- system( cmd1.ascii() );
+ system( "rm " + shell_escape(n1) );
QPixmap tosave;
// use "tosave" with ImageMagick to specify size
@@ -1369,11 +1366,9 @@
n1.append(".eps");
r->SaveEPS(n1);
//cmd1 = "convert -antialias " + n1 + " " + picfile;
- cmd1 = "convert -antialias -size " +sizehint + " " + n1 + " -resize "
- + sizehint + " " + picfile;
- system( cmd1.ascii() );
- cmd1 = "rm " + n1;
- system( cmd1.ascii() );
+ system( "convert -antialias -size " + shell_escape(sizehint) + " " +
shell_escape(n1) + " -resize "
+ + shell_escape(sizehint) + " " + shell_escape(picfile));
+ system( "rm " + shell_escape(n1) );
was_saved = true;
} else {
tosave = r->MakePixmap( fd.isTransparent() );
@@ -1404,8 +1399,7 @@
QString n1, cmd1;
n1.setNum( getpid() );
n1.prepend("/tmp/");
- cmd1 = "convert > " + n1;
- system( cmd1.ascii() );
+ system( "convert > " + shell_escape(n1) );
QFile f1( n1 );
f1.open(IO_ReadOnly);
@@ -1416,8 +1410,7 @@
imagemagick = true;
}
- cmd1 = "rm " + n1;
- system( cmd1.ascii() );
+ system( "rm " + shell_escape(n1) );
QPixmap tosave;
tosave = r->MakePixmap( ni_tflag );
@@ -1431,11 +1424,9 @@
n1 = ni_savefile;
n1.append(".eps");
r->SaveEPS(n1);
- cmd1 = "convert -antialias -size " +sizehint + " " + n1 + " -resize "
- + sizehint + " " + ni_savefile;
- system( cmd1.ascii() );
- cmd1 = "rm " + n1;
- system( cmd1.ascii() );
+ system( "convert -antialias -size " + shell_escape(sizehint) + " " +
shell_escape(n1) +
+ + " -resize " + shell_escape(sizehint) + " " +
shell_escape(ni_savefile) );
+ system( "rm " + shell_escape(n1) );
was_saved = true;
} else {
was_saved = tosave.save(ni_savefile, "PNG");
diff -Nur xdrawchem-1.9.9/xdrawchem/escape.cpp
../xdrawchem-1.9.9/xdrawchem/escape.cpp
--- xdrawchem-1.9.9/xdrawchem/escape.cpp 1970-01-01 01:00:00.000000000
+0100
+++ ../xdrawchem-1.9.9/xdrawchem/escape.cpp 2006-07-09 12:41:42.000000000
+0200
@@ -0,0 +1,9 @@
+#include "escape.h"
+
+QCString shell_escape(const QString &str)
+{
+ QString ret = str;
+ ret.replace("'", "\\'");
+ ret.replace("\\", "\\\\");
+ return "'" + ret.local8Bit() + "'";
+}
diff -Nur xdrawchem-1.9.9/xdrawchem/escape.h
../xdrawchem-1.9.9/xdrawchem/escape.h
--- xdrawchem-1.9.9/xdrawchem/escape.h 1970-01-01 01:00:00.000000000 +0100
+++ ../xdrawchem-1.9.9/xdrawchem/escape.h 2006-07-09 12:41:48.000000000
+0200
@@ -0,0 +1,8 @@
+#ifndef ESCAPE_H
+#define ESCAPE_H
+
+#include <qstring.h>
+
+QCString shell_escape(const QString &str);
+
+#endif
diff -Nur xdrawchem-1.9.9/xdrawchem/Makefile.am
../xdrawchem-1.9.9/xdrawchem/Makefile.am
--- xdrawchem-1.9.9/xdrawchem/Makefile.am 2005-07-20 04:27:54.000000000
+0200
+++ ../xdrawchem-1.9.9/xdrawchem/Makefile.am 2006-07-09 12:38:58.000000000
+0200
@@ -13,7 +13,7 @@
gobject.moc.cpp peptidebuilder.moc.cpp xruler.moc.cpp\
graphdialog.moc.cpp previewwidget.moc.cpp charsel.moc.cpp\
biotools.moc.cpp textshapedialog.moc.cpp
-xdrawchem_SOURCES = application.cpp application_ring.cpp arrow.cpp
biotools.cpp bond.cpp bondedit.cpp boshcp.cpp bracket.cpp cdx2cdxml.cpp
cdxml_reader.cpp charsel.cpp chemdata.cpp chemdata_cdx.cpp chemdata_cdxml.cpp
chemdata_cml.cpp chemdata_edit.cpp chemdata_mdl.cpp chemdata_rw.cpp
chemdata_rxn.cpp chemdata_tools.cpp chemdata_xdc.cpp chemdata_xml.cpp
crings_dialog.cpp curvearrow.cpp drawable.cpp fixeddialog.cpp graphdialog.cpp
graphwidget.cpp helpwindow.cpp main.cpp molecule.cpp molecule_1h_nmr.cpp
molecule_smiles.cpp molecule_sssr.cpp molecule_tools_1.cpp molecule_tools_2.cpp
molinfodialog.cpp myfiledialog.cpp netaccess.cpp netchoosedialog.cpp
netdialog.cpp pagesetupdialog.cpp peptidebuilder.cpp previewwidget.cpp
render2d.cpp render2d_draw.cpp render2d_event.cpp render2d_print.cpp
render2d_select.cpp render2d_text.cpp ringdialog.cpp sdg.cpp smilesdialog.cpp
symbol.cpp text.cpp textshapedialog.cpp to3d.cpp xdc_toolbutton.cpp xml_cml.cpp
xml_reader.cpp ioiface.cpp application_ob.cpp chemdata_event.cpp
molecule_obmol.cpp tooldialog.cpp ngw.cpp tool_1h_nmr.cpp tool_13c_nmr.cpp
tool_ir.cpp gobject.cpp tool_2d3d.cpp xruler.cpp dyk.cpp retro.cpp
application.moc.cpp graphwidget.moc.cpp render2d.moc.cpp\
+xdrawchem_SOURCES = application.cpp application_ring.cpp arrow.cpp
biotools.cpp bond.cpp bondedit.cpp boshcp.cpp bracket.cpp cdx2cdxml.cpp
cdxml_reader.cpp charsel.cpp chemdata.cpp chemdata_cdx.cpp chemdata_cdxml.cpp
chemdata_cml.cpp chemdata_edit.cpp chemdata_mdl.cpp chemdata_rw.cpp
chemdata_rxn.cpp chemdata_tools.cpp chemdata_xdc.cpp chemdata_xml.cpp
crings_dialog.cpp curvearrow.cpp drawable.cpp escape.cpp fixeddialog.cpp
graphdialog.cpp graphwidget.cpp helpwindow.cpp main.cpp molecule.cpp
molecule_1h_nmr.cpp molecule_smiles.cpp molecule_sssr.cpp molecule_tools_1.cpp
molecule_tools_2.cpp molinfodialog.cpp myfiledialog.cpp netaccess.cpp
netchoosedialog.cpp netdialog.cpp pagesetupdialog.cpp peptidebuilder.cpp
previewwidget.cpp render2d.cpp render2d_draw.cpp render2d_event.cpp
render2d_print.cpp render2d_select.cpp render2d_text.cpp ringdialog.cpp sdg.cpp
smilesdialog.cpp symbol.cpp text.cpp textshapedialog.cpp to3d.cpp
xdc_toolbutton.cpp xml_cml.cpp xml_reader.cpp ioiface.cpp application_ob.cpp
chemdata_event.cpp molecule_obmol.cpp tooldialog.cpp ngw.cpp tool_1h_nmr.cpp
tool_13c_nmr.cpp tool_ir.cpp gobject.cpp tool_2d3d.cpp xruler.cpp dyk.cpp
retro.cpp application.moc.cpp graphwidget.moc.cpp render2d.moc.cpp\
arrow.moc.cpp helpwindow.moc.cpp ringdialog.moc.cpp\
bondedit.moc.cpp http.moc.cpp smilesdialog.moc.cpp\
bond.moc.cpp molecule.moc.cpp symbol.moc.cpp\
diff -Nur xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp
../xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp
--- xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp 2005-08-07 22:00:19.000000000
+0200
+++ ../xdrawchem-1.9.9/xdrawchem/molinfodialog.cpp 2006-07-09
12:46:49.000000000 +0200
@@ -4,6 +4,7 @@
#include "molinfodialog.h"
#include "helpwindow.h"
#include "defs.h"
+#include "ascii.h"
// defined in main.cpp
extern QString RingDir;
@@ -64,9 +65,9 @@
QString ffurl, ffcmd;
ffurl = "http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=" + pcc;
- ffcmd = "firefox " + ffurl + " &";
+ ffcmd = "firefox " + shell_escape(ffurl) + " &";
std::cout << ffcmd << std::endl;
- system(ffcmd.ascii());
+ system( ffcmd );
QClipboard *cb = QApplication::clipboard();
// Copy text into the clipboard