char *line = (char *)malloc((LWS_PRE + INPUT_LINE_LENGTH)*sizeof(char));
if (!line) {
perror("malloc");
+ return NULL;
}
return line + LWS_PRE;
}
if (!copy) {
return NULL;
}
- strcpy(copy, line);
+ strncpy(copy, line, INPUT_LINE_LENGTH);
}
void free_line(char *line)
break;
case LWS_CALLBACK_SERVER_WRITEABLE:
- line = lines->first->line;
- n = strlen(line);
- m = lws_write(wsi, (unsigned char *)line, n, LWS_WRITE_TEXT);
- if (lines->first->next != NULL) {
+ if (lines->first) {
+ line = lines->first->line;
+ n = strlen(line);
+ m = lws_write(wsi, (unsigned char *)line, n, LWS_WRITE_TEXT);
list_remove(lines);
- lws_callback_on_writable_all_protocol(lws_get_context(wsi),
- &protocols[PROTOCOL_MERICA_TERMINAL]);
+ if (lines->first) {
+ lws_callback_on_writable_all_protocol(lws_get_context(wsi),
+ &protocols[PROTOCOL_MERICA_TERMINAL]);
+ }
+ } else {
+ line = copy_line(JSON_EMPTY);
+ if (line) {
+ n = strlen(line);
+ m = lws_write(wsi, (unsigned char *)line, n, LWS_WRITE_TEXT);
+ free_line(line);
+ } else {
+ return -1;
+ }
}
if (m < n) {
fprintf(stderr, "ERROR %d writing to di socket\n", n);
ev_io_ws *w = &(self->fd_watcher);
w->context = context;
- char *line = copy_line(JSON_EMPTY);
- if (!line) {
- return -1;
- }
w->lines = list_init();
if (!w->lines) {
- free_line(line);
- return -1;
- }
- if (list_add(w->lines, line) != 0) {
- list_deinit(w->lines);
return -1;
}
protocols[PROTOCOL_MERICA_TERMINAL].user = (void *)w->lines;
- line = new_line();
+ char *line = new_line();
if (!line) {
list_deinit(w->lines);
return -1;