summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugin.c2
-rw-r--r--apps/plugin.h6
-rw-r--r--firmware/kernel/include/thread.h1
-rw-r--r--firmware/libc/errno.c6
-rw-r--r--firmware/libc/include/errno.h6
5 files changed, 14 insertions, 7 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 93779d7a6c..4bed707c11 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -684,7 +684,7 @@ static const struct plugin_api rockbox_api = {
684 684
685 /* misc */ 685 /* misc */
686#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 686#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
687 &errno, 687 __errno,
688#endif 688#endif
689 srand, 689 srand,
690 rand, 690 rand,
diff --git a/apps/plugin.h b/apps/plugin.h
index 6a15f86919..fd4e468b91 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -160,12 +160,12 @@ void* plugin_get_buffer(size_t *buffer_size);
160#define PLUGIN_MAGIC 0x526F634B /* RocK */ 160#define PLUGIN_MAGIC 0x526F634B /* RocK */
161 161
162/* increase this every time the api struct changes */ 162/* increase this every time the api struct changes */
163#define PLUGIN_API_VERSION 229 163#define PLUGIN_API_VERSION 230
164 164
165/* update this to latest version if a change to the api struct breaks 165/* update this to latest version if a change to the api struct breaks
166 backwards compatibility (and please take the opportunity to sort in any 166 backwards compatibility (and please take the opportunity to sort in any
167 new function which are "waiting" at the end of the function table) */ 167 new function which are "waiting" at the end of the function table) */
168#define PLUGIN_MIN_API_VERSION 228 168#define PLUGIN_MIN_API_VERSION 230
169 169
170/* plugin return codes */ 170/* plugin return codes */
171/* internal returns start at 0x100 to make exit(1..255) work */ 171/* internal returns start at 0x100 to make exit(1..255) work */
@@ -829,7 +829,7 @@ struct plugin_api {
829 829
830 /* misc */ 830 /* misc */
831#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 831#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
832 int* __errno; 832 int * (*__errno)(void);
833#endif 833#endif
834 void (*srand)(unsigned int seed); 834 void (*srand)(unsigned int seed);
835 int (*rand)(void); 835 int (*rand)(void);
diff --git a/firmware/kernel/include/thread.h b/firmware/kernel/include/thread.h
index 9cc33b23ae..8c13b462e6 100644
--- a/firmware/kernel/include/thread.h
+++ b/firmware/kernel/include/thread.h
@@ -210,6 +210,7 @@ struct thread_entry
210 volatile intptr_t retval; /* Return value from a blocked operation/ 210 volatile intptr_t retval; /* Return value from a blocked operation/
211 misc. use */ 211 misc. use */
212#endif 212#endif
213 int __errno; /* Thread error number (errno tls) */
213#ifdef HAVE_PRIORITY_SCHEDULING 214#ifdef HAVE_PRIORITY_SCHEDULING
214 /* Priority summary of owned objects that support inheritance */ 215 /* Priority summary of owned objects that support inheritance */
215 struct blocker *blocker; /* Pointer to blocker when this thread is blocked 216 struct blocker *blocker; /* Pointer to blocker when this thread is blocked
diff --git a/firmware/libc/errno.c b/firmware/libc/errno.c
index 6e7bb62b51..2e3cd9083e 100644
--- a/firmware/libc/errno.c
+++ b/firmware/libc/errno.c
@@ -1 +1,5 @@
1int errno; 1#include "thread.h"
2int * __errno(void)
3{
4 return &thread_self_entry()->__errno;
5}
diff --git a/firmware/libc/include/errno.h b/firmware/libc/include/errno.h
index 6a24a1938f..9df261db9f 100644
--- a/firmware/libc/include/errno.h
+++ b/firmware/libc/include/errno.h
@@ -10,10 +10,12 @@
10 10
11#ifndef _SYS_ERRNO_H_ 11#ifndef _SYS_ERRNO_H_
12 12
13extern int * __errno(void);
14
13#ifdef PLUGIN 15#ifdef PLUGIN
14#define errno (*rb->__errno) 16#define errno (*rb->__errno())
15#else 17#else
16extern int errno; 18#define errno (*__errno())
17#endif 19#endif
18 20
19#define EPERM 1 /* Not super-user */ 21#define EPERM 1 /* Not super-user */