summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/printk.h24
-rw-r--r--linux/kthread.c5
2 files changed, 18 insertions, 11 deletions
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;
}