Date: Thu, 28 Dec 1995 13:22:53 +0800 (WST) From: Peter Wemm <peter@jhome.DIALix.COM> To: Bruce Evans <bde@zeta.org.au> Cc: CVS-committers@freefall.freebsd.org, cvs-usrbin@freefall.freebsd.org, joerg@freefall.freebsd.org Subject: Re: cvs commit: src/usr.bin/tftp main.c Message-ID: <Pine.BSF.3.91.951228130224.13067H-100000@jhome.DIALix.COM> In-Reply-To: <199512280431.PAA13912@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 28 Dec 1995, Bruce Evans wrote: > > Modified: usr.bin/tftp main.c > > Log: > > Kill the (hopefully) last occurance of gets(3) in the base source tree. > > > > Revision Changes Path > > 1.3 +11 -6 src/usr.bin/tftp/main.c > > Now we can start fixing the fixes :-(. The one in sail/pl_main.c leaves > \n in the captain's name, and almost all of them don't read to the end > of the line for long lines, so junk may be left for the next read. I > would prefer a core dump. > > Bruce Perhaps the safest "fix" may be to shove a simple replacement for gets() into libc or libutil with a similar interface that we can use to take care of this sort of thing. We can edit our sources to change gets(line); to __ngets(line, sizeof(line)); stub take care of the hard work. Naturally, it's not portable but heck, our sources are for FreeBSD, not PortableBSD.. :-) Perhaps something like this for starters.. char * __ngets(buf, len) char *buf; size_t len; { char *s; size_t l; s = fgetln(stdin, &l); if (s == NULL || l == 0) { return NULL; } else { if (s[l-1] == '\n') --l; if (l > (len - 1)) l = len - 1; memcpy(buf, s, l); buf[l] = '\0'; return buf; } } Dont shoot! :-) It's just a thought... :-) (or perhaps put this in as a static function in the programs that wanted to call gets() in the first place and get them to use this instead...) Cheers, -Peter
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.91.951228130224.13067H-100000>