uint myth_system(const QString &command, uint flags, uint timeout) { flags |= kMSRunShell | kMSAutoCleanup; MythSystem *ms = new MythSystem(command, flags); ms->Run(timeout); uint result = ms->Wait(0); if (!ms->GetSetting("RunInBackground")) delete ms; return result; }
void myth_system_jump_abort(void) { MythSystem ms; ms.JumpAbort(); }
/** * \brief Returns the device special file associated with the /sys/block node. * \param sysfs system filesystem path of removable block device. * \return path to the device special file */ QString MediaMonitorUnix::GetDeviceFile(const QString &sysfs) { QString msg = LOC + ":GetDeviceFile(" + sysfs + ")"; QString ret = sysfs; // In case of error, a working default? (device names usually match) ret.replace(QRegExp(".*/"), "/dev/"); #ifdef linux #if HAVE_LIBUDEV // Use libudev to determine the name ret.clear(); struct udev *udev = udev_new(); if (udev != NULL) { struct udev_device *device = udev_device_new_from_syspath(udev, sysfs.toAscii().constData()); if (device != NULL) { const char *name = udev_device_get_devnode(device); if (name != NULL) ret = tr(name); else { // This can happen when udev sends an AddDevice for a block // device with partitions. FindPartition locates a partition // in sysfs but udev hasn't created the devnode for it yet. // Udev will send another AddDevice for the partition later. LOG(VB_MEDIA, LOG_DEBUG, msg + " devnode not (yet) known"); } udev_device_unref(device); } else { LOG(VB_GENERAL, LOG_ALERT, msg + " udev_device_new_from_syspath returned NULL"); ret = ""; } udev_unref(udev); } else LOG(VB_GENERAL, LOG_ALERT, "MediaMonitorUnix::GetDeviceFile udev_new failed"); #else // HAVE_LIBUDEV // Use udevadm info to determine the name QStringList args; args << "info" << "-q" << "name" << "-rp" << sysfs; uint flags = kMSStdOut | kMSBuffered; if (VERBOSE_LEVEL_CHECK(VB_MEDIA, LOG_DEBUG)) flags |= kMSStdErr; // TODO: change this to a MythSystem on the stack? MythSystem *udevinfo = new MythSystem("udevinfo", args, flags); udevinfo->Run(4); if( udevinfo->Wait() != GENERIC_EXIT_OK ) { delete udevinfo; return ret; } if (VERBOSE_LEVEL_CHECK(VB_MEDIA, LOG_DEBUG)) { QTextStream estream(udevinfo->ReadAllErr()); while( !estream.atEnd() ) LOG(VB_MEDIA, LOG_DEBUG, msg + " - udevadm info error...\n" + estream.readLine()); } QTextStream ostream(udevinfo->ReadAll()); QString udevLine = ostream.readLine(); if (!udevLine.startsWith("device not found in database") ) ret = udevLine; delete udevinfo; #endif // HAVE_LIBUDEV #endif // linux LOG(VB_MEDIA, LOG_INFO, msg + "->'" + ret + "'"); return ret; }