=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/telnet/ring.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** src/usr.bin/telnet/ring.c 1996/03/27 19:33:05 1.2 --- src/usr.bin/telnet/ring.c 1998/03/12 04:57:38 1.3 *************** *** 1,4 **** ! /* $OpenBSD: ring.c,v 1.2 1996/03/27 19:33:05 niklas Exp $ */ /* $NetBSD: ring.c,v 1.7 1996/02/28 21:04:07 thorpej Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: ring.c,v 1.3 1998/03/12 04:57:38 art Exp $ */ /* $NetBSD: ring.c,v 1.7 1996/02/28 21:04:07 thorpej Exp $ */ /* *************** *** 34,47 **** * SUCH DAMAGE. */ ! #ifndef lint ! #if 0 ! static char sccsid[] = "@(#)ring.c 8.2 (Berkeley) 5/30/95"; ! static char rcsid[] = "$NetBSD: ring.c,v 1.7 1996/02/28 21:04:07 thorpej Exp $"; ! #else ! static char rcsid[] = "$OpenBSD: ring.c,v 1.2 1996/03/27 19:33:05 niklas Exp $"; ! #endif ! #endif /* not lint */ /* * This defines a structure for a ring buffer. --- 34,40 ---- * SUCH DAMAGE. */ ! #include "telnet_locl.h" /* * This defines a structure for a ring buffer. *************** *** 54,79 **** * */ - #include - #ifndef NO_STRING_H - #include - #endif - #include - #include - - #ifdef size_t - #undef size_t - #endif - - #include - #ifndef FILIO_H - #include - #endif - #include - - #include "ring.h" - #include "general.h" - /* Internal macros */ #if !defined(MIN) --- 47,52 ---- *************** *** 124,129 **** --- 97,105 ---- ring->top = ring->bottom+ring->size; + #if defined(ENCRYPTION) + ring->clearto = 0; + #endif return 1; } *************** *** 194,199 **** --- 170,184 ---- (ring_subtract(ring, ring->mark, ring->consume) < count)) { ring->mark = 0; } + #if defined(ENCRYPTION) + if (ring->consume < ring->clearto && + ring->clearto <= ring->consume + count) + ring->clearto = 0; + else if (ring->consume + count > ring->top && + ring->bottom <= ring->clearto && + ring->bottom + ((ring->consume + count) - ring->top)) + ring->clearto = 0; + #endif ring->consume = ring_increment(ring, ring->consume, count); ring->consumetime = ++ring_clock; /* *************** *** 322,327 **** --- 307,345 ---- count -= i; buffer += i; } + } + #endif + + #if defined(ENCRYPTION) + void + ring_encrypt(Ring *ring, void (*encryptor)()) + { + unsigned char *s, *c; + + if (ring_empty(ring) || ring->clearto == ring->supply) + return; + + if (!(c = ring->clearto)) + c = ring->consume; + + s = ring->supply; + + if (s <= c) { + (*encryptor)(c, ring->top - c); + (*encryptor)(ring->bottom, s - ring->bottom); + } else + (*encryptor)(c, s - c); + + ring->clearto = ring->supply; + } + + void + ring_clearto(Ring *ring) + { + if (!ring_empty(ring)) + ring->clearto = ring->supply; + else + ring->clearto = 0; } #endif