diff --git a/include/linux/printk.h b/include/linux/printk.h index 4e29af49..8f8dd6b9 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -21,23 +21,27 @@ static inline int vscnprintf(char *buf, size_t size, const char *fmt, va_list args) { - int i = vsnprintf(buf, size, fmt, args); - ssize_t ssize = size; + int i; - return (i >= ssize) ? (ssize - 1) : i; + i = vsnprintf(buf, size, fmt, args); + + if (likely(i < size)) + return i; + if (size != 0) + return size - 1; + return 0; } static inline int scnprintf(char * buf, size_t size, const char * fmt, ...) { - ssize_t ssize = size; - va_list args; - int i; + va_list args; + int i; - va_start(args, fmt); - i = vsnprintf(buf, size, fmt, args); - va_end(args); + va_start(args, fmt); + i = vscnprintf(buf, size, fmt, args); + va_end(args); - return (i >= ssize) ? (ssize - 1) : i; + return i; } #define printk(...) printf(__VA_ARGS__) diff --git a/linux/kthread.c b/linux/kthread.c index eef73fe8..eaab31db 100644 --- a/linux/kthread.c +++ b/linux/kthread.c @@ -57,6 +57,7 @@ struct task_struct *kthread_create(int (*thread_fn)(void *data), { va_list args; struct task_struct *p = malloc(sizeof(*p)); + int ret; memset(p, 0, sizeof(*p)); @@ -71,7 +72,9 @@ struct task_struct *kthread_create(int (*thread_fn)(void *data), atomic_set(&p->usage, 1); init_completion(&p->exited); - pthread_create(&p->thread, NULL, kthread_start_fn, p); + ret = pthread_create(&p->thread, NULL, kthread_start_fn, p); + if (ret) + die("pthread_create error %s", strerror(ret)); pthread_setname_np(p->thread, p->comm); return p; }