void buffer_printf(DESCRIPTOR_DATA *d, char *fmt, ...)
{
char buf[MAX_STRING_LENGTH*2];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
}
void log_printf( sh_int log_type, char *fmt, ...)
{
char buf[MAX_STRING_LENGTH*2];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
log_string_plus( buf, log_type, LEVEL_LOG );
}
void command( CHAR_DATA *ch, DO_FUN *command, char *fmt, ...)
{
char buf[MAX_STRING_LENGTH*2];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
(command)( ch, buf);
}
void stralloc_printf( char **pointer, char *fmt, ...)
{
char buf[MAX_STRING_LENGTH*2];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
if (*pointer)
STRFREE(*pointer);
*pointer = STRALLOC( buf);
return;
}
void strdup_printf( char **pointer, char *fmt, ...)
{
char buf[MAX_STRING_LENGTH*2];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
if (*pointer)
DISPOSE(*pointer);
*pointer = str_dup( buf);
return;
}
/*
Simple function to do away with the usage of buffers everywhere you want formatted data.
An example usage:
case 2: sprintf( buf, "What do you want on your tombstone, %s?", victname );
do_say( ch, buf );
break;
would become:
case 2:
do_say( ch, format( "What do you want on your tombstone, %s?", victname) );
break;
Removing the sprintf call, and the need for the buf variable.
*/
char *format( char *fmt, ...)
{
static char newstring[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH*2]; /* better safe than sorry */
va_list args;
newstring[0] = '\0';
if (fmt[0] == '\0')
return " ";
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
if (buf[0] == '\0')
return " ";
strcpy( newstring, buf);
return newstring;
}