diff options
Diffstat (limited to 'kcontrol/tdefontinst/lib/Misc.cpp')
-rw-r--r-- | kcontrol/tdefontinst/lib/Misc.cpp | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/kcontrol/tdefontinst/lib/Misc.cpp b/kcontrol/tdefontinst/lib/Misc.cpp new file mode 100644 index 000000000..1a5952ce4 --- /dev/null +++ b/kcontrol/tdefontinst/lib/Misc.cpp @@ -0,0 +1,238 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Namespace : KFI::Misc +// Author : Craig Drummond +// Project : K Font Installer +// Creation Date : 01/05/2001 +// Version : $Revision$ $Date$ +// +//////////////////////////////////////////////////////////////////////////////// +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//////////////////////////////////////////////////////////////////////////////// +// (C) Craig Drummond, 2001, 2002, 2003, 2004 +//////////////////////////////////////////////////////////////////////////////// + +#include "Misc.h" +#include <tqfile.h> +#include <kprocess.h> +#include <kstandarddirs.h> +#include <klargefile.h> +#include <tdeio/netaccess.h> +#include <unistd.h> + +namespace KFI +{ + +namespace Misc +{ + +TQString linkedTo(const TQString &i) +{ + TQString d; + + if(isLink(i)) + { + char buffer[1000]; + int n=readlink(TQFile::encodeName(i), buffer, 1000); + + if(n!=-1) + { + buffer[n]='\0'; + d=buffer; + } + } + + return d; +} + +TQString dirSyntax(const TQString &d) +{ + if(!d.isEmpty()) + { + TQString ds(d); + + ds.replace("//", "/"); + + int slashPos=ds.findRev('/'); + + if(slashPos!=(((int)ds.length())-1)) + ds.append('/'); + + return ds; + } + + return d; +} + +TQString xDirSyntax(const TQString &d) +{ + if(!d.isEmpty()) + { + TQString ds(d); + + ds.replace("//", "/"); + + int slashPos=ds.findRev('/'); + + if(slashPos==(((int)ds.length())-1)) + ds.remove(slashPos, 1); + return ds; + } + + return d; +} + +TQString getDir(const TQString &f) +{ + TQString d(f); + + int slashPos=d.findRev('/'); + + if(slashPos!=-1) + d.remove(slashPos+1, d.length()); + + return dirSyntax(d); +} + +TQString getFile(const TQString &f) +{ + TQString d(f); + + int slashPos=d.findRev('/'); + + if(slashPos!=-1) + d.remove(0, slashPos+1); + + return d; +} + +bool createDir(const TQString &dir) +{ + // + // Clear any umask before dir is created + mode_t oldMask=umask(0000); + bool status=TDEStandardDirs::makeDir(dir, DIR_PERMS); + // Reset umask + ::umask(oldMask); + return status; +} + +bool doCmd(const TQString &cmd, const TQString &p1, const TQString &p2, const TQString &p3) +{ + TDEProcess proc; + + proc << cmd; + + if(!p1.isEmpty()) + proc << p1; + if(!p2.isEmpty()) + proc << p2; + if(!p3.isEmpty()) + proc << p3; + + proc.start(TDEProcess::Block); + + return proc.normalExit() && proc.exitStatus()==0; +} + +TQString changeExt(const TQString &f, const TQString &newExt) +{ + TQString newStr(f); + int dotPos=newStr.findRev('.'); + + if(-1==dotPos) + newStr+=TQChar('.')+newExt; + else + { + newStr.remove(dotPos+1, newStr.length()); + newStr+=newExt; + } + return newStr; +} + +void createBackup(const TQString &f) +{ + const TQString constExt(".bak"); + + if(!fExists(f+constExt) && fExists(f)) + doCmd("cp", "-f", f, f+constExt); +} + +// +// Get a list of files associated with a file, e.g.: +// +// File: /home/a/courier.pfa +// +// Associated: /home/a/courier.afm /home/a/courier.pfm +// +void getAssociatedUrls(const KURL &url, KURL::List &list, bool afmAndPfm, TQWidget *widget) +{ + const char *afm[]={"afm", "AFM", "Afm", "AFm", "AfM", "aFM", "aFm", "afM", NULL}, + *pfm[]={"pfm", "PFM", "Pfm", "PFm", "PfM", "pFM", "pFm", "pfM", NULL}; + bool gotAfm=false, + localFile=url.isLocalFile(); + int e; + + for(e=0; afm[e]; ++e) + { + KURL statUrl(url); + TDEIO::UDSEntry uds; + + statUrl.setPath(changeExt(url.path(), afm[e])); + + if(localFile ? fExists(statUrl.path()) : TDEIO::NetAccess::stat(statUrl, uds, widget)) + { + list.append(statUrl); + gotAfm=true; + break; + } + } + + if(afmAndPfm || !gotAfm) + for(e=0; pfm[e]; ++e) + { + KURL statUrl(url); + TDEIO::UDSEntry uds; + + statUrl.setPath(changeExt(url.path(), pfm[e])); + if(localFile ? fExists(statUrl.path()) : TDEIO::NetAccess::stat(statUrl, uds, widget)) + { + list.append(statUrl); + break; + } + } +} + +time_t getTimeStamp(const TQString &item) +{ + KDE_struct_stat info; + + return !item.isEmpty() && 0==KDE_lstat(TQFile::encodeName(item), &info) ? info.st_mtime : 0; +} + + +bool check(const TQString &path, unsigned int fmt, bool checkW) +{ + KDE_struct_stat info; + TQCString pathC(TQFile::encodeName(path)); + + return 0==KDE_lstat(pathC, &info) && (info.st_mode&S_IFMT)==fmt && (!checkW || 0==::access(pathC, W_OK)); +} + +} + +} |