- return 1;
- char* saveptr;
- char* tok = strtok_r(buffer, "\n\r", &saveptr);
- do {
- ret = handle_command(tok, fd, cmd_q, client_lst);
- if(ret < 0)
- return ret;
- } while(tok = strtok_r(NULL, "\n\r", &saveptr));
- } while (ret == -1 && errno == EINTR);
-
- return 0;
+ return 2;
+ if(ret == -1 && errno == EAGAIN)
+ return 0;
+ else if(ret < 0)
+ break;
+
+ if(buffer->buf[buffer->offset] == '\n') {
+ buffer->buf[buffer->offset] = 0;
+ ret = process_cmd(buffer->buf, fd, cmd_q, client_lst);
+ buffer->offset = 0;
+ break;
+ }
+
+ buffer->offset++;
+ if(buffer->offset >= sizeof(buffer->buf)) {
+ log_printf(DEBUG, "string too long (fd=%d)", fd);
+ buffer->offset = 0;
+ return 0;
+ }
+ }
+
+ return ret;