Try to handle ctrl-z a bit better.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5585 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
deb756d25b
commit
322754174b
1 changed files with 25 additions and 3 deletions
|
@ -424,7 +424,7 @@ void Sys_Error (const char *error, ...)
|
||||||
char string[1024];
|
char string[1024];
|
||||||
|
|
||||||
#ifndef __DJGPP__
|
#ifndef __DJGPP__
|
||||||
// change stdin to non blocking
|
// change stdin back to blocking, so the shell doesn't bug out.
|
||||||
if (!noconinput)
|
if (!noconinput)
|
||||||
fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
|
fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
|
||||||
#endif
|
#endif
|
||||||
|
@ -899,7 +899,7 @@ char *Sys_ConsoleInput(void)
|
||||||
if (!(fl & FNDELAY))
|
if (!(fl & FNDELAY))
|
||||||
{
|
{
|
||||||
fcntl(STDIN_FILENO, F_SETFL, fl | FNDELAY);
|
fcntl(STDIN_FILENO, F_SETFL, fl | FNDELAY);
|
||||||
Sys_Printf(CON_WARNING "stdin flags became blocking - gdb bug?\n");
|
// Sys_Printf(CON_WARNING "stdin flags became blocking - gdb bug?\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -907,7 +907,14 @@ char *Sys_ConsoleInput(void)
|
||||||
// if (!qrenderer)
|
// if (!qrenderer)
|
||||||
{
|
{
|
||||||
if (!fgets(text, sizeof(text), stdin))
|
if (!fgets(text, sizeof(text), stdin))
|
||||||
|
{
|
||||||
|
if (errno == EIO)
|
||||||
|
{
|
||||||
|
Sys_Printf(CON_WARNING "Backgrounded, ignoring stdin\n");
|
||||||
|
noconinput |= 2;
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
nl = strchr(text, '\n');
|
nl = strchr(text, '\n');
|
||||||
if (!nl) //err? wut?
|
if (!nl) //err? wut?
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -931,6 +938,15 @@ char *Sys_ConsoleInput(void)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _POSIX_C_SOURCE
|
||||||
|
static void SigCont(int code)
|
||||||
|
{
|
||||||
|
int fl = fcntl (STDIN_FILENO, F_GETFL, 0);
|
||||||
|
if (!(fl & FNDELAY))
|
||||||
|
fcntl(STDIN_FILENO, F_SETFL, fl | FNDELAY);
|
||||||
|
noconinput &= ~2;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
int main (int c, const char **v)
|
int main (int c, const char **v)
|
||||||
{
|
{
|
||||||
double time, oldtime, newtime;
|
double time, oldtime, newtime;
|
||||||
|
@ -942,6 +958,12 @@ int main (int c, const char **v)
|
||||||
|
|
||||||
signal(SIGFPE, SIG_IGN);
|
signal(SIGFPE, SIG_IGN);
|
||||||
signal(SIGPIPE, SIG_IGN);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
#ifdef _POSIX_C_SOURCE
|
||||||
|
signal(SIGTTIN, SIG_IGN); //have to ignore this if we want to not lock up when running backgrounded.
|
||||||
|
signal(SIGCONT, SigCont);
|
||||||
|
signal(SIGCHLD, SIG_IGN); //mapcluster stuff might leak zombie processes if we don't do this.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
memset(&parms, 0, sizeof(parms));
|
memset(&parms, 0, sizeof(parms));
|
||||||
|
|
||||||
|
@ -1018,7 +1040,7 @@ int main (int c, const char **v)
|
||||||
if (!isatty(STDIN_FILENO))
|
if (!isatty(STDIN_FILENO))
|
||||||
noconinput = !isPlugin; //don't read the stdin if its probably screwed (running in qtcreator seems to pipe stdout to stdin in an attempt to screw everything up).
|
noconinput = !isPlugin; //don't read the stdin if its probably screwed (running in qtcreator seems to pipe stdout to stdin in an attempt to screw everything up).
|
||||||
else
|
else
|
||||||
noconinput = COM_CheckParm("-noconinput");
|
noconinput = COM_CheckParm("-noconinput") || COM_CheckParm("-nostdin");
|
||||||
#ifndef __DJGPP__
|
#ifndef __DJGPP__
|
||||||
if (!noconinput)
|
if (!noconinput)
|
||||||
fcntl(STDIN_FILENO, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
|
fcntl(STDIN_FILENO, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
|
||||||
|
|
Loading…
Reference in a new issue