I seem to be having a color processing problem. I am unable to fix it.
Sometimes, the MUD decides to show very weird things. Example:
When someone loots a few dozen items:
You get <item x>.
You get <item y>.
You get <item z>.
You get <item z>You getYou get <half of item z>. Youblahblahlah
etc.
And no, the code for the items are perfectly fine. This points to a buffer
problem.
Sometimes... logs
WARNING: write_to_descriptor: socket write would block, about to close.
and the mud will crash soon after.
I'll give a short code of what I have.
/* This should be equal to LARGE_BUFSIZE in structs.h */
#define BUFSPACE (12 * 1024 - 32 - 96)
/* LARGE_BUFSIZE = MAX_SOCK_BUF (12 * 1024)
- GARBAGE_SPACE (32)
- MAX_PROMPT_LENGTH (96)
File does not #include "structs.h", but the numbers are correct.
*/
#define BUFSIZE (BUFSPACE - 1)
char out_buf[BUFSPACE], insert_text[BUFSPACE];
void proc_color(char *inbuf, int color_lvl)
{
declarations and stuff
*out_buf = '\0';
while (inbuf[inpos] != '\0') {
if (is a color scheme) {
modify insert_text, but always ends with '\0'
inpos moves forward by length of color scheme
temp = strlen(insert_text);
if (strlen(out_buf) + temp < BUFSIZE) {
strcpy(out_buf + outpos, insert_text);
/* The strcpy here isn't the problem is it? */
outpos += temp;
}
else {
strcpy(out_buf + BUFSIZE - 15, "**OvERFLOW**\r\n");
outpos = BUFSIZE;
break;
}
} else
if (outpos < BUFSIZE)
out_buf[outpos++] = inbuf[inpos++];
else {
strcpy(out_buf + BUFSIZE - 15, "**OVERFLoW**\r\n");
break;
}
} /* while */
out_buf[outpos] = '\0';
strcpy(inbuf, out_buf);
/* The strcpy here isn't the problem is it? */
}
Is the problem that sizeof(out_buf) is greater than sizeof(inbuf)?
_________________________________________________________________
Join the world’s largest e-mail service with MSN Hotmail.
http://www.hotmail.com
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT