Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 40521 | Differences between
and this patch

Collapse All | Expand All

(-)fixcrio.c-dist (-6 / +34 lines)
Lines 16-35 Link Here
16
int leftlen;
16
int leftlen;
17
int leftpos;
17
int leftpos;
18
int leftflagcr = 0;
18
int leftflagcr = 0;
19
19
20
int rightstatus = 0;
20
int rightstatus = 0;
21
char rightbuf[512];
21
char rightbuf[512];
22
int rightlen;
22
int rightlen;
23
int rightpos;
23
int rightpos;
24
int rightflagcr = 0;
24
int rightflagcr = 0;
25
25
26
#define NULL ((void *)0)
27
int active = 1;
28
int gotleft_tls = 0;
29
static char left_tls[] = "STARTTLS";
30
static char right_tls[] = "220";
31
static char *left_p = NULL;
32
static char *right_p = NULL;
33
26
void doit(int fdleft,int fdright)
34
void doit(int fdleft,int fdright)
27
{
35
{
28
  struct taia stamp;
36
  struct taia stamp;
29
  struct taia deadline;
37
  struct taia deadline;
30
  iopause_fd x[4];
38
  iopause_fd x[4];
31
  int xlen;
39
  int xlen;
32
  iopause_fd *io0;
40
  iopause_fd *io0;
33
  iopause_fd *ioleft;
41
  iopause_fd *ioleft;
34
  iopause_fd *io1;
42
  iopause_fd *io1;
35
  iopause_fd *ioright;
43
  iopause_fd *ioright;
Lines 76-98 Link Here
76
      if (r <= 0) {
84
      if (r <= 0) {
77
        leftstatus = -1;
85
        leftstatus = -1;
78
        close(fdleft);
86
        close(fdleft);
79
      }
87
      }
80
      else {
88
      else {
81
        leftstatus = 1;
89
        leftstatus = 1;
82
	leftpos = 0;
90
	leftpos = 0;
83
	leftlen = 0;
91
	leftlen = 0;
84
	for (i = 0;i < r;++i) {
92
	for (i = 0;i < r;++i) {
85
	  ch = prebuf[i];
93
	  ch = prebuf[i];
86
	  if (ch == '\n')
94
          if (active)
87
	    if (!leftflagcr)
95
            if (ch == '\n') {
88
	      leftbuf[leftlen++] = '\r';
96
              if (!leftflagcr)
97
                leftbuf[leftlen++] = '\r';
98
              gotleft_tls = (left_p != NULL && *left_p == 0);
99
              if (gotleft_tls)
100
                right_p = right_tls;
101
              left_p = left_tls;
102
            } else if (left_p != NULL && *left_p != 0) {
103
              if (ch == *left_p)
104
                left_p++;
105
              else
106
                left_p = NULL;
107
            }
89
	  leftbuf[leftlen++] = ch;
108
	  leftbuf[leftlen++] = ch;
90
	  leftflagcr = (ch == '\r');
109
	  leftflagcr = (ch == '\r');
91
	}
110
	}
92
      }
111
      }
93
    }
112
    }
94
113
95
    if (ioleft && ioleft->revents) {
114
    if (ioleft && ioleft->revents) {
96
      r = write(fdleft,leftbuf + leftpos,leftlen - leftpos);
115
      r = write(fdleft,leftbuf + leftpos,leftlen - leftpos);
97
      if (r == -1) break;
116
      if (r == -1) break;
98
      leftpos += r;
117
      leftpos += r;
Lines 100-122 Link Here
100
    }
119
    }
101
120
102
    if (ioright && ioright->revents) {
121
    if (ioright && ioright->revents) {
103
      r = read(fdright,prebuf,sizeof prebuf);
122
      r = read(fdright,prebuf,sizeof prebuf);
104
      if (r <= 0) break;
123
      if (r <= 0) break;
105
      rightstatus = 1;
124
      rightstatus = 1;
106
      rightpos = 0;
125
      rightpos = 0;
107
      rightlen = 0;
126
      rightlen = 0;
108
      for (i = 0;i < r;++i) {
127
      for (i = 0;i < r;++i) {
109
	ch = prebuf[i];
128
	ch = prebuf[i];
110
	if (ch == '\n')
129
        if (active)
111
	  if (!rightflagcr)
130
          if (ch == '\n') {
112
	    rightbuf[rightlen++] = '\r';
131
            if (!rightflagcr)
132
              rightbuf[rightlen++] = '\r';
133
            active = !(right_p != NULL && *right_p == 0);
134
            right_p = NULL;
135
          } else if (right_p != NULL && *right_p != 0) {
136
            if (ch == *right_p)
137
              right_p++;
138
            else
139
              right_p = NULL;
140
          }
113
	rightbuf[rightlen++] = ch;
141
	rightbuf[rightlen++] = ch;
114
	rightflagcr = (ch == '\r');
142
	rightflagcr = (ch == '\r');
115
      }
143
      }
116
    }
144
    }
117
145
118
    if (io1 && io1->revents) {
146
    if (io1 && io1->revents) {
119
      r = write(1,rightbuf + rightpos,rightlen - rightpos);
147
      r = write(1,rightbuf + rightpos,rightlen - rightpos);
120
      if (r == -1) break;
148
      if (r == -1) break;
121
      rightpos += r;
149
      rightpos += r;
122
      if (rightpos == rightlen) rightstatus = 0;
150
      if (rightpos == rightlen) rightstatus = 0;

Return to bug 40521