(recvline, recv_output): Use it.
recvline(int s, char *buf)
{
int sz = 1024;
- char *bp, *end;
+ char *bp;
char ch;
ssize_t n;
- long id;
bp = buf;
for (;;) {
*bp++ = ch;
*bp = 0;
+ return parseid(buf);
+}
+
+int
+parseid(char *line)
+{
+ char *end;
+ long id;
- id = strtol(buf, &end, 16);
- if (end == buf || *end != ' ') {
- fprintf(stderr, "Malformed id in line %s", buf);
+ id = strtol(line, &end, 16);
+ if (end == line || *end != ' ') {
+ fprintf(stderr, "Malformed id in line %s", line);
id = -1;
}
if (id > C_LAST)
void putse(void);
#endif
int recvline(int s, char *buf);
+int parseid(char *);
int expect(int s, int match, char *buf);
int tcp_connect(char *, char *);
int login(int s, char *uname, char *cname, char *cpass, int kill_proc, int);
char buf[4096];
ssize_t n;
int i, ch, len;
- char *line, *end;
+ char *line;
n = read(sock, buf, sizeof(buf));
if (n < 0)
lbuf_init(&lbuf);
break;
}
- if (ch != ' ') {
- lbuf_putc(&lbuf, ch);
+ lbuf_putc(&lbuf, ch);
+ if (ch != ' ')
break;
- }
line = lbuf_line(&lbuf);
- id = strtol(line, &end, 16);
- if (end == line || *end) {
- /* FIXME gripe bad id */
- id = -1;
- }
+ id = parseid(line);
lbuf_init(&lbuf);
switch (id) {