Re: [CODE] Verify function

From: Erwin S. Andreasen (erwin@ANDREASEN.COM)
Date: 06/27/98


On Sat, 27 Jun 1998, James Turner wrote:

> >     c += snprintf(write + c, len - c, "...", ...);

> Won't quite do it.  A given verify function is called multiple times.
> If you called it as
>
> verify_function(rnum, buf, MAX_STRING_LENGTH);
>
> ten times in a row, you might overflow.  You'd have to use:
>
> verify_function(rnum, buf + strlen(buf), MAX_STRING_LENGTH - strlen(buf));
>
> That or keep track of the over-all length.  It gets messy... that's
> why a dropin replacement for sprintf would be nice.  Very useful in
> all the cases like the above, as well as getting rid of Borland C++'s
> problem (though using the c like above does so as well).

You could also use something like :

http://www.abandoned.org/drylock/ftp/buffer-1.tar.gz

which is a dynamically allocated buffer that expand itself as more data is
stuffed into it. You can put data into it via a buffer_strcat and a
bprintf - the latter prints to a small local buffer first, using snprintf,
so it will never overflow.

It looks BTW, damn much better in C++, if you'd rather like that version
:)

Buffer b;

b.printf("Blah blah. %d %d %s %d %x\n", ...);
b.printf("...."); // This now appends to previous data
ch->print(b); // operator const char* converts to what Character::print
              // wants

// and you don't have to buffer_free(buffer) when done in C++ :)


Oh, it's quite fast too, since it keeps the last-used position in the
buffer.

I remember replacing some code on a MUD that would do lots of strcats() to
show your skill list - for something like 500 skills, I think it took up
several CPU seconds to do a 'practice'!

It was quite much faster with the dynamic buffer :)



 =============================================================================
<erwin@andreasen.com>      Herlev, Denmark              UNIX System Programmer
<URL:http://www.abandoned.org/drylock/>     <*>         (not speaking for) DDE
 =============================================================================


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST