本文整理汇总了C++中KStandardDirs::findResource方法的典型用法代码示例。如果您正苦于以下问题:C++ KStandardDirs::findResource方法的具体用法?C++ KStandardDirs::findResource怎么用?C++ KStandardDirs::findResource使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KStandardDirs
的用法示例。
在下文中一共展示了KStandardDirs::findResource方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: itemChanged
void ProjectSelectionPage::itemChanged( const QModelIndex& current, const QModelIndex& )
{
KStandardDirs* dirs = m_templatesModel->plugin()->componentData().dirs();
QString picPath = dirs->findResource("apptemplate_previews", m_templatesModel->data( current, Qt::UserRole+2 ).toString() );
if( picPath.isEmpty() )
{
picPath = dirs->findResource("apptemplate_previews", "default-kdevelop.png");
}
ui->preview->setPixmap( QPixmap( picPath ) );
ui->description->setText( m_templatesModel->data( current ).toString() );
validateData();
}
示例2: ocrIntro
/*
* This creates a Tab OCR
*/
void KOCRBase::ocrIntro( )
{
m_ocrPage = addVBoxPage( i18n("OCR") );
// Caption - Label and image
/* labelstring */
(void) new QLabel( i18n("<b>Starting Optical Character Recognition with %1</b><p>").
arg( ocrEngineName() ), m_ocrPage );
// Find the kadmos logo and display if available
KStandardDirs stdDir;
QString logo = stdDir.findResource( "data", "kooka/pics/" + ocrEngineLogo() );
kdDebug(28000)<< "Reading logo " << logo << endl;
QPixmap pix;
QWidget *pa = m_ocrPage;
if( pix.load( logo ))
{
QHBox *hb_cap = new QHBox( m_ocrPage );
hb_cap->setSpacing( KDialog::spacingHint());
QLabel *imgLab = new QLabel( hb_cap );
imgLab->setAlignment( Qt::AlignHCenter | Qt::AlignTop );
imgLab->setPixmap( pix );
pa = hb_cap;
}
(void) new KActiveLabel( ocrEngineDesc(), pa );
}
示例3: load
void Rad::load()
{
if (loaded)
return;
KStandardDirs *dirs = KGlobal::dirs();
QString radkfile = dirs->findResource("data", "kiten/radkfile");
if (radkfile.isNull())
{
KMessageBox::error(0, i18n("Kanji radical information file not installed, so radical searching cannot be used."));
return;
}
QFile f(radkfile);
if (!f.open(IO_ReadOnly))
{
KMessageBox::error(0, i18n("Kanji radical information could not be loaded, so radical searching cannot be used."));
}
QTextStream t(&f);
t.setCodec(QTextCodec::codecForName("eucJP"));
Radical cur;
while (!t.eof())
{
QString s = t.readLine();
QChar first = s.at(0);
if (first == '#') // comment!
{
// nothing
}
else if (first == '$') // header
{
// save previous one
if( !cur.kanji().isNull() )
list.append(cur);
//first entry is trim(last 4 chars).. <rad><space><strokes>
unsigned int strokes = s.right(2).toUInt();
QString radical = QString(s.at(2));
cur = Radical(radical, strokes);
}
else // continuation
{
cur.addKanji(s);
}
}
// we gotta append the last one!!
// this nagged jasonkb for a bit wondering why fue wasn't showing up ;)
list.append(cur);
f.close();
loaded = true;
}
示例4: f
KRomajiEdit::KRomajiEdit(QWidget *parent, const char *name)
: KLineEdit(parent, name)
{
kana = "unset";
KStandardDirs *dirs = KGlobal::dirs();
QString romkana = dirs->findResource("data", "kiten/romkana.cnv");
if (romkana.isNull())
{
KMessageBox::error(0, i18n("Romaji information file not installed, so Romaji conversion cannot be used."));
return;
}
QFile f(romkana);
if (!f.open(IO_ReadOnly))
{
KMessageBox::error(0, i18n("Romaji information could not be loaded, so Romaji conversion cannot be used."));
}
QTextStream t(&f);
t.setCodec(QTextCodec::codecForName("eucJP"));
while (!t.eof())
{
QString s = t.readLine();
QChar first = s.at(0);
if (first == '#') // comment!
{
// nothing
}
else if (first == '$') // header
{
if (kana == "unset")
kana = "hiragana";
else
kana = "katakana";
}
else // body
{
QStringList things(QStringList::split(QChar(' '), s));
QString thekana(things.first());
QString romaji(*things.at(1));
if (kana == "hiragana")
hiragana[romaji] = thekana;
else if (kana == "katakana")
katakana[romaji] = thekana;
}
}
f.close();
kana = "english";
}
示例5: drawBackground
void TrafficGraph::drawBackground(QPainter *p, int w, int h)
{
p->fillRect(0,0,w, h, mBackgroundColor);
if(mSvgFilename.isEmpty())
return; //nothing to draw, return
QSvgRenderer *svgRenderer;
if(!sSvgRenderer.contains(mSvgFilename)) {
KStandardDirs* kstd = KGlobal::dirs();
QString file = kstd->findResource( "data", "ksysguard/" + mSvgFilename);
svgRenderer = new QSvgRenderer(file, this);
sSvgRenderer.insert(mSvgFilename, svgRenderer);
} else
svgRenderer = sSvgRenderer[mSvgFilename];
svgRenderer->render(p);
}
示例6: makeNameForNewSheet
QString Workspace::makeNameForNewSheet() const
{
/* Find a name of the form "Sheet %d" that is not yet used by any
* of the existing worksheets. */
int i = 1;
bool found = false;
QString sheetName;
KStandardDirs* kstd = KGlobal::dirs();
do {
sheetName = i18n( "Sheet %1" , i++ );
//Check we don't have any existing files with this name
found = !(kstd->findResource( "data", "ksysguard/" + sheetName + ".sgrd").isEmpty());
//Check if we have any sheets with the same tab name or file name
for(int i = 0; !found && i < mSheetList.size(); i++)
if ( tabText(indexOf(mSheetList.at(i))) == sheetName || QString(sheetName+".sgrd") == mSheetList.at(i)->fileName())
found = true;
} while ( found );
return sheetName;
}
示例7: run
/**
* Executes the script using the "sh" shell.
* @param sCscopePath If given, overrides the automatic check for Cscope's
* path
* @param sCtagsPath If given, overrides the automatic check for Ctags'
* path
* @param sDotPath If given, overrides the automatic check for Dot's
* path
* @param bCscopeOptsOnly Only verify cscope's path and options
* @return true if successful, false otherwise
*/
bool ConfigFrontend::run(const QString& sCscopePath,
const QString& sCtagsPath, const QString& sDotPath,
bool bCscopeOptsOnly)
{
QStringList slArgs;
KStandardDirs sd;
QString sScript;
// Execute using the user's shell
setUseShell();
// Find the configuration script
sScript = sd.findResource("data", "kscope/kscope_config");
if (sScript.isEmpty())
return false;
// Set command line arguments
slArgs << QString("sh") << sScript;
// Initialise environment
setEnv("CSCOPE_PATH", sCscopePath);
if (bCscopeOptsOnly){
slArgs << QString("-co");
} else {
setEnv("CTAGS_PATH", sCtagsPath);
setEnv("DOT_PATH", sDotPath);
}
// Parser initialisation
m_delim = Newline;
m_nNextResult = CscopePath;
if (!Frontend::run("sh", QStringList(slArgs)))
return false;
emit test(CscopePath);
return true;
}
示例8: readProperties
void Workspace::readProperties( const KConfigGroup& cfg )
{
QStringList selectedSheets = cfg.readPathEntry( "SelectedSheets", QStringList() );
if ( selectedSheets.isEmpty() ) {
/* If SelectedSheets config entry is not there, then it's
* probably the first time the user has started KSysGuard. We
* then "restore" a special default configuration. */
selectedSheets << "ProcessTable.sgrd";
selectedSheets << "SystemLoad2.sgrd";
} else if(selectedSheets[0] != "ProcessTable.sgrd") {
//We need to make sure that this is really is the process table on the first tab. No GUI way of changing this, but should make sure anyway.
//Plus this migrates users from the kde3 setup
selectedSheets.removeAll("ProcessTable.sgrd");
selectedSheets.prepend( "ProcessTable.sgrd");
}
int oldSystemLoad = selectedSheets.indexOf("SystemLoad.sgrd");
if(oldSystemLoad != -1) {
selectedSheets.replace(oldSystemLoad, "SystemLoad2.sgrd");
}
KStandardDirs* kstd = KGlobal::dirs();
QString filename;
for ( QStringList::Iterator it = selectedSheets.begin(); it != selectedSheets.end(); ++it ) {
filename = kstd->findResource( "data", "ksysguard/" + *it);
if(!filename.isEmpty()) {
restoreWorkSheet( filename, false);
}
}
int idx = cfg.readEntry( "currentSheet", 0 );
if (idx < 0 || idx > count() - 1) {
idx = 0;
}
setCurrentIndex(idx);
}
示例9: readSettings
bool ThumbView::readSettings()
{
KConfig *cfg = KGlobal::config();
cfg->setGroup( THUMB_GROUP );
bool dirty = false;
QColor color;
color = cfg->readColorEntry( MARGIN_COLOR1, &(colorGroup().base()));
if( color != m_marginColor1 )
{
dirty = true;
m_marginColor1 = color;
}
color = cfg->readColorEntry( MARGIN_COLOR2, &(colorGroup().foreground()));
if( color != m_marginColor2 )
{
dirty = true;
m_marginColor2 = color;
}
int value;
bool sizeDirty = false;
value = cfg->readNumEntry( THUMB_MARGIN, 5 );
if( value != m_thumbMargin )
{
sizeDirty = true;
m_thumbMargin = value;
}
value = cfg->readNumEntry( PIXMAP_WIDTH, 100 );
if( value != m_pixWidth || m_pixWidth == 0 )
{
sizeDirty = true;
m_pixWidth = value;
}
value = cfg->readNumEntry( PIXMAP_HEIGHT, 120 );
if( value != m_pixHeight || m_pixHeight == 0 )
{
sizeDirty = true;
m_pixHeight = value;
}
if( sizeDirty )
{
int gX = 2*m_thumbMargin+m_pixWidth+10;
int gY = 2*m_thumbMargin+m_pixHeight+10;
m_iconView->setGridX(gX);
m_iconView->setGridY(gY);
kdDebug(28000) << "Setting Grid " << gX << " - " << gY << endl;
}
KStandardDirs stdDir;
QString newBgImg = cfg->readEntry( BG_WALLPAPER, stdDir.findResource( "data", STD_TILE_IMG ) );
if( m_bgImg != newBgImg )
{
m_bgImg = newBgImg;
slSetBackGround();
}
return (sizeDirty || dirty);
}
示例10: fi
KdeSudo::KdeSudo(QWidget *parent, const char *name,const QString& icon, const QString& generic, bool withIgnoreButton)
: KPasswordDialog(KPasswordDialog::Password, false, (withIgnoreButton ? User1: false), icon, parent, name)
{
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
QString defaultComment = i18n("<b>%1</b> needs administrative privileges. Please enter your password for verification.");
p=NULL;
bError=false;
m_pCookie = new KCookie;
// Set vars
bool newDcop = args->isSet("newdcop");
bool realtime = args->isSet("r");
bool priority = args->isSet("p");
bool showCommand = (!args->isSet("d"));
bool changeUID = true;
bool noExec = false;
keepPwd = (!args->isSet("n"));
emptyPwd = args->isSet("s");
QString runas = args->getOption("u");
QString cmd;
if (!args->isSet("c") && !args->count() && (!args->isSet("s")))
{
KMessageBox::information(NULL, i18n("No command arguments supplied!\nUsage: kdesudo [-u <runas>] <command>\nKdeSudo will now exit..."));
noExec = true;
}
p = new KProcess;
p->clearArguments();
// Parsins args
/* Get the comment out of cli args */
QByteArray commentBytes = args->getOption("comment");
QTextCodec* tCodecConv = QTextCodec::codecForLocale();
QString comment = tCodecConv->toUnicode(commentBytes, commentBytes.size());
if (args->isSet("f"))
{
// If file is writeable, do not change uid
QString filename = QFile::decodeName(args->getOption("f"));
QString file = filename;
if (!file.isEmpty())
{
if (file.at(0) != '/')
{
KStandardDirs dirs;
dirs.addKDEDefaults();
file = dirs.findResource("config", file);
if (file.isEmpty())
{
kdError(1206) << "Config file not found: " << file << "\n";
exit(1);
}
}
QFileInfo fi(file);
if (!fi.exists())
{
kdError(1206) << "File does not exist: " << file << "\n";
exit(1);
}
if (fi.isWritable())
{
changeUID = false;
}
}
}
if (withIgnoreButton)
{
setButtonText(User1, i18n("&Ignore"));
}
// Apologies for the C code, taken from kdelibs/kdesu/kdesu_stub.c
// KControl and other places need to use the user's existing DCOP server
// For that we set DCOPSERVER. Create a file in /tmp and use iceauth to add magic cookies
// from the existing server and set ICEAUTHORITY to point to the file
if (!newDcop) {
dcopServer = m_pCookie->dcopServer();
QCString dcopAuth = m_pCookie->dcopAuth();
QCString iceAuth = m_pCookie->iceAuth();
FILE *fout;
char iceauthority[200];
char *host, *auth;
host = qstrdup(dcopServer);
auth = qstrdup(iceAuth);
int tempfile;
int oldumask = umask(077);
strcpy(iceauthority, "/tmp/iceauth.XXXXXXXXXX");
tempfile = mkstemp(iceauthority);
umask(oldumask);
if (tempfile == -1) {
kdError() << "error in kdesudo mkstemp" << endl;
exit(1);
} else {
// close(tempfile); //FIXME why does this make the connect() call later crash?
//.........这里部分代码省略.........
示例11: setup
void KraftViewRO::setup( DocGuardedPtr doc )
{
KraftViewBase::setup( doc );
if ( !doc ) return;
KLocale *locale = doc->locale();
if ( !locale ) locale = KGlobal::locale();
// do stuff like open a template and render values into it.
KStandardDirs stdDirs;
QString templFileName = QString( "kraftdoc_ro.trml" );
QString findFile = "kraft/reports/" + templFileName;
QString tmplFile = stdDirs.findResource( "data", findFile );
QByteArray kraftHome = qgetenv("KRAFT_HOME");
if( !kraftHome.isEmpty() ) {
QString file = QString( "%1/reports/kraftdoc_ro.trml").arg(QString::fromLocal8Bit(kraftHome));
QFileInfo fi(file);
if( fi.exists() && fi.isReadable() ) {
tmplFile = file;
}
}
if( tmplFile.isEmpty() ) {
kDebug() << "Could not find template to render ro view of document.";
return;
}
TextTemplate tmpl( tmplFile );
if( !tmpl.open() ) {
return;
}
tmpl.setValue( DOC_RO_TAG( "HEADLINE" ), doc->docType() + " " + doc->ident() );
tmpl.setValue( DOC_RO_TAG( "DATE" ), locale->formatDate( doc->date(), KLocale::ShortDate ) );
tmpl.setValue( DOC_RO_TAG( "DOC_TYPE" ), doc->docType() );
QString address = doc->address();
address.replace( '\n', "<br/>" );
tmpl.setValue( DOC_RO_TAG( "ADDRESS" ), address );
tmpl.setValue( DOC_RO_TAG( "DOCNO" ), doc->ident() );
tmpl.setValue( DOC_RO_TAG( "PRETEXT" ), doc->preText() );
tmpl.setValue( DOC_RO_TAG( "POSTTEXT" ), doc->postText() );
tmpl.setValue( DOC_RO_TAG( "SALUT" ), doc->salut() );
tmpl.setValue( DOC_RO_TAG( "GOODBYE" ), doc->goodbye() );
DocPositionList positions = doc->positions();
// check the tax settings: If all items have the same settings, its not individual.
bool individualTax = false;
int ttype = -1;
foreach( DocPositionBase *dp, positions ) {
if( ttype == -1 ) {
ttype = dp->taxType();
} else {
if( ttype != dp->taxType() ) { // different from previous one?
individualTax = true;
break;
}
}
}
int pos = 1;
int taxFreeCnt = 0;
int reducedTaxCnt = 0;
int fullTaxCnt = 0;
QString docType = doc->docType();
DocType dt(docType);
foreach( DocPositionBase *dpb, positions ) {
DocPosition *dp = static_cast<DocPosition*>(dpb);
tmpl.createDictionary( "ITEMS" );
tmpl.setValue( "ITEMS", "NUMBER", QString::number( pos++ ) );
tmpl.setValue( "ITEMS", "TEXT", dp->text() );
tmpl.setValue( "ITEMS", "AMOUNT", locale->formatNumber( dp->amount() ) );
tmpl.setValue( "ITEMS", "UNIT", dp->unit().einheit( dp->amount() ) );
double singlePrice = dp->unitPrice().toDouble();
if( dt.pricesVisible() ) {
tmpl.createSubDictionary("ITEMS", "PRICE_DISPLAY");
tmpl.setValue( "PRICE_DISPLAY", "SINGLE_PRICE", locale->formatMoney( singlePrice ) );
QString style( "positive" );
if ( singlePrice < 0 ) {
style = "negative";
}
tmpl.setValue( "PRICE_DISPLAY", "PRICE_STYLE", style );
tmpl.setValue( "PRICE_DISPLAY", "PRICE", locale->formatMoney( dp->overallPrice().toDouble() ) );
}
#if 0
QString taxType;
if( individualTax ) {
if( dp->taxType() == 1 ) {
taxFreeCnt++;
//.........这里部分代码省略.........
示例12: startApp
static int startApp()
{
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
// Stop daemon and exit?
if (args->isSet("s"))
{
KDEsuClient client;
if (client.ping() == -1)
{
kdError(1206) << "Daemon not running -- nothing to stop\n";
exit(1);
}
if (client.stopServer() != -1)
{
kdDebug(1206) << "Daemon stopped\n";
exit(0);
}
kdError(1206) << "Could not stop daemon\n";
exit(1);
}
QString icon;
if ( args->isSet("i"))
icon = args->getOption("i");
bool prompt = true;
if ( args->isSet("d"))
prompt = false;
// Get target uid
QCString user = args->getOption("u");
QCString auth_user = user;
struct passwd *pw = getpwnam(user);
if (pw == 0L)
{
kdError(1206) << "User " << user << " does not exist\n";
exit(1);
}
bool change_uid = (getuid() != pw->pw_uid);
// If file is writeable, do not change uid
QString file = QFile::decodeName(args->getOption("f"));
if (change_uid && !file.isEmpty())
{
if (file.at(0) != '/')
{
KStandardDirs dirs;
dirs.addKDEDefaults();
file = dirs.findResource("config", file);
if (file.isEmpty())
{
kdError(1206) << "Config file not found: " << file << "\n";
exit(1);
}
}
QFileInfo fi(file);
if (!fi.exists())
{
kdError(1206) << "File does not exist: " << file << "\n";
exit(1);
}
change_uid = !fi.isWritable();
}
// Get priority/scheduler
QCString tmp = args->getOption("p");
bool ok;
int priority = tmp.toInt(&ok);
if (!ok || (priority < 0) || (priority > 100))
{
KCmdLineArgs::usage(i18n("Illegal priority: %1").arg(tmp));
exit(1);
}
int scheduler = SuProcess::SchedNormal;
if (args->isSet("r"))
scheduler = SuProcess::SchedRealtime;
if ((priority > 50) || (scheduler != SuProcess::SchedNormal))
{
change_uid = true;
auth_user = "root";
}
// Get command
if (args->isSet("c"))
{
command = args->getOption("c");
for (int i=0; i<args->count(); i++)
{
QString arg = QFile::decodeName(args->arg(i));
KRun::shellQuote(arg);
command += " ";
command += QFile::encodeName(arg);
}
}
else
{
if( args->count() == 0 )
{
KCmdLineArgs::usage(i18n("No command specified."));
exit(1);
//.........这里部分代码省略.........
示例13: process_config_file
int process_config_file(void)
{
// Where is ktalkdlg installed ?
QString ktalkdlg_dir = locate("exe", "ktalkdlg");
ktalkdlg_dir.truncate( ktalkdlg_dir.findRev('/') );
// Has to be done, for any $KDEBINDIR in ktalkdrc.
setenv("KDEBINDIR", QFile::encodeName(ktalkdlg_dir), 0/*don't overwrite*/);
KConfig * syscfg = new KConfig( "ktalkdrc" );
syscfg -> setGroup("ktalkd");
syscfg -> setDollarExpansion(true);
QString result;
#define found(k) (!(result = syscfg -> readEntry(k)).isEmpty())
// QString cfgStr = cfgStr0.stripWhiteSpace();
if (found("AnswMach")) {
Options.answmach=booleanresult(result.ascii());
ktalk_debug("AnswMach : %d",Options.answmach);}
if (found("XAnnounce")) {
Options.XAnnounce=booleanresult(result.ascii());
ktalk_debug("XAnnounce : %d",Options.XAnnounce); }
if (found("Time")) {
Options.time_before_answmach=result.toInt();
ktalk_debug("Time : %d",Options.time_before_answmach); }
if (found("Sound")) {
Options.sound=booleanresult(result.ascii());
ktalk_debug("Sound : %d",Options.sound); }
if (found("SoundFile")) {
qstrncpy(Options.soundfile,QFile::encodeName(result),S_CFGLINE);
ktalk_debug("SoundFile = %s",Options.soundfile); }
if (found("SoundPlayer")) {
qstrncpy(Options.soundplayer,QFile::encodeName(result),S_CFGLINE);
ktalk_debug("SoundPlayer = %s",Options.soundplayer); }
if (found("SoundPlayerOpt")) {
qstrncpy(Options.soundplayeropt,QFile::encodeName(result),S_CFGLINE);
ktalk_debug("SoundPlayerOpt = %s",Options.soundplayeropt); }
if (found("MailProg")) {
qstrncpy(Options.mailprog,QFile::encodeName(result),S_CFGLINE);
ktalk_debug("Mail prog = %s",Options.mailprog); }
/* text based announcement */
if (found("Announce1")) { qstrncpy(Options.announce1,result.local8Bit(),S_CFGLINE); }
if (found("Announce2")) { qstrncpy(Options.announce2,result.local8Bit(),S_CFGLINE); }
if (found("Announce3")) { qstrncpy(Options.announce3,result.local8Bit(),S_CFGLINE); }
if (found("NEUUser")) {
qstrncpy(Options.NEU_user,result.local8Bit(),S_CFGLINE);
ktalk_debug("NEUUser = %s", Options.NEU_user);
}
if (found("NEUBehaviour")) {
Options.NEU_behaviour=result.toInt();
ktalk_debug("NEUBehaviour : %d",Options.NEU_behaviour);
}
if (found("NEUForwardMethod")) {
qstrncpy(Options.NEU_forwardmethod,result.ascii(),5);
ktalk_debug("NEUForwardMethod = %s", Options.NEU_forwardmethod);
}
if (found("ExtPrg")) {
qstrncpy(Options.extprg,QFile::encodeName(result),S_CFGLINE);
ktalk_debug("Ext prg = %s",Options.extprg); }
else { /* has to work even without config file at all */
KStandardDirs stddirs;
qstrncpy(Options.extprg, QFile::encodeName(stddirs.findResource("exe","ktalkdlg")), S_CFGLINE-1);
}
delete syscfg;
ktalk_debug("End of global configuration");
return 1;
}
示例14: startApp
static int startApp()
{
KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
// Stop daemon and exit?
if (args->isSet("s"))
{
KDEsuClient client;
if (client.ping() == -1)
{
kError(1206) << "Daemon not running -- nothing to stop\n";
exit(1);
}
if (client.stopServer() != -1)
{
kDebug(1206) << "Daemon stopped\n";
exit(0);
}
kError(1206) << "Could not stop daemon\n";
exit(1);
}
QString icon;
if ( args->isSet("i"))
icon = args->getOption("i");
bool prompt = true;
if ( args->isSet("d"))
prompt = false;
// Get target uid
QByteArray user = args->getOption("u").toLocal8Bit();
QByteArray auth_user = user;
struct passwd *pw = getpwnam(user);
if (pw == 0L)
{
kError(1206) << "User " << user << " does not exist\n";
exit(1);
}
bool other_uid = (getuid() != pw->pw_uid);
bool change_uid = other_uid;
if (!change_uid) {
char *cur_user = getenv("USER");
if (!cur_user)
cur_user = getenv("LOGNAME");
change_uid = (!cur_user || user != cur_user);
}
// If file is writeable, do not change uid
QString file = args->getOption("f");
if (other_uid && !file.isEmpty())
{
if (file.at(0) != '/')
{
KStandardDirs dirs;
file = dirs.findResource("config", file);
if (file.isEmpty())
{
kError(1206) << "Config file not found: " << file << "\n";
exit(1);
}
}
QFileInfo fi(file);
if (!fi.exists())
{
kError(1206) << "File does not exist: " << file << "\n";
exit(1);
}
change_uid = !fi.isWritable();
}
// Get priority/scheduler
QString tmp = args->getOption("p");
bool ok;
int priority = tmp.toInt(&ok);
if (!ok || (priority < 0) || (priority > 100))
{
KCmdLineArgs::usageError(i18n("Illegal priority: %1", tmp));
exit(1);
}
int scheduler = SuProcess::SchedNormal;
if (args->isSet("r"))
scheduler = SuProcess::SchedRealtime;
if ((priority > 50) || (scheduler != SuProcess::SchedNormal))
{
change_uid = true;
auth_user = "root";
}
// Get command
if (args->isSet("c"))
{
command = args->getOption("c").toLocal8Bit();
// Accepting additional arguments here is somewhat weird,
// but one can conceive use cases: have a complex command with
// redirections and additional file names which need to be quoted
// safely.
}
else
{
if( args->count() == 0 )
//.........这里部分代码省略.........