20 #include "JackConstants.h"    21 #include "JackDriverLoader.h"    22 #include "JackTools.h"    23 #include "JackError.h"    38     void JackTools::KillServer()
    43         kill(GetPID(), SIGINT);
    47     void JackTools::ThrowJackNetException()
    49         throw JackNetException();
    52      int JackTools::MkDir(
const char* path)
    55         return CreateDirectory(path, NULL) == 0;
    57         return mkdir(path, 0777) != 0;
    61 #define DEFAULT_TMP_DIR "/tmp"    62     char* jack_tmpdir = (
char*)DEFAULT_TMP_DIR;
    64     int JackTools::GetPID()
    73     int JackTools::GetUID()
    83     const char* JackTools::DefaultServerName()
    85         const char* server_name;
    86         if ((server_name = getenv(
"JACK_DEFAULT_SERVER")) == NULL) {
    87             server_name = JACK_DEFAULT_SERVER_NAME;
    95     char* JackTools::UserDir()
   100     char* JackTools::ServerDir(
const char* server_name, 
char* server_dir)
   105     void JackTools::CleanupFiles(
const char* server_name) {}
   107     int JackTools::GetTmpdir()
   113     char* JackTools::UserDir()
   115         static char user_dir[JACK_PATH_MAX + 1] = 
"";
   118         if (user_dir[0] == 
'\0') {
   119             if (getenv (
"JACK_PROMISCUOUS_SERVER")) {
   120                 snprintf(user_dir, 
sizeof(user_dir), 
"%s/jack", jack_tmpdir);
   122                 snprintf(user_dir, 
sizeof(user_dir), 
"%s/jack-%d", jack_tmpdir, GetUID());
   130     char* JackTools::ServerDir(
const char* server_name, 
char* server_dir)
   135         snprintf(server_dir, JACK_PATH_MAX + 1, 
"%s/%s", UserDir(), server_name);
   139     void JackTools::CleanupFiles(
const char* server_name)
   142         struct dirent *dirent;
   143         char dir_name[JACK_PATH_MAX + 1] = 
"";
   144         ServerDir(server_name, dir_name);
   163         if ((dir = opendir(dir_name)) == NULL) {
   168         while ((dirent = readdir(dir)) != NULL) {
   170             char fullpath[JACK_PATH_MAX + 1];
   172             if ((strcmp(dirent->d_name, 
".") == 0) || (strcmp (dirent->d_name, 
"..") == 0)) {
   176             snprintf(fullpath, 
sizeof(fullpath), 
"%s/%s", dir_name, dirent->d_name);
   178             if (unlink(fullpath)) {
   179                 jack_error(
"cannot unlink `%s' (%s)", fullpath, strerror(errno));
   186         if (rmdir(dir_name)) {
   187             jack_error(
"cannot remove `%s' (%s)", dir_name, strerror(errno));
   191         if (rmdir(UserDir())) {
   192             if (errno != ENOTEMPTY) {
   193                 jack_error(
"cannot remove `%s' (%s)", UserDir(), strerror(errno));
   198     int JackTools::GetTmpdir()
   202         char buf[JACK_PATH_MAX + 2]; 
   204         if ((in = popen(
"jackd -l", 
"r")) == NULL) {
   208         if (fgets(buf, 
sizeof(buf), in) == NULL) {
   215         if (buf[len - 1] != 
'\n') {
   221         jack_tmpdir = (
char *)malloc(len);
   222         memcpy(jack_tmpdir, buf, len - 1);
   223         jack_tmpdir[len - 1] = 
'\0';
   230     void JackTools::RewriteName(
const char* name, 
char* new_name)
   233         for (i = 0; i < strlen(name); i++) {
   234             if ((name[i] == 
'/') || (name[i] == 
'\\')) {
   237                 new_name[i] = name[i];
   245 void BuildClientPath(
char* path_to_so, 
int path_len, 
const char* so_name)
   247     snprintf(path_to_so, path_len, ADDON_DIR 
"/%s.dll", so_name);
   250 void PrintLoadError(
const char* so_name)
   255     DWORD dw = GetLastError();
   258         FORMAT_MESSAGE_ALLOCATE_BUFFER |
   259         FORMAT_MESSAGE_FROM_SYSTEM |
   260         FORMAT_MESSAGE_IGNORE_INSERTS,
   263         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
   268     lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
   269         (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)so_name) + 40) * 
sizeof(TCHAR));
   270     _snprintf((LPTSTR)lpDisplayBuf, LocalSize(lpDisplayBuf) / 
sizeof(TCHAR),
   271         TEXT(
"error loading %s err = %s"), so_name, lpMsgBuf);
   276     LocalFree(lpDisplayBuf);
   281 void PrintLoadError(
const char* so_name)
   283     jack_log(
"error loading %s err = %s", so_name, dlerror());
   286 void BuildClientPath(
char* path_to_so, 
int path_len, 
const char* so_name)
   288     const char* internal_dir;
   289     if ((internal_dir = getenv(
"JACK_INTERNAL_DIR")) == 0) {
   290         if ((internal_dir = getenv(
"JACK_DRIVER_DIR")) == 0) {
   291             internal_dir = ADDON_DIR;
   295     snprintf(path_to_so, path_len, 
"%s/%s.so", internal_dir, so_name);
 SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)