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