int String_split(String *s, int pos){ if(s->num < pos) return 1; String *back; int size; back = String_create(); if(back == NULL) return 1; size = s->num - pos; mpc_memcpy(back->string, &s->string[pos], size); back->num = size; back->line_num = back->num / WindowWidth + 1; mpc_memset(&s->string[pos], 0, size); s->num -= size; s->line_num = s->num / WindowWidth + 1; back->next = s->next; if(back->next->prev != NULL) back->next->prev = back; s->next = back; back->prev = s; return 0; }
void mpc_log_stderr(int err, const char *fmt, ...) { mpc_logger_t *l = &mpc_logger; uint8_t errstr[MPC_LOG_MAX_LEN]; uint8_t *p, *last; va_list args; ssize_t n; last = errstr + MPC_LOG_MAX_LEN; p = errstr + 5; mpc_memcpy(errstr, "mpc: ", 5); va_start(args, fmt); p = mpc_vslprintf(p, last, fmt, args); va_end(args); if (err) { p = mpc_log_errno(p, last, err); } if (p > last - 1) { p = last - 1; } *p++ = LF; n = write(STDERR_FILENO, errstr, p - errstr); if (n < 0) { l->nerror++; } }