projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
don't overflow doing long writes on ptc (from thomas@utah-cs)
[unix-history]
/
usr
/
src
/
sys
/
kern
/
tty_subr.c
diff --git
a/usr/src/sys/kern/tty_subr.c
b/usr/src/sys/kern/tty_subr.c
index
7558bf6
..
d584b5f
100644
(file)
--- a/
usr/src/sys/kern/tty_subr.c
+++ b/
usr/src/sys/kern/tty_subr.c
@@
-1,4
+1,4
@@
-/* tty_subr.c
4.11 81/04/17
*/
+/* tty_subr.c
6.1 83/07/29
*/
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
@@
-13,7
+13,7
@@
char cwaiting;
* Character list get/put
*/
getc(p)
* Character list get/put
*/
getc(p)
-register struct clist *p;
+
register struct clist *p;
{
register struct cblock *bp;
register int c, s;
{
register struct cblock *bp;
register int c, s;
@@
-54,13
+54,14
@@
register struct clist *p;
return(c);
}
return(c);
}
+#ifdef notdef
/*
* copy clist to buffer.
* return number of bytes moved.
*/
q_to_b(q, cp, cc)
/*
* copy clist to buffer.
* return number of bytes moved.
*/
q_to_b(q, cp, cc)
-register struct clist *q;
-register char *cp;
+
register struct clist *q;
+
register char *cp;
{
register struct cblock *bp;
register int s;
{
register struct cblock *bp;
register int s;
@@
-109,6
+110,7
@@
register char *cp;
splx(s);
return(cp-acp);
}
splx(s);
return(cp-acp);
}
+#endif
/*
* Return count of contiguous characters
/*
* Return count of contiguous characters
@@
-116,10
+118,10
@@
register char *cp;
* Stop counting if flag&character is non-null.
*/
ndqb(q, flag)
* Stop counting if flag&character is non-null.
*/
ndqb(q, flag)
-register struct clist *q;
+
register struct clist *q;
{
{
-register cc;
-int s;
+
register cc;
+
int s;
s = spl5();
if (q->c_cc <= 0) {
s = spl5();
if (q->c_cc <= 0) {
@@
-156,20
+158,15
@@
out:
* Flush cc bytes from q.
*/
ndflush(q, cc)
* Flush cc bytes from q.
*/
ndflush(q, cc)
-register struct clist *q;
-register cc;
+
register struct clist *q;
+
register cc;
{
{
-register struct cblock *bp;
-char *end;
-int rem;
-register s;
+ register struct cblock *bp;
+ char *end;
+ int rem, s;
s = spl5();
s = spl5();
- if (q->c_cc < 0) {
- printf("neg q flush\n");
- goto out;
- }
- if (q->c_cc == 0) {
+ if (q->c_cc <= 0) {
goto out;
}
while (cc>0 && q->c_cc) {
goto out;
}
while (cc>0 && q->c_cc) {
@@
-216,7
+213,7
@@
out:
putc(c, p)
putc(c, p)
-register struct clist *p;
+
register struct clist *p;
{
register struct cblock *bp;
register char *cp;
{
register struct cblock *bp;
register char *cp;
@@
-258,9
+255,9
@@
register struct clist *p;
* return number of bytes not transfered.
*/
b_to_q(cp, cc, q)
* return number of bytes not transfered.
*/
b_to_q(cp, cc, q)
-register char *cp;
-struct clist *q;
-register int cc;
+
register char *cp;
+
struct clist *q;
+
register int cc;
{
register char *cq;
register struct cblock *bp;
{
register char *cq;
register struct cblock *bp;
@@
-312,8
+309,8
@@
out:
*/
char *
nextc(p, cp)
*/
char *
nextc(p, cp)
-register struct clist *p;
-register char *cp;
+
register struct clist *p;
+
register char *cp;
{
if (p->c_cc && ++cp != p->c_cl) {
{
if (p->c_cc && ++cp != p->c_cl) {
@@
-328,7
+325,7
@@
register char *cp;
* Remove the last character in the list and return it.
*/
unputc(p)
* Remove the last character in the list and return it.
*/
unputc(p)
-register struct clist *p;
+
register struct clist *p;
{
register struct cblock *bp;
register int c, s;
{
register struct cblock *bp;
register int c, s;
@@
-372,7
+369,7
@@
register struct clist *p;
* SHOULD JUST USE q_to_b AND THEN b_to_q HERE.
*/
catq(from, to)
* SHOULD JUST USE q_to_b AND THEN b_to_q HERE.
*/
catq(from, to)
-struct clist *from, *to;
+
struct clist *from, *to;
{
register c;
{
register c;
@@
-381,34
+378,46
@@
struct clist *from, *to;
}
/*
}
/*
- *
integer (2-byte
) get/put
+ *
Integer (short
) get/put
* using clists
*/
* using clists
*/
-#ifdef unneeded
+typedef short word_t;
+union chword {
+ word_t word;
+ struct {
+ char Ch[sizeof (word_t)];
+ } Cha;
+#define ch Cha.Ch
+};
+
getw(p)
getw(p)
-register struct clist *p;
+
register struct clist *p;
{
{
- register int s;
-
- if (p->c_cc <= 1)
- return(-1);
- s = getc(p);
- return(s | (getc(p)<<8));
+ register int i;
+ union chword x;
+
+ if (p->c_cc < sizeof (word_t))
+ return (-1);
+ for (i = 0; i < sizeof (word_t); i++)
+ x.ch[i] = getc(p);
+ return (x.word);
}
}
-#endif
putw(c, p)
putw(c, p)
-register struct clist *p;
+
register struct clist *p;
{
register s;
{
register s;
+ register int i;
+ union chword x;
s = spl5();
if (cfreelist==NULL) {
splx(s);
return(-1);
}
s = spl5();
if (cfreelist==NULL) {
splx(s);
return(-1);
}
- (void) putc(c, p);
- (void) putc(c>>8, p);
+ x.word = c;
+ for (i = 0; i < sizeof (word_t); i++)
+ (void) putc(x.ch[i], p);
splx(s);
splx(s);
- return(0);
+ return
(0);
}
}