[iortcw] 66/152: All: Ensure R_PrintLongString doesn't split words between buffers
Simon McVittie
smcv at debian.org
Fri Sep 8 10:40:02 UTC 2017
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 <M4N4T4RMS at gmail.com>
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
More information about the Pkg-games-commits
mailing list