Skip to content
Snippets Groups Projects
Commit 87ef24a2 authored by Alexandre Savard's avatar Alexandre Savard
Browse files
parents 7f09d228 03c62c45
No related branches found
No related tags found
No related merge requests found
#!/bin/sh -e #!/bin/bash
# Workaround for http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 # Workaround for http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663
mkdir -p m4 mkdir -p m4
...@@ -7,11 +7,14 @@ HOOKS_DIR="../.git/hooks" ...@@ -7,11 +7,14 @@ HOOKS_DIR="../.git/hooks"
# install pre-commit hook for doing clean commits # install pre-commit hook for doing clean commits
if [ -d "$HOOKS_DIR" ]; if [ -d "$HOOKS_DIR" ];
then then
if test ! \( -x ${HOOKS_DIR}/pre-commit -a -L ${HOOKS_DIR}/pre-commit \); pushd ${HOOKS_DIR}
if test ! \( -x pre-commit -a -L pre-commit \);
then then
rm -f ${HOOKS_DIR}/pre-commit echo "Creating symbolic link for pre-commit hook..."
ln -s ${HOOKS_DIR}/pre-commit.sample ${HOOKS_DIR}/pre-commit rm -f pre-commit
ln -s pre-commit.sample pre-commit
fi fi
popd
fi fi
autoreconf --force --install --verbose -Wall -I m4 autoreconf --force --install --verbose -Wall -I m4
...@@ -29,7 +29,30 @@ ...@@ -29,7 +29,30 @@
*/ */
#include <libgen.h> #include <libgen.h>
#include <dirent.h>
#include <sys/stat.h>
#include <cstdio>
#include <cstdlib> #include <cstdlib>
#include <signal.h>
#include "global.h"
namespace {
// returns true if directory exists
bool check_dir(const char *path)
{
DIR *dir = opendir(path);
if (!dir) { // doesn't exist
if (mkdir(path, 0755) != 0) { // couldn't create the dir
perror(path);
return false;
}
} else
closedir(dir);
return true;
}
}
namespace fileutils { namespace fileutils {
static char *program_dir = NULL; static char *program_dir = NULL;
...@@ -44,4 +67,52 @@ const char *get_program_dir() ...@@ -44,4 +67,52 @@ const char *get_program_dir()
return program_dir; return program_dir;
} }
bool create_pidfile()
{
const char * const xdg_env = XDG_CACHE_HOME;
std::string path = xdg_env ? xdg_env : std::string(HOMEDIR) + DIR_SEPARATOR_STR ".cache/";
if (!check_dir(path.c_str()))
return false;
path += "sflphone";
if (!check_dir(path.c_str()))
return false;
std::string pidfile = path + "/" PIDFILE;
FILE *fp = fopen(pidfile.c_str(),"r");
if (fp) { // PID file exists. Check the former process still alive or not. If alive, give user a hint.
int oldPid;
if (fscanf(fp, "%d", &oldPid) != 1) {
ERROR("Couldn't read pidfile %s", pidfile.c_str());
return false;
}
fclose(fp);
if (kill(oldPid, 0) == 0) {
ERROR("There is already a sflphoned daemon running in the system. Starting Failed.");
return false;
}
}
// write pid file
fp = fopen(pidfile.c_str(),"w");
if (!fp) {
perror(pidfile.c_str());
return false;
} else {
std::ostringstream pidstr;
pidstr << getpid();
fputs(pidstr.str().c_str(), fp);
fclose(fp);
}
return true;
}
} }
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
namespace fileutils { namespace fileutils {
void set_program_dir(char *program_path); void set_program_dir(char *program_path);
const char *get_program_dir(); const char *get_program_dir();
bool create_pidfile();
} }
#endif // __FILEUTILS_H__ #endif // __FILEUTILS_H__
/* /*
* Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011 Savoir-Faire Linux Inc. * Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
* Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com> * Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
* Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Yan Morin <yan.morin@savoirfairelinux.com>
* Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com> * Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
...@@ -30,22 +30,19 @@ ...@@ -30,22 +30,19 @@
* as that of the covered work. * as that of the covered work.
*/ */
#include <libintl.h> #ifdef HAVE_CONFIG_H
#include <cstring> #include "config.h"
#endif
#include <iostream> #include <iostream>
#include <memory> // for auto_ptr #include <memory> // for auto_ptr
#include <string> #include <string>
#include <dirent.h>
#include <sys/stat.h>
#include <cc++/common.h> #include <cc++/common.h>
#include "global.h"
#include "fileutils.h" #include "fileutils.h"
#include "dbus/dbusmanager.h" #include "dbus/dbusmanager.h"
#include "manager.h" #include "manager.h"
#include "audio/audiolayer.h"
ost::CommandOptionNoArg console( ost::CommandOptionNoArg console(
"console", "c", "Log in console (instead of syslog)" "console", "c", "Log in console (instead of syslog)"
); );
...@@ -58,25 +55,7 @@ ost::CommandOptionNoArg help( ...@@ -58,25 +55,7 @@ ost::CommandOptionNoArg help(
"help", "h", "Print help" "help", "h", "Print help"
); );
// returns true if directory exists int main(int argc, char **argv)
static bool check_dir(const char *path)
{
DIR *dir = opendir(path);
if (!dir) { // doesn't exist
if (mkdir(path, 0755) != 0) { // couldn't create the dir
perror(path);
return false;
}
} else {
closedir(dir);
}
return true;
}
int
main(int argc, char **argv)
{ {
fileutils::set_program_dir(argv[0]); fileutils::set_program_dir(argv[0]);
// makeCommandOptionParse allocates the object with operator new, so // makeCommandOptionParse allocates the object with operator new, so
...@@ -84,7 +63,7 @@ main(int argc, char **argv) ...@@ -84,7 +63,7 @@ main(int argc, char **argv)
// TODO: This should eventually be replaced with std::unique_ptr for C++0x // TODO: This should eventually be replaced with std::unique_ptr for C++0x
std::auto_ptr<ost::CommandOptionParse> args(ost::makeCommandOptionParse(argc, argv, "")); std::auto_ptr<ost::CommandOptionParse> args(ost::makeCommandOptionParse(argc, argv, ""));
printf("SFLphone Daemon "VERSION", by Savoir-Faire Linux 2004-2011\n" \ printf("SFLphone Daemon " VERSION ", by Savoir-Faire Linux 2004-2012\n" \
"http://www.sflphone.org/\n"); "http://www.sflphone.org/\n");
if (help.numSet) { if (help.numSet) {
...@@ -99,49 +78,8 @@ main(int argc, char **argv) ...@@ -99,49 +78,8 @@ main(int argc, char **argv)
Logger::setConsoleLog(console.numSet); Logger::setConsoleLog(console.numSet);
Logger::setDebugMode(debug.numSet); Logger::setDebugMode(debug.numSet);
const char *xdg_env = XDG_CACHE_HOME; if (!fileutils::create_pidfile())
std::string path = xdg_env ? xdg_env : std::string(HOMEDIR) + DIR_SEPARATOR_STR ".cache/";
if (!check_dir(path.c_str()))
return 1;
path = path + "sflphone";
if (!check_dir(path.c_str()))
return 1;
std::string pidfile = path + "/" PIDFILE;
FILE *fp = fopen(pidfile.c_str(),"r");
if (fp) { // PID file exists. Check the former process still alive or not. If alive, give user a hint.
int oldPid;
if (fscanf(fp, "%d", &oldPid) != 1) {
std::cerr << "Couldn't read pidfile " << pidfile << std::endl;
return 1;
}
fclose(fp);
if (kill(oldPid, 0) == 0) {
std::cerr << "There is already a sflphoned daemon running in the system. Starting Failed." << std::endl;
return 1; return 1;
}
}
// write pid file
fp = fopen(pidfile.c_str(),"w");
if (!fp) {
perror(pidfile.c_str());
return 1;
} else {
std::ostringstream pidstr;
pidstr << getpid();
fputs(pidstr.str().c_str() , fp);
fclose(fp);
}
try { try {
Manager::instance().init(); Manager::instance().init();
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "logger.h" #include "logger.h"
#include "manager.h" #include "manager.h"
#include "constants.h" #include "constants.h"
#include "fileutils.h"
#include <cstdlib> #include <cstdlib>
...@@ -57,6 +58,8 @@ int main(int argc, char* argv[]) ...@@ -57,6 +58,8 @@ int main(int argc, char* argv[])
printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2010\n\n"); printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2010\n\n");
Logger::setConsoleLog(true); Logger::setConsoleLog(true);
Logger::setDebugMode(true); Logger::setDebugMode(true);
if (!fileutils::create_pidfile())
return 1;
int argvIndex = 1; int argvIndex = 1;
bool xmlOutput = false; bool xmlOutput = false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment