X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=sys_linux.c;h=c274cf3b361f60855dd9bf7e6a0991ad687eb602;hb=d2ba4a8ed129ea666d17e21b30edbba56aef7c1c;hp=79b5ae426f9aa3c2f8d530f2e5422240f9ae3b06;hpb=bbfc7709f79e2855c3f8bcb25164afd359b3089c;p=xonotic%2Fdarkplaces.git diff --git a/sys_linux.c b/sys_linux.c index 79b5ae42..c274cf3b 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -33,7 +33,7 @@ cvar_t sys_useclockgettime = {CVAR_SAVE, "sys_useclockgettime", "0", "use POSIX // ======================================================================= void Sys_Shutdown (void) { -#ifndef WIN32 +#ifdef FNDELAY fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY); #endif fflush(stdout); @@ -45,7 +45,7 @@ void Sys_Error (const char *error, ...) char string[MAX_INPUTLINE]; // change stdin to non blocking -#ifndef WIN32 +#ifdef FNDELAY fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY); #endif @@ -61,21 +61,22 @@ void Sys_Error (const char *error, ...) void Sys_PrintToTerminal(const char *text) { -#ifndef WIN32 +#ifdef FNDELAY // BUG: for some reason, NDELAY also affects stdout (1) when used on stdin (0). int origflags = fcntl (1, F_GETFL, 0); fcntl (1, F_SETFL, origflags & ~FNDELAY); -#else +#endif +#ifdef WIN32 #define write _write #endif while(*text) { - ssize_t written = write(1, text, strlen(text)); + fs_offset_t written = (fs_offset_t)write(1, text, strlen(text)); if(written <= 0) break; // sorry, I cannot do anything about this error - without an output text += written; } -#ifndef WIN32 +#ifdef FNDELAY fcntl (1, F_SETFL, origflags); #endif //fprintf(stdout, "%s", text); @@ -235,11 +236,14 @@ char *Sys_ConsoleInput(void) timeout.tv_usec = 0; if (select (1, &fdset, NULL, NULL, &timeout) != -1 && FD_ISSET(0, &fdset)) { - len = read (0, text, sizeof(text)); + len = read (0, text, sizeof(text) - 1); if (len >= 1) { // rip off the \n and terminate - text[len-1] = 0; + // div0: WHY? console code can deal with \n just fine + // this caused problems with pasting stuff into a terminal window + // so, not ripping off the \n, but STILL keeping a NUL terminator + text[len] = 0; return text; } } @@ -290,7 +294,7 @@ int main (int argc, char **argv) com_argc = argc; com_argv = (const char **)argv; -#ifndef WIN32 +#ifdef FNDELAY fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY); #endif