This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.5a
in repository iortcw.

commit d3f6f64e9288ed86d719866eda2b2d7f3142a095
Author: MAN-AT-ARMS <[email protected]>
Date:   Sun Jun 5 14:25:16 2016 -0400

    All: Ensure R_PrintLongString doesn't split words between buffers
---
 MP/code/rend2/tr_init.c    | 29 ++++++++++++++++++++++-------
 MP/code/renderer/tr_init.c | 29 ++++++++++++++++++++++-------
 SP/code/rend2/tr_init.c    | 29 ++++++++++++++++++++++-------
 SP/code/renderer/tr_init.c | 29 ++++++++++++++++++++++-------
 4 files changed, 88 insertions(+), 28 deletions(-)

diff --git a/MP/code/rend2/tr_init.c b/MP/code/rend2/tr_init.c
index 7d7675f..2ad7d9c 100644
--- a/MP/code/rend2/tr_init.c
+++ b/MP/code/rend2/tr_init.c
@@ -1104,16 +1104,31 @@ Workaround for ri.Printf's 1024 characters buffer limit.
 */
 void R_PrintLongString(const char *string) {
        char buffer[1024];
-       const char *p;
-       int size = strlen(string);
+       const char *p = string;
+       int remainingLength = strlen(string);
 
-       p = string;
-       while(size > 0)
+       while (remainingLength > 0)
        {
-               Q_strncpyz(buffer, p, sizeof (buffer) );
+               // Take as much characters as possible from the string without 
splitting words between buffers
+               // This avoids the client console splitting a word up when one 
half fits on the current line,
+               // but the second half would have to be written on a new line
+               int charsToTake = sizeof(buffer) - 1;
+               if (remainingLength > charsToTake) {
+                       while (p[charsToTake - 1] > ' ' && p[charsToTake] > ' 
') {
+                               charsToTake--;
+                               if (charsToTake == 0) {
+                                       charsToTake = sizeof(buffer) - 1;
+                                       break;
+                               }
+                       }
+               } else if (remainingLength < charsToTake) {
+                       charsToTake = remainingLength;
+               }
+
+               Q_strncpyz( buffer, p, charsToTake + 1 );
                ri.Printf( PRINT_ALL, "%s", buffer );
-               p += 1023;
-               size -= 1023;
+               remainingLength -= charsToTake;
+               p += charsToTake;
        }
 }
 
diff --git a/MP/code/renderer/tr_init.c b/MP/code/renderer/tr_init.c
index 25ed2bd..af21f69 100644
--- a/MP/code/renderer/tr_init.c
+++ b/MP/code/renderer/tr_init.c
@@ -1012,16 +1012,31 @@ Workaround for ri.Printf's 1024 characters buffer limit.
 */
 void R_PrintLongString(const char *string) {
        char buffer[1024];
-       const char *p;
-       int size = strlen(string);
+       const char *p = string;
+       int remainingLength = strlen(string);
 
-       p = string;
-       while(size > 0)
+       while (remainingLength > 0)
        {
-               Q_strncpyz(buffer, p, sizeof (buffer) );
+               // Take as much characters as possible from the string without 
splitting words between buffers
+               // This avoids the client console splitting a word up when one 
half fits on the current line,
+               // but the second half would have to be written on a new line
+               int charsToTake = sizeof(buffer) - 1;
+               if (remainingLength > charsToTake) {
+                       while (p[charsToTake - 1] > ' ' && p[charsToTake] > ' 
') {
+                               charsToTake--;
+                               if (charsToTake == 0) {
+                                       charsToTake = sizeof(buffer) - 1;
+                                       break;
+                               }
+                       }
+               } else if (remainingLength < charsToTake) {
+                       charsToTake = remainingLength;
+               }
+
+               Q_strncpyz( buffer, p, charsToTake + 1 );
                ri.Printf( PRINT_ALL, "%s", buffer );
-               p += 1023;
-               size -= 1023;
+               remainingLength -= charsToTake;
+               p += charsToTake;
        }
 }
 
diff --git a/SP/code/rend2/tr_init.c b/SP/code/rend2/tr_init.c
index d338fd1..31bc6ca 100644
--- a/SP/code/rend2/tr_init.c
+++ b/SP/code/rend2/tr_init.c
@@ -1108,16 +1108,31 @@ Workaround for ri.Printf's 1024 characters buffer limit.
 */
 void R_PrintLongString(const char *string) {
        char buffer[1024];
-       const char *p;
-       int size = strlen(string);
+       const char *p = string;
+       int remainingLength = strlen(string);
 
-       p = string;
-       while(size > 0)
+       while (remainingLength > 0)
        {
-               Q_strncpyz(buffer, p, sizeof (buffer) );
+               // Take as much characters as possible from the string without 
splitting words between buffers
+               // This avoids the client console splitting a word up when one 
half fits on the current line,
+               // but the second half would have to be written on a new line
+               int charsToTake = sizeof(buffer) - 1;
+               if (remainingLength > charsToTake) {
+                       while (p[charsToTake - 1] > ' ' && p[charsToTake] > ' 
') {
+                               charsToTake--;
+                               if (charsToTake == 0) {
+                                       charsToTake = sizeof(buffer) - 1;
+                                       break;
+                               }
+                       }
+               } else if (remainingLength < charsToTake) {
+                       charsToTake = remainingLength;
+               }
+
+               Q_strncpyz( buffer, p, charsToTake + 1 );
                ri.Printf( PRINT_ALL, "%s", buffer );
-               p += 1023;
-               size -= 1023;
+               remainingLength -= charsToTake;
+               p += charsToTake;
        }
 }
 
diff --git a/SP/code/renderer/tr_init.c b/SP/code/renderer/tr_init.c
index 4cb656e..5ddcf55 100644
--- a/SP/code/renderer/tr_init.c
+++ b/SP/code/renderer/tr_init.c
@@ -1016,16 +1016,31 @@ Workaround for ri.Printf's 1024 characters buffer limit.
 */
 void R_PrintLongString(const char *string) {
        char buffer[1024];
-       const char *p;
-       int size = strlen(string);
+       const char *p = string;
+       int remainingLength = strlen(string);
 
-       p = string;
-       while(size > 0)
+       while (remainingLength > 0)
        {
-               Q_strncpyz(buffer, p, sizeof (buffer) );
+               // Take as much characters as possible from the string without 
splitting words between buffers
+               // This avoids the client console splitting a word up when one 
half fits on the current line,
+               // but the second half would have to be written on a new line
+               int charsToTake = sizeof(buffer) - 1;
+               if (remainingLength > charsToTake) {
+                       while (p[charsToTake - 1] > ' ' && p[charsToTake] > ' 
') {
+                               charsToTake--;
+                               if (charsToTake == 0) {
+                                       charsToTake = sizeof(buffer) - 1;
+                                       break;
+                               }
+                       }
+               } else if (remainingLength < charsToTake) {
+                       charsToTake = remainingLength;
+               }
+
+               Q_strncpyz( buffer, p, charsToTake + 1 );
                ri.Printf( PRINT_ALL, "%s", buffer );
-               p += 1023;
-               size -= 1023;
+               remainingLength -= charsToTake;
+               p += charsToTake;
        }
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/iortcw.git

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to