Репозитории ALT
S: | 1.8.2-alt4 |
D: | 1.3.5-alt2.1 |
5.1: | 1.3.9-alt0.M51.1 |
4.1: | 1.3.6-alt1.M41.1 |
4.0: | 1.3.5-alt3.M40.1 |
3.0: | 1.3.2-alt3 |
Группа :: Сети/Мгновенные сообщения
Пакет: licq
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: licq-1.2.7-remove-pidfile.patch
Скачать
Скачать
--- licq-1.2.7/src/licq.cpp~ 2004-07-09 17:57:49 +0400
+++ licq-1.2.7/src/licq.cpp 2004-07-12 16:58:26 +0400
@@ -275,6 +275,8 @@ bool CLicq::Init(int argc, char **argv)
sprintf(LIB_DIR, "%s/%s", INSTALL_PREFIX, BASE_LIB_DIR);
// Check pid
+ char proc_cmdline_path[MAX_FILENAME_LEN], proc_line[256];
+ bool proc_failed = false;
char szConf[MAX_FILENAME_LEN], szKey[32];
snprintf(szConf, MAX_FILENAME_LEN, "%s/licq.pid", BASE_DIR);
szConf[MAX_FILENAME_LEN - 1] = '\0';
@@ -290,10 +292,34 @@ bool CLicq::Init(int argc, char **argv)
}
else
{
+ sprintf(proc_cmdline_path, "/proc/%d/cmdline", pid);
+ if( access(proc_cmdline_path, R_OK) == 0 )
+ {
+ FILE *proc_file = fopen(proc_cmdline_path, "r");
+ if (proc_file != NULL)
+ {
+ fgets(proc_line, 255, proc_file);
+ if( strstr(proc_line, "licq") == NULL )
+ {
+ gLog.Warn("%sLicq: Ignoring stale lockfile (pid %d)\n", L_WARNxSTR, pid);
+ }
+ else
+ proc_failed = true;
+ fclose(proc_file);
+ }
+ else
+ proc_failed = true;
+ }
+ else
+ proc_failed = true;
+
+ if(proc_failed)
+ {
gLog.Error("%sLicq: Already running at pid %d.\n"
"%s Kill process or remove %s.\n",
L_ERRORxSTR, pid, L_BLANKxSTR, szConf);
return false;
+ }
}
}
fclose(fs);