617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*******************************************************************************
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Redistribution and use in source and binary forms, with or without
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * modification, are permitted provided that the following conditions are met:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions of source code must retain the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions in binary form must reproduce the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer in the documentation
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * and/or other materials provided with the distribution.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Neither the name of Intel Corp. nor the names of its
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * contributors may be used to endorse or promote products derived from this
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * software without specific prior written permission.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * POSSIBILITY OF SUCH DAMAGE.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *******************************************************************************/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define AT_VERSION_OUT_FORMAT "Version: %." ATstr(AT_VERSION_MAXSIZE) "s\n"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define AT_VERSION_SCAN_FORMAT "Version: %" ATstr(AT_VERSION_MAXSIZE) "s"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define AT_PIDFILE_NAME_FORMAT IATSTATERUNDIR "/%." ATstr(AT_APPNAME_MAXSIZE) "s.pid"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define AT_DEF_PIDFILE_NAME_FORMAT "/var/run/%." ATstr(AT_APPNAME_MAXSIZE) "s.pid"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#define AT_PROCSTAT_NAME_FORMAT "Name:\t%" ATstr(AT_APPNAME_MAXSIZE) "s\n"
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "PATH='/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin' && ";
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganbool ATVersion::ShowVersionIfArg(int argc, const char **argv, const char *versionStr)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (0 == strncmp(argv[i], AT_VERSION_ARGUMENT, strlen(AT_VERSION_ARGUMENT))) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan fprintf(stdout, AT_VERSION_OUT_FORMAT, versionStr);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganbool ATVersion::GetAppVersion(const char *appName, std::string &version)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan for (std::list<unsigned long>::iterator iter = pids.begin(); iter != pids.end(); iter++) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan version = GetProcessVersion(ATVersion::appSearchPath + appName);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganstd::string ATVersion::GetProcessVersion(std::string cmd)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan FILE *fp = popen((cmd + " " AT_VERSION_ARGUMENT " 2>/dev/null").c_str(), "r");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan int res = fscanf(fp, AT_VERSION_SCAN_FORMAT, buf);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganbool ATVersion::IsAppRunning(const char *appName, std::list<unsigned long> &pids)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(status_path, sizeof(status_path), AT_PIDFILE_NAME_FORMAT, appName);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(status_path, sizeof(status_path), AT_DEF_PIDFILE_NAME_FORMAT, appName);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan num_entries = scandir("/proc", &namelist, 0, alphasort);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (-1 != readlink("/proc/self", status_path, sizeof(status_path))) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if ((pidstr) && (pidstr[0] > '0') && (pidstr[0] <= '9')) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /* for process name we check the 'status' entry */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(status_path, sizeof(status_path), "/proc/%lu/status", pid);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan ret = fscanf(stat, AT_PROCSTAT_NAME_FORMAT, name_str);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if ((1 == ret) && (strncmp(name_str, appName, 15) == 0)) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganstd::string ATVersion::GetAppPathByPid(unsigned long pid)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(path, sizeof(path), "/proc/%lu/exe", pid);