Hi all!
Did anybody see the memory leak in the original code ?
It remided me on what I was discussing with Scatter.
Here is the leak free, more secure version I just
finished:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "structs.h"
#include "utils.h"
#include "interpreter.h"
void
write_aliases(Character * ch)
{
FILE *file;
char fn[127], *buf;
struct alias *temp;
int length;
get_filename(GET_NAME(ch), fn, ALIAS_FILE);
unlink(fn);
if (!GET_ALIASES(ch))
return;
file = fopen(fn, "wt");
if (file == 0)
{
errlog("SYSERR: Can't create alias file!");
}
temp = GET_ALIASES(ch);
while (temp)
{
length = strlen(temp->alias);
length = MIN(length, 120);
*(temp->alias + length) = 0;
fprintf(file, "%d\n", length);
fprintf(file, "%s\n", temp->alias);
length = strlen(temp->replacement);
length = MIN(length, 120);
*(temp->replacement + length) = 0;
buf = temp->replacement;
while (*buf == ' ')
//skip leading blanks
{
length--;
buf++;
}
fprintf(file, "%d\n", length);
fprintf(file, "%s\n", buf);
fprintf(file, "%d\n", temp->type);
temp = temp->next;
}
fclose(file);
}
void
read_aliases(Character * ch)
{
FILE *file;
char fn[127];
struct alias *t2;
int length = 0;
char temp_buf[127], buf[127];
get_filename(GET_NAME(ch), fn, ALIAS_FILE);
file = fopen(fn, "r");
if (!file)
return;
CREATE(GET_ALIASES(ch),struct alias,1);
t2 = GET_ALIASES(ch);
do
{
if (fscanf(file, "%d\n", &length) != 1)
{
fclose(file);
return;
//faulty file ! !
}
.............
No guarantee or warranty implied, Cat.
--
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/ _/_/
_/_/ Thomas Katzlberger _/_/
_/_/ katzlbt@vuse.vanderbilt.edu _/_/
_/_/ @aBlackNeXT.called.garfield _/_/
_/_/ http://www.vuse.vanderbilt.edu/~katzlbt/ _/_/
_/_/ _/_/
_/_/ "You can tune a file system, but you can't tune a fish." _/_/
_/_/ UNIX man page for tunefs. _/_/
_/_/ _/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
This archive was generated by hypermail 2b30 : 12/07/00 PST