Kernel build mostly successful
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@3454 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
parent
acc12dd900
commit
24c72f8cae
|
@ -9,7 +9,7 @@
|
|||
<tr align="center" bgcolor="#e4e4e4">
|
||||
<td>
|
||||
<h1><big><font color="#3c34ec"><i>NuttX README Files</i></font></big></h1>
|
||||
<p>Last Updated: March 19, 2010</p>
|
||||
<p>Last Updated: April 2, 2010</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -167,8 +167,12 @@
|
|||
| | `- <a href="nuttx/drivers/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
| |- graphics/
|
||||
| | `- <a href="nuttx/graphics/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
| |- lib/
|
||||
| | `- <a href="nuttx/lib/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
| |- libxx/
|
||||
| | `- <a href="nuttx/libxx/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
| |- syscall/
|
||||
| | `- <a href="nuttx/syscall/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
| `- tools/
|
||||
| `- <a href="nuttx/tols/README.txt?view=log"><b><i>README.txt</i></b></a>
|
||||
`- apps/
|
||||
|
|
|
@ -382,7 +382,11 @@ Below is a guide to the available README files in the NuttX source tree:
|
|||
| `- README.txt
|
||||
|- graphics/
|
||||
| `- README.txt
|
||||
|- lib/
|
||||
| `- README.txt
|
||||
|- libxx/
|
||||
| `- README.txt
|
||||
|- syscall/
|
||||
| `- README.txt
|
||||
`- tools/
|
||||
`- README.txt
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
############################################################################
|
||||
# fs/Makefile
|
||||
#
|
||||
# Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
# Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
@ -47,11 +47,10 @@ else
|
|||
CSRCS += fs_open.c fs_close.c fs_read.c fs_write.c fs_ioctl.c \
|
||||
fs_poll.c fs_select.c fs_lseek.c fs_dup.c fs_filedup.c \
|
||||
fs_dup2.c fs_fcntl.c fs_filedup2.c fs_mmap.c fs_opendir.c \
|
||||
fs_closedir.c fs_stat.c fs_readdir.c fs_readdirr.c \
|
||||
fs_seekdir.c fs_telldir.c fs_rewinddir.c fs_files.c fs_inode.c \
|
||||
fs_inodefind.c fs_inodereserve.c fs_statfs.c fs_inoderemove.c \
|
||||
fs_registerdriver.c fs_unregisterdriver.c fs_inodeaddref.c \
|
||||
fs_inoderelease.c
|
||||
fs_closedir.c fs_stat.c fs_readdir.c fs_seekdir.c \
|
||||
fs_rewinddir.c fs_files.c fs_inode.c fs_inodefind.c fs_inodereserve.c \
|
||||
fs_statfs.c fs_inoderemove.c fs_registerdriver.c fs_unregisterdriver.c \
|
||||
fs_inodeaddref.c fs_inoderelease.c
|
||||
CSRCS += fs_registerblockdriver.c fs_unregisterblockdriver.c \
|
||||
fs_findblockdriver.c fs_openblockdriver.c fs_closeblockdriver.c
|
||||
ifneq ($(CONFIG_DISABLE_MOUNTPOINT),y)
|
||||
|
|
|
@ -139,7 +139,7 @@ EXTERN int sched_rr_get_interval(pid_t pid, struct timespec *interval);
|
|||
|
||||
EXTERN int sched_lock(void);
|
||||
EXTERN int sched_unlock(void);
|
||||
EXTERN int32_t sched_lockcount(void);
|
||||
EXTERN int sched_lockcount(void);
|
||||
|
||||
/* If instrumentation of the scheduler is enabled, then some outboard logic
|
||||
* must provide the following interfaces.
|
||||
|
|
|
@ -57,15 +57,15 @@
|
|||
|
||||
#define SYS__exit (CONFIG_SYS_RESERVED+0)
|
||||
#define SYS_accept (CONFIG_SYS_RESERVED+1)
|
||||
#define SYS_bind (CONFIG_SYS_RESERVED+2)
|
||||
#define SYS_clearenv (CONFIG_SYS_RESERVED+3)
|
||||
#define SYS_clock_getres (CONFIG_SYS_RESERVED+4)
|
||||
#define SYS_clock_gettime (CONFIG_SYS_RESERVED+5)
|
||||
#define SYS_clock_settime (CONFIG_SYS_RESERVED+6)
|
||||
#define SYS_close (CONFIG_SYS_RESERVED+7)
|
||||
#define SYS_closedir (CONFIG_SYS_RESERVED+8)
|
||||
#define SYS_connect (CONFIG_SYS_RESERVED+9)
|
||||
#define SYS_creat (CONFIG_SYS_RESERVED+10)
|
||||
#define SYS_atexit (CONFIG_SYS_RESERVED+2)
|
||||
#define SYS_bind (CONFIG_SYS_RESERVED+3)
|
||||
#define SYS_clearenv (CONFIG_SYS_RESERVED+4)
|
||||
#define SYS_clock_getres (CONFIG_SYS_RESERVED+5)
|
||||
#define SYS_clock_gettime (CONFIG_SYS_RESERVED+6)
|
||||
#define SYS_clock_settime (CONFIG_SYS_RESERVED+7)
|
||||
#define SYS_close (CONFIG_SYS_RESERVED+8)
|
||||
#define SYS_closedir (CONFIG_SYS_RESERVED+9)
|
||||
#define SYS_connect (CONFIG_SYS_RESERVED+10)
|
||||
#define SYS_dup (CONFIG_SYS_RESERVED+11)
|
||||
#define SYS_dup2 (CONFIG_SYS_RESERVED+12)
|
||||
#define SYS_exit (CONFIG_SYS_RESERVED+13)
|
||||
|
@ -86,9 +86,9 @@
|
|||
#define SYS_mkfifo (CONFIG_SYS_RESERVED+28)
|
||||
#define SYS_mmap (CONFIG_SYS_RESERVED+29)
|
||||
#define SYS_mount (CONFIG_SYS_RESERVED+30)
|
||||
#define SYS_mq_notify (CONFIG_SYS_RESERVED+31)
|
||||
#define SYS_mq_open (CONFIG_SYS_RESERVED+32)
|
||||
#define SYS_mq_close (CONFIG_SYS_RESERVED+33)
|
||||
#define SYS_mq_close (CONFIG_SYS_RESERVED+31)
|
||||
#define SYS_mq_notify (CONFIG_SYS_RESERVED+32)
|
||||
#define SYS_mq_open (CONFIG_SYS_RESERVED+33)
|
||||
#define SYS_mq_receive (CONFIG_SYS_RESERVED+34)
|
||||
#define SYS_mq_send (CONFIG_SYS_RESERVED+35)
|
||||
#define SYS_mq_timedreceive (CONFIG_SYS_RESERVED+36)
|
||||
|
@ -133,45 +133,66 @@
|
|||
#define SYS_putenv (CONFIG_SYS_RESERVED+75)
|
||||
#define SYS_read (CONFIG_SYS_RESERVED+76)
|
||||
#define SYS_readdir (CONFIG_SYS_RESERVED+77)
|
||||
#define SYS_reboot (CONFIG_SYS_RESERVED+78)
|
||||
#define SYS_recv (CONFIG_SYS_RESERVED+78)
|
||||
#define SYS_recvfrom (CONFIG_SYS_RESERVED+79)
|
||||
#define SYS_rename (CONFIG_SYS_RESERVED+80)
|
||||
#define SYS_rmdir (CONFIG_SYS_RESERVED+81)
|
||||
#define SYS_sched_getparam (CONFIG_SYS_RESERVED+82)
|
||||
#define SYS_sched_get_priority_max (CONFIG_SYS_RESERVED+83)
|
||||
#define SYS_sched_get_priority_min (CONFIG_SYS_RESERVED+84)
|
||||
#define SYS_sched_getscheduler (CONFIG_SYS_RESERVED+85)
|
||||
#define SYS_sched_rr_get_interval (CONFIG_SYS_RESERVED+86)
|
||||
#define SYS_sched_setparam (CONFIG_SYS_RESERVED+87)
|
||||
#define SYS_sched_setscheduler (CONFIG_SYS_RESERVED+88)
|
||||
#define SYS_sched_yield (CONFIG_SYS_RESERVED+89)
|
||||
#define SYS_select (CONFIG_SYS_RESERVED+90)
|
||||
#define SYS_sendto (CONFIG_SYS_RESERVED+91)
|
||||
#define SYS_set_errno (CONFIG_SYS_RESERVED+92)
|
||||
#define SYS_setenv (CONFIG_SYS_RESERVED+93)
|
||||
#define SYS_setsockopt (CONFIG_SYS_RESERVED+94)
|
||||
#define SYS_sigaction (CONFIG_SYS_RESERVED+95)
|
||||
#define SYS_signal (CONFIG_SYS_RESERVED+96)
|
||||
#define SYS_sigpending (CONFIG_SYS_RESERVED+97)
|
||||
#define SYS_sigprocmask (CONFIG_SYS_RESERVED+98)
|
||||
#define SYS_sigsuspend (CONFIG_SYS_RESERVED+99)
|
||||
#define SYS_socket (CONFIG_SYS_RESERVED+100)
|
||||
#define SYS_stat (CONFIG_SYS_RESERVED+101)
|
||||
#define SYS_statfs (CONFIG_SYS_RESERVED+102)
|
||||
#define SYS_task_create (CONFIG_SYS_RESERVED+103)
|
||||
#define SYS_task_delete (CONFIG_SYS_RESERVED+104)
|
||||
#define SYS_task_init (CONFIG_SYS_RESERVED+105)
|
||||
#define SYS_task_restart (CONFIG_SYS_RESERVED+106)
|
||||
#define SYS_timer_create (CONFIG_SYS_RESERVED+107)
|
||||
#define SYS_timer_delete (CONFIG_SYS_RESERVED+108)
|
||||
#define SYS_timer_getoverrun (CONFIG_SYS_RESERVED+109)
|
||||
#define SYS_timer_gettime (CONFIG_SYS_RESERVED+110)
|
||||
#define SYS_timer_settime (CONFIG_SYS_RESERVED+111)
|
||||
#define SYS_umount (CONFIG_SYS_RESERVED+112)
|
||||
#define SYS_unlink (CONFIG_SYS_RESERVED+113)
|
||||
#define SYS_waitid (CONFIG_SYS_RESERVED+114)
|
||||
#define SYS_waitpid (CONFIG_SYS_RESERVED+115)
|
||||
#define SYS_write (CONFIG_SYS_RESERVED+116)
|
||||
#define SYS_rewinddir (CONFIG_SYS_RESERVED+81)
|
||||
#define SYS_rmdir (CONFIG_SYS_RESERVED+82)
|
||||
#define SYS_sched_getparam (CONFIG_SYS_RESERVED+83)
|
||||
#define SYS_sched_getscheduler (CONFIG_SYS_RESERVED+84)
|
||||
#define SYS_sched_lock (CONFIG_SYS_RESERVED+85)
|
||||
#define SYS_sched_lockcount (CONFIG_SYS_RESERVED+86)
|
||||
#define SYS_sched_rr_get_interval (CONFIG_SYS_RESERVED+87)
|
||||
#define SYS_sched_setparam (CONFIG_SYS_RESERVED+88)
|
||||
#define SYS_sched_setscheduler (CONFIG_SYS_RESERVED+89)
|
||||
#define SYS_sched_unlock (CONFIG_SYS_RESERVED+90)
|
||||
#define SYS_sched_yield (CONFIG_SYS_RESERVED+91)
|
||||
#define SYS_seekdir (CONFIG_SYS_RESERVED+92)
|
||||
#define SYS_select (CONFIG_SYS_RESERVED+93)
|
||||
#define SYS_sem_close (CONFIG_SYS_RESERVED+94)
|
||||
#define SYS_sem_destroy (CONFIG_SYS_RESERVED+95)
|
||||
#define SYS_sem_open (CONFIG_SYS_RESERVED+96)
|
||||
#define SYS_sem_post (CONFIG_SYS_RESERVED+97)
|
||||
#define SYS_sem_trywait (CONFIG_SYS_RESERVED+98)
|
||||
#define SYS_sem_unlink (CONFIG_SYS_RESERVED+99)
|
||||
#define SYS_sem_wait (CONFIG_SYS_RESERVED+100)
|
||||
#define SYS_sem_close (CONFIG_SYS_RESERVED+101)
|
||||
#define SYS_sem_close (CONFIG_SYS_RESERVED+102)
|
||||
#define SYS_sem_close (CONFIG_SYS_RESERVED+103)
|
||||
#define SYS_sem_close (CONFIG_SYS_RESERVED+104)
|
||||
#define SYS_send (CONFIG_SYS_RESERVED+105)
|
||||
#define SYS_sendto (CONFIG_SYS_RESERVED+106)
|
||||
#define SYS_set_errno (CONFIG_SYS_RESERVED+107)
|
||||
#define SYS_setenv (CONFIG_SYS_RESERVED+108)
|
||||
#define SYS_setsockopt (CONFIG_SYS_RESERVED+109)
|
||||
#define SYS_sigaction (CONFIG_SYS_RESERVED+110)
|
||||
#define SYS_sigpending (CONFIG_SYS_RESERVED+111)
|
||||
#define SYS_sigprocmask (CONFIG_SYS_RESERVED+112)
|
||||
#define SYS_sigqueue (CONFIG_SYS_RESERVED+113)
|
||||
#define SYS_sigsuspend (CONFIG_SYS_RESERVED+114)
|
||||
#define SYS_sigtimedwait (CONFIG_SYS_RESERVED+115)
|
||||
#define SYS_sigwaitinfo (CONFIG_SYS_RESERVED+116)
|
||||
#define SYS_sleep (CONFIG_SYS_RESERVED+117)
|
||||
#define SYS_socket (CONFIG_SYS_RESERVED+118)
|
||||
#define SYS_stat (CONFIG_SYS_RESERVED+119)
|
||||
#define SYS_statfs (CONFIG_SYS_RESERVED+120)
|
||||
#define SYS_task_create (CONFIG_SYS_RESERVED+121)
|
||||
#define SYS_task_delete (CONFIG_SYS_RESERVED+122)
|
||||
#define SYS_task_restart (CONFIG_SYS_RESERVED+123)
|
||||
#define SYS_telldir (CONFIG_SYS_RESERVED+124)
|
||||
#define SYS_timer_create (CONFIG_SYS_RESERVED+125)
|
||||
#define SYS_timer_delete (CONFIG_SYS_RESERVED+126)
|
||||
#define SYS_timer_getoverrun (CONFIG_SYS_RESERVED+127)
|
||||
#define SYS_timer_gettime (CONFIG_SYS_RESERVED+128)
|
||||
#define SYS_timer_settime (CONFIG_SYS_RESERVED+129)
|
||||
#define SYS_umount (CONFIG_SYS_RESERVED+130)
|
||||
#define SYS_unlink (CONFIG_SYS_RESERVED+131)
|
||||
#define SYS_unsetenv (CONFIG_SYS_RESERVED+132)
|
||||
#define SYS_up_assert (CONFIG_SYS_RESERVED+133)
|
||||
#define SYS_up_assert_code (CONFIG_SYS_RESERVED+134)
|
||||
#define SYS_usleep (CONFIG_SYS_RESERVED+135)
|
||||
#define SYS_waitpid (CONFIG_SYS_RESERVED+136)
|
||||
#define SYS_write (CONFIG_SYS_RESERVED+137)
|
||||
|
||||
/****************************************************************************
|
||||
* Public Type Definitions
|
||||
|
|
|
@ -41,6 +41,7 @@ include sched/Make.defs
|
|||
include string/Make.defs
|
||||
include pthread/Make.defs
|
||||
include semaphore/Make.defs
|
||||
include signal/Make.defs
|
||||
include mqueue/Make.defs
|
||||
include math/Make.defs
|
||||
include net/Make.defs
|
||||
|
@ -53,7 +54,7 @@ ASRCS =
|
|||
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||
|
||||
CSRCS = $(STDIO_SRCS) $(STDLIB_SRCS) $(UNISTD_SRCS) $(SCHED_SRCS) \
|
||||
$(STRING_SRCS) $(PTHREAD_SRCS) $(SEM_SRCS) $(MQUEUE_SRCS) \
|
||||
$(STRING_SRCS) $(PTHREAD_SRCS) $(SEM_SRCS) $(SIG_SRCS) $(MQUEUE_SRCS) \
|
||||
$(MATH_SRCS) $(NET_SRCS) $(TIME_SRCS) $(LIBGEN_SRCS) \
|
||||
$(QUEUE_SRCS) $(MISC_SRCS) $(REGEX_SRCS) $(CRC_SRCS) $(DBG_SRCS)
|
||||
COBJS = $(CSRCS:.c=$(OBJEXT))
|
||||
|
@ -69,6 +70,7 @@ SCHEDDEPPATH = --dep-path sched
|
|||
STRINGDEPPATH = --dep-path string
|
||||
PTHREADDEPPATH = --dep-path pthread
|
||||
SEMDEPPATH = --dep-path semaphore
|
||||
SIGDEPPATH = --dep-path signal
|
||||
MQDEPPATH = --dep-path mqueue
|
||||
MATHDEPPATH = --dep-path math
|
||||
NETDEPPATH = --dep-path net
|
||||
|
@ -76,7 +78,7 @@ TIMEDEPPATH = --dep-path time
|
|||
LIBGENDEPPATH = --dep-path libgen
|
||||
QUEUEDEPPATH = --dep-path queue
|
||||
MISCDEPPATH = --dep-path misc
|
||||
VPATH = stdio:stdlib:unistd:sched:string:pthread:semaphore:mqueue:math:net:time:libgen:queue:misc
|
||||
VPATH = stdio:stdlib:unistd:sched:string:pthread:semaphore:signal:mqueue:math:net:time:libgen:queue:misc
|
||||
|
||||
BIN = liblib$(LIBEXT)
|
||||
|
||||
|
@ -96,8 +98,8 @@ $(BIN): $(OBJS)
|
|||
.depend: Makefile $(SRCS)
|
||||
@$(MKDEP) $(ROOTDEPPATH) $(STDIODEPPATH) $(STDLIBDEPPATH) \
|
||||
$(UNISTDDEPPATH) $(SCHEDDEPPATH) $(STRINGDEPPATH) $(PTHREADDEPPATH) \
|
||||
$(SEMDEPPATH) $(MQDEPPATH) $(MATHDEPPATH) $(NETDEPPATH) $(TIMEDEPPATH) \
|
||||
$(LIBGENDEPPATH) $(QUEUEDEPPATH) $(MISCDEPPATH) \
|
||||
$(SEMDEPPATH) $(SIGDEPPATH) $(MQDEPPATH) $(MATHDEPPATH) $(NETDEPPATH) \
|
||||
$(TIMEDEPPATH) $(LIBGENDEPPATH) $(QUEUEDEPPATH) $(MISCDEPPATH) \
|
||||
$(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
|
||||
@touch $@
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
lib
|
||||
===
|
||||
|
||||
This directory contains numerous, small functions typically associated with
|
||||
what you would expect to find in a standard C library. The sub-directories
|
||||
in this directory contain standard interface that can be executed by user-
|
||||
mode programs.
|
||||
|
||||
Normally, NuttX is built with no protection and all threads running in kerne-
|
||||
mode. In that model, there is no real architectural distinction between
|
||||
what is a kernel-mode program and what is a user-mode program; the system is
|
||||
more like on multi-threaded program that all runs in kernel-mode.
|
||||
|
||||
But if the CONFIG_NUTTX_KERNEL option is selected, NuttX will be built into
|
||||
distinct user-mode and kernel-mode sections. In that case, most of the
|
||||
code in the nuttx/ directory will run in kernel-mode with with exceptions
|
||||
of (1) the user-mode "proxies" found in syscall/proxies, and (2) the
|
||||
standard C library functions found in this directory. In this build model,
|
||||
it is critical to separate the user-mode OS interfaces in this way.
|
||||
|
||||
Sub-Directories
|
||||
===============
|
||||
|
||||
The files in the lib/ directory are organized (mostly) according which file
|
||||
in the include/ directory provides the prototype for library functions. So
|
||||
we have:
|
||||
|
||||
libgen - libgen.h
|
||||
math - math.h and fixedmath.h
|
||||
mqueue - pthread.h
|
||||
net - Various network-related header files: netinet/ether.h, arpa/inet.h
|
||||
pthread - pthread.h
|
||||
queue - queue.h
|
||||
sched - sched.h
|
||||
semaphore - semaphore.h
|
||||
stdio - stdio.h
|
||||
stdlib - stdlib.h
|
||||
string - string.h
|
||||
time - time.h
|
||||
unistd - unistd.h
|
||||
|
||||
There is also a misc/ subdirectory that contains various internal functions
|
||||
and interfaces from header files that are too few to warrant their own sub-
|
||||
directory:
|
||||
|
||||
misc - Nonstandard "glue" logic, debug.h, crc32.h, dirent.h
|
||||
|
|
@ -34,9 +34,13 @@
|
|||
############################################################################
|
||||
|
||||
MISC_SRCS = lib_init.c lib_filesem.c
|
||||
|
||||
ifneq ($(CONFIG_NFILE_DESCRIPTORS),0)
|
||||
MISC_SRCS += lib_readdirr.c lib_telldir.c
|
||||
ifneq ($(CONFIG_NFILE_STREAMS),0)
|
||||
MISC_SRCS += lib_streamsem.c
|
||||
endif
|
||||
endif
|
||||
|
||||
REGEX_SRCS = lib_match.c
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ void lib_take_semaphore(FAR struct file_struct *stream)
|
|||
* the wait was awakened by a signal.
|
||||
*/
|
||||
|
||||
ASSERT(*get_errno_ptr() == EINTR);
|
||||
ASSERT(get_errno() == EINTR);
|
||||
}
|
||||
|
||||
/* We have it. Claim the stak and return */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* fs/fs_readdirr.c
|
||||
* lib/misc/lib_readdirr.c
|
||||
*
|
||||
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -42,8 +42,8 @@
|
|||
#include <string.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/fs.h>
|
||||
#include "fs_internal.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
|
@ -87,11 +87,13 @@ int readdir_r(FAR DIR *dirp, FAR struct dirent *entry,
|
|||
{
|
||||
struct dirent *tmp;
|
||||
|
||||
*get_errno_ptr() = 0;
|
||||
/* NOTE: The following use or errno is *not* thread-safe */
|
||||
|
||||
set_errno(0);
|
||||
tmp = readdir(dirp);
|
||||
if (!tmp)
|
||||
{
|
||||
int error = *get_errno_ptr();
|
||||
int error = get_errno();
|
||||
if (!error)
|
||||
{
|
||||
if (result)
|
|
@ -78,7 +78,7 @@ void stream_semtake(FAR struct streamlist *list)
|
|||
* the wait was awakened by a signal.
|
||||
*/
|
||||
|
||||
ASSERT(*get_errno_ptr() == EINTR);
|
||||
ASSERT(get_errno() == EINTR);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -46,8 +46,6 @@
|
|||
#include <nuttx/fs.h>
|
||||
#include <nuttx/dirent.h>
|
||||
|
||||
#include "fs_internal.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
|
@ -102,7 +102,7 @@ int sem_getvalue(FAR sem_t *sem, FAR int *sval)
|
|||
}
|
||||
else
|
||||
{
|
||||
errno = -EINVAL;
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ int sem_init (FAR sem_t *sem, int pshared, unsigned int value)
|
|||
}
|
||||
else
|
||||
{
|
||||
errno = -EINVAL;
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
############################################################################
|
||||
# lib/signal/Make.defs
|
||||
#
|
||||
# Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
ifneq ($(CONFIG_DISABLE_SIGNALS),y)
|
||||
SIG_SRCS = sig_emptyset.c sig_fillset.c sig_addset.c sig_delset.c sig_ismember.c
|
||||
endif
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/sig_addset.c
|
||||
* lib/signal/sig_addset.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -97,3 +97,4 @@ int sigaddset(FAR sigset_t *set, int signo)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/sig_delset.c
|
||||
* lib/signal/sig_delset.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -97,3 +97,4 @@ int sigdelset(FAR sigset_t *set, int signo)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/sig_emptyset.c
|
||||
* lib/signal/sig_emptyset.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -85,3 +85,4 @@ int sigemptyset(FAR sigset_t *set)
|
|||
*set = NULL_SIGNAL_SET;
|
||||
return OK;
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/sig_fillset.c
|
||||
* lib/signal/sig_fillset.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -60,7 +60,7 @@
|
|||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Publics Functioins
|
||||
* Publics Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -85,3 +85,4 @@ int sigfillset(FAR sigset_t *set)
|
|||
*set = ALL_SIGNAL_SET;
|
||||
return OK;
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/sig_ismember.c
|
||||
* lib/signal/sig_ismember.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -98,3 +98,4 @@ int sigismember(FAR const sigset_t *set, int signo)
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ int fgetpos(FAR FILE *stream, FAR fpos_t *pos)
|
|||
#if CONFIG_DEBUG
|
||||
if (!stream || !pos)
|
||||
{
|
||||
errno = EINVAL;
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -60,7 +60,7 @@ int fileno(FAR FILE *stream)
|
|||
|
||||
if (ret < 0)
|
||||
{
|
||||
errno = EBADF;
|
||||
set_errno(EBADF);
|
||||
return ERROR;
|
||||
}
|
||||
return ret;
|
||||
|
|
|
@ -230,7 +230,7 @@ errout_with_sem:
|
|||
stream_semgive(slist);
|
||||
|
||||
errout:
|
||||
*get_errno_ptr() = err;
|
||||
set_errno(err);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ int fputs(FAR const char *s, FAR FILE *stream)
|
|||
|
||||
if (!s)
|
||||
{
|
||||
*get_errno_ptr() = EINVAL;
|
||||
set_errno(EINVAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -119,7 +119,7 @@ int fseek(FAR FILE *stream, long int offset, int whence)
|
|||
|
||||
if (!stream)
|
||||
{
|
||||
errno = EBADF;
|
||||
set_errno(EBADF);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,7 @@ int fsetpos(FAR FILE *stream, FAR fpos_t *pos)
|
|||
#if CONFIG_DEBUG
|
||||
if (!stream || !pos)
|
||||
{
|
||||
errno = EINVAL;
|
||||
set_errno(EINVAL);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,7 @@ long ftell(FAR FILE *stream)
|
|||
|
||||
if (!stream)
|
||||
{
|
||||
errno = EBADF;
|
||||
set_errno(EBADF);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ ssize_t lib_fflush(FAR FILE *stream, bool bforce)
|
|||
|
||||
if (stream->fs_filedes < 0 || (stream->fs_oflags & O_WROK) == 0)
|
||||
{
|
||||
*get_errno_ptr() = EBADF;
|
||||
set_errno(EBADF);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ int lib_flushall(FAR struct streamlist *list)
|
|||
* to flush all of the buffered write data. Return EOF on failure.
|
||||
*/
|
||||
|
||||
lasterrno = *get_errno_ptr();
|
||||
lasterrno = get_errno();
|
||||
ret = ERROR;
|
||||
}
|
||||
}
|
||||
|
@ -131,6 +131,9 @@ int lib_flushall(FAR struct streamlist *list)
|
|||
|
||||
/* If any flush failed, return that last failed flush */
|
||||
|
||||
*get_errno_ptr() = lasterrno;
|
||||
if (ret != OK)
|
||||
{
|
||||
set_errno(lasterrno);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ ssize_t lib_fread(FAR void *ptr, size_t count, FAR FILE *stream)
|
|||
|
||||
if (!stream || (stream->fs_oflags & O_RDOK) == 0)
|
||||
{
|
||||
*get_errno_ptr() = EBADF;
|
||||
set_errno(EBADF);
|
||||
bytes_read = -1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -96,7 +96,7 @@ ssize_t lib_fwrite(FAR const void *ptr, size_t count, FAR FILE *stream)
|
|||
|
||||
if (!stream || (stream->fs_oflags & O_WROK) == 0)
|
||||
{
|
||||
*get_errno_ptr() = EBADF;
|
||||
set_errno(EBADF);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ static int rawinstream_getc(FAR struct lib_instream_s *this)
|
|||
return ch;
|
||||
}
|
||||
}
|
||||
while (nwritten < 0 && errno == EINTR);
|
||||
while (nwritten < 0 && get_errno() == EINTR);
|
||||
}
|
||||
|
||||
return EOF;
|
||||
|
|
|
@ -64,7 +64,7 @@ static void rawoutstream_putc(FAR struct lib_outstream_s *this, int ch)
|
|||
this->nput++;
|
||||
}
|
||||
}
|
||||
while (nwritten < 0 && *get_errno_ptr() == EINTR);
|
||||
while (nwritten < 0 && get_errno() == EINTR);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ int lib_rdflush(FAR FILE *stream)
|
|||
{
|
||||
if (!stream)
|
||||
{
|
||||
*get_errno_ptr() = EBADF;
|
||||
set_errno(EBADF);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ int ungetc(int c, FAR FILE *stream)
|
|||
if ((stream && stream->fs_filedes < 0) ||
|
||||
((stream->fs_oflags & O_RDOK) == 0))
|
||||
{
|
||||
errno = EBADF;
|
||||
set_errno(EBADF);
|
||||
return EOF;
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ int ungetc(int c, FAR FILE *stream)
|
|||
else
|
||||
#endif
|
||||
{
|
||||
errno = ENOMEM;
|
||||
set_errno(ENOMEM);
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,7 +145,7 @@ double_t strtod(const char *str, char **endptr)
|
|||
|
||||
if (num_digits == 0)
|
||||
{
|
||||
errno = ERANGE;
|
||||
set_errno(ERANGE);
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
@ -193,7 +193,7 @@ double_t strtod(const char *str, char **endptr)
|
|||
if (exponent < __DBL_MIN_EXP__ ||
|
||||
exponent > __DBL_MAX_EXP__)
|
||||
{
|
||||
errno = ERANGE;
|
||||
set_errno(ERANGE);
|
||||
return infinite;
|
||||
}
|
||||
|
||||
|
@ -219,8 +219,15 @@ double_t strtod(const char *str, char **endptr)
|
|||
p10 *= p10;
|
||||
}
|
||||
|
||||
if (!is_real(number)) errno = ERANGE;
|
||||
if (endptr) *endptr = p;
|
||||
if (!is_real(number))
|
||||
{
|
||||
set_errno(ERANGE);
|
||||
}
|
||||
|
||||
if (endptr)
|
||||
{
|
||||
*endptr = p;
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ int chdir(FAR const char *path)
|
|||
return OK;
|
||||
|
||||
errout:
|
||||
errno = err;
|
||||
set_errno(err);
|
||||
return ERROR;
|
||||
}
|
||||
#endif /* CONFIG_NFILE_DESCRIPTORS && !CONFIG_DISABLE_ENVIRON */
|
||||
|
|
|
@ -99,11 +99,13 @@ FAR char *getcwd(FAR char *buf, size_t size)
|
|||
|
||||
/* Verify input parameters */
|
||||
|
||||
#ifdef CONFIG_DEBUG
|
||||
if (!buf || !size)
|
||||
{
|
||||
errno = EINVAL;
|
||||
set_errno(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If no working directory is defined, then default to the home directory */
|
||||
|
||||
|
@ -117,7 +119,7 @@ FAR char *getcwd(FAR char *buf, size_t size)
|
|||
|
||||
if (strlen(pwd) + 1 > size)
|
||||
{
|
||||
errno = ERANGE;
|
||||
set_errno(ERANGE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,10 +38,10 @@
|
|||
ASRCS =
|
||||
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||
|
||||
MISC_SRCS = os_start.c os_bringup.c get_errno_ptr.c sched_garbage.c \
|
||||
sched_setupstreams.c sched_getfiles.c sched_getsockets.c sched_getstreams.c \
|
||||
sched_setupidlefiles.c sched_setuptaskfiles.c sched_setuppthreadfiles.c \
|
||||
sched_releasefiles.c
|
||||
MISC_SRCS = os_start.c os_bringup.c errno_getptr.c errno_get.c errno_set.c \
|
||||
sched_garbage.c sched_setupstreams.c sched_getfiles.c sched_getsockets.c \
|
||||
sched_getstreams.c sched_setupidlefiles.c sched_setuptaskfiles.c \
|
||||
sched_setuppthreadfiles.c sched_releasefiles.c
|
||||
|
||||
TSK_SRCS = task_create.c task_init.c task_setup.c task_activate.c \
|
||||
task_start.c task_delete.c task_deletecurrent.c task_restart.c \
|
||||
|
@ -80,12 +80,10 @@ CLOCK_SRCS = clock_initialize.c clock_settime.c clock_gettime.c clock_getres.c \
|
|||
SIGNAL_SRCS = sig_initialize.c \
|
||||
sig_action.c sig_procmask.c sig_pending.c sig_suspend.c \
|
||||
sig_kill.c sig_queue.c sig_waitinfo.c sig_timedwait.c \
|
||||
sig_emptyset.c sig_fillset.c sig_addset.c sig_delset.c \
|
||||
sig_ismember.c sig_findaction.c \
|
||||
sig_allocatependingsigaction.c sig_releasependingsigaction.c \
|
||||
sig_unmaskpendingsignal.c sig_removependingsignal.c \
|
||||
sig_releasependingsignal.c sig_lowest.c sig_mqnotempty.c \
|
||||
sig_cleanup.c sig_received.c sig_deliver.c
|
||||
sig_findaction.c sig_allocatependingsigaction.c \
|
||||
sig_releasependingsigaction.c sig_unmaskpendingsignal.c \
|
||||
sig_removependingsignal.c sig_releasependingsignal.c sig_lowest.c \
|
||||
sig_mqnotempty.c sig_cleanup.c sig_received.c sig_deliver.c
|
||||
|
||||
MQUEUE_SRCS = mq_open.c mq_close.c mq_unlink.c mq_send.c mq_timedsend.c\
|
||||
mq_sndinternal.c mq_receive.c mq_timedreceive.c mq_rcvinternal.c \
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/****************************************************************************
|
||||
* sched/errno_get.c
|
||||
*
|
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#undef get_errno_ptr
|
||||
#undef get_errno
|
||||
#undef errno
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Function: get_errno
|
||||
*
|
||||
* Description:
|
||||
* Return the value of the thread specific errno. This function is only
|
||||
* intended to provide a mechanism for user-mode programs to get the
|
||||
* thread-specific errno value. It is #define'd to the symbol errno in
|
||||
* include/errno.h.
|
||||
*
|
||||
* Parameters:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* The current value of the thread specific errno.
|
||||
*
|
||||
* Assumptions:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int get_errno(void)
|
||||
{
|
||||
return *get_errno_ptr();
|
||||
}
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/****************************************************************************
|
||||
* sched/get_errno_ptr.c
|
||||
* sched/errno_getptr.c
|
||||
*
|
||||
* Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2008, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -43,6 +43,10 @@
|
|||
#include <nuttx/arch.h>
|
||||
#include "os_internal.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#undef get_errno_ptr
|
||||
#undef errno
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
/****************************************************************************
|
||||
* sched/errno_set.c
|
||||
*
|
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#undef get_errno_ptr
|
||||
#undef set_errno
|
||||
#undef errno
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Function: set_errno
|
||||
*
|
||||
* Description:
|
||||
* Set the value of the thread specific errno. This function is only
|
||||
* intended to provide a mechanism for user-mode programs to set the
|
||||
* thread-specific errno value.
|
||||
*
|
||||
* Parameters:
|
||||
* errcode - The thread specific errno will be set to this error code value.
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Assumptions:
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void set_errno(int errcode)
|
||||
{
|
||||
*get_errno_ptr() = errcode;
|
||||
}
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/************************************************************************
|
||||
* sched/sched_lockcount.c
|
||||
*
|
||||
* Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -75,10 +75,11 @@
|
|||
* Name: sched_lockcount
|
||||
*
|
||||
* Description:
|
||||
* This function returns the current value of the lockcount.
|
||||
* If zero, preemption is enabled; if non-zero, this value
|
||||
* indicates the number of times that osTask() has been
|
||||
* called on this thread of execution.
|
||||
* This function returns the current value of the lockcount. If zero,
|
||||
* pre-emption is enabled; if non-zero, this value indicates the number
|
||||
* of times that sched_lock() has been called on this thread of
|
||||
* execution. sched_unlock() will have to called that many times from
|
||||
* this thread in order to re-enable pre-emption.
|
||||
*
|
||||
* Inputs:
|
||||
* None
|
||||
|
@ -88,8 +89,9 @@
|
|||
*
|
||||
************************************************************************/
|
||||
|
||||
int32_t sched_lockcount(void)
|
||||
int sched_lockcount(void)
|
||||
{
|
||||
_TCB *rtcb = (_TCB*)g_readytorun.head;
|
||||
return (int32_t)rtcb->lockcount;
|
||||
return (int)rtcb->lockcount;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ context: .context
|
|||
|
||||
clean:
|
||||
@rm -f $(BIN1) $(BIN2) *~ .*.swp
|
||||
ifneq ($(OBJECT),)
|
||||
ifneq ($(OBJEXT),)
|
||||
@rm -f proxies/*$(OBJEXT) stubs/*$(OBJEXT)
|
||||
endif
|
||||
$(call CLEAN)
|
||||
|
|
|
@ -90,7 +90,23 @@ The format of the CVS file for each line is:
|
|||
Field 2: The header file that contains the function prototype
|
||||
Field 3: Condition for compilation
|
||||
Field 4: The type of function return value.
|
||||
Field 5 - N+5: The type of each of the N formal parameters of the function
|
||||
Field 5 - N+5: The type of each of the N formal parameters of the function
|
||||
|
||||
Each type field has a format as follows:
|
||||
|
||||
type name:
|
||||
For all simpler types
|
||||
formal type | actual type:
|
||||
For array types where the form of the formal (eg. int parm[2])
|
||||
differs from the type of actual passed parameter (eg. int*). This
|
||||
is necessary because you cannot do simple casts to array types.
|
||||
formal type | union member actual type | union member fieldname:
|
||||
A similar situation exists for unions. For example, the formal
|
||||
parameter type union sigval -- You cannot cast a uintptr_t to
|
||||
a union sigval, but you can cast to the type of one of the union
|
||||
member types when passing the actua paramter. Similarly, we
|
||||
cannot cast a union sigval to a uinptr_t either. Rather, we need
|
||||
to cast a specific union member fieldname to uintptr_t.
|
||||
|
||||
Auto-Generated Files
|
||||
====================
|
||||
|
@ -104,7 +120,7 @@ database. Here the following definition is used:
|
|||
call into a syscall, marshalling all of the system call parameters
|
||||
as necessary.
|
||||
|
||||
STUB - Another tiny bit of code that executes within the NuttX kernel
|
||||
Stub - Another tiny bit of code that executes within the NuttX kernel
|
||||
that is used to map a software interrupt received by the kernel to
|
||||
a kernel function call. The stubs receive the marshalled system
|
||||
call data, and perform the actually kernel function call (in
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
"close","unistd.h","CONFIG_NSOCKET_DESCRIPTORS > 0 || CONFIG_NFILE_DESCRIPTORS > 0","int","int"
|
||||
"closedir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","int","FAR DIR*"
|
||||
"connect","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","FAR const struct sockaddr*","socklen_t"
|
||||
"creat","fcntl.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","const char*","mode_t"
|
||||
"dup","unistd.h","CONFIG_NFILE_DESCRIPTORS > 0","int","int"
|
||||
"dup2","unistd.h","CONFIG_NFILE_DESCRIPTORS > 0","int","int","int"
|
||||
"exit","stdlib.h","","void","int"
|
||||
|
@ -79,7 +78,6 @@
|
|||
"putenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","int","FAR const char*"
|
||||
"read","unistd.h","CONFIG_NSOCKET_DESCRIPTORS > 0 || CONFIG_NFILE_DESCRIPTORS > 0","ssize_t","int","FAR void*","size_t"
|
||||
"readdir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","FAR struct dirent*","FAR DIR*"
|
||||
"readdir_r","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","int","FAR DIR*","FAR struct dirent*","FAR struct dirent**"
|
||||
"recv","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","ssize_t","int","FAR void*","size_t","int"
|
||||
"recvfrom","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","ssize_t","int","FAR void*","size_t","int","FAR struct sockaddr*","FAR socklen_t*"
|
||||
"rename","stdio.h","CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)","int","FAR const char*","FAR const char*"
|
||||
|
@ -89,9 +87,6 @@
|
|||
"sched_getscheduler","sched.h","","int","pid_t"
|
||||
"sched_lock","sched.h","","int"
|
||||
"sched_lockcount","sched.h","","int32_t"
|
||||
"sched_note_start","sched.h","","void","FAR _TCB* "
|
||||
"sched_note_stop","sched.h","","void","FAR _TCB* "
|
||||
"sched_note_switch","sched.h","","void","FAR _TCB*","FAR _TCB*"
|
||||
"sched_rr_get_interval","sched.h","","int","pid_t","struct timespec*"
|
||||
"sched_setparam","sched.h","","int","pid_t","const struct sched_param*"
|
||||
"sched_setscheduler","sched.h","","int","pid_t","int","const struct sched_param*"
|
||||
|
@ -112,30 +107,20 @@
|
|||
"setenv","stdlib.h","","int","const char*","const char*","int"
|
||||
"setsockopt","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","int","int","FAR const void*","socklen_t"
|
||||
"sigaction","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","FAR const struct sigaction*","FAR struct sigaction*"
|
||||
"sigaddset","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR sigset_t*","int"
|
||||
"sigdelset","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR sigset_t*","int"
|
||||
"sigemptyset","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR sigset_t*"
|
||||
"sigfillset","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR sigset_t*"
|
||||
"sigismember","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR const sigset_t*","int"
|
||||
"sigpending","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR sigset_t*"
|
||||
"sigprocmask","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","FAR const sigset_t*","FAR sigset_t*"
|
||||
"sigqueue","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","int","FAR void*"
|
||||
"sigqueue","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","int","union sigval|FAR void *"
|
||||
"sigqueue","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","int","int","union sigval|FAR void *|sival_ptr"
|
||||
"sigsuspend","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR const sigset_t*"
|
||||
"sigtimedwait","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR const sigset_t*","FAR struct siginfo*","FAR const struct timespec*"
|
||||
"sigwaitinfo","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","FAR const sigset_t*","FAR struct siginfo*"
|
||||
"sleep","unistd.h","!defined(CONFIG_DISABLE_SIGNALS)","unsigned int","unsigned int"
|
||||
"snprintf","stdio.h","","int","FAR char*","size_t","const char*","..."
|
||||
"socket","sys/socket.h","","int","int","int","int"
|
||||
"stat","sys/stat.h","CONFIG_NFILE_DESCRIPTORS > 0","int","const char*","FAR struct stat*"
|
||||
#"statfs","stdio.h","","int","FAR const char*","FAR struct statfs*"
|
||||
"statfs","sys/statfs.h","CONFIG_NFILE_DESCRIPTORS > 0","int","const char*","struct statfs*"
|
||||
"task_activate","sched.h","","int","FAR _TCB*"
|
||||
"task_create","sched.h","","int","const char*","int","int","main_t","const char* []|const char**"
|
||||
#"task_create","sched.h","","int","const char*","int","main_t","const char* []|const char**"
|
||||
"task_delete","sched.h","","int","pid_t"
|
||||
"task_init","sched.h","","int","FAR _TCB*","const char*","int","FAR uint32_t*","uint32_t","main_t","const char* []|const char**"
|
||||
#"task_init","sched.h","","int","FAR _TCB*","const char*","int","main_t","const char* []|const char**"
|
||||
"task_restart","sched.h","","int","pid_t"
|
||||
"telldir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","off_t","FAR DIR*"
|
||||
"timer_create","time.h","!defined(CONFIG_DISABLE_POSIX_TIMERS)","int","clockid_t","FAR struct sigevent*","FAR timer_t*"
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -274,35 +274,69 @@ static void print_formalparm(FILE *stream, const char *argtype, int parmno)
|
|||
|
||||
static void get_formalparmtype(const char *arg, char *formal)
|
||||
{
|
||||
char *ptr = strchr(arg,'|');
|
||||
if (ptr)
|
||||
{
|
||||
/* The formal parm type is a pointer to everything up to the '|' */
|
||||
/* The formal parm type is a pointer to everything up to the first'|' (or
|
||||
* the end of the string if there is no '|' in the type description).
|
||||
*/
|
||||
|
||||
while (*arg != '|')
|
||||
{
|
||||
*formal++ = *arg++;
|
||||
}
|
||||
*formal = '\0';
|
||||
}
|
||||
else
|
||||
while (*arg != '|' && *arg != '\0')
|
||||
{
|
||||
strncpy(formal, arg, MAX_PARMSIZE);
|
||||
*formal++ = *arg++;
|
||||
}
|
||||
*formal = '\0';
|
||||
}
|
||||
|
||||
static void get_actualparmtype(const char *arg, char *actual)
|
||||
{
|
||||
char *ptr = strchr(arg,'|');
|
||||
if (ptr)
|
||||
const char *pstart = strchr(arg,'|');
|
||||
if (pstart)
|
||||
{
|
||||
ptr++;
|
||||
strncpy(actual, ptr, MAX_PARMSIZE);
|
||||
/* The actual parameter type starts after the '|' */
|
||||
|
||||
pstart++;
|
||||
}
|
||||
else
|
||||
{
|
||||
strncpy(actual, arg, MAX_PARMSIZE);
|
||||
/* The actual parameter is the same as the formal parameter
|
||||
* at starts at the beginning of the type string.
|
||||
*/
|
||||
|
||||
pstart = arg;
|
||||
}
|
||||
|
||||
/* The actual parm type is a pointer to everything up to the next '|' (or
|
||||
* the end of the string if there is no '|' in the type description).
|
||||
*/
|
||||
|
||||
while (*pstart != '|' && *pstart != '\0')
|
||||
{
|
||||
*actual++ = *pstart++;
|
||||
}
|
||||
*actual = '\0';
|
||||
}
|
||||
|
||||
static void get_fieldname(const char *arg, char *fieldname)
|
||||
{
|
||||
char *pactual = strchr(arg,'|');
|
||||
char *pstart;
|
||||
|
||||
if (pactual)
|
||||
{
|
||||
/* The actual parameter type starts after the '|' */
|
||||
|
||||
pactual++;
|
||||
pstart = strchr(pactual,'|');
|
||||
if (pstart)
|
||||
{
|
||||
/* The fieldname is everything past the second '|' to the end of the string */
|
||||
|
||||
pstart++;
|
||||
strncpy(fieldname, pstart, MAX_PARMSIZE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "%d: Missing union fieldname: %s\n", g_lineno, arg);
|
||||
exit(15);
|
||||
}
|
||||
|
||||
static FILE *open_proxy(void)
|
||||
|
@ -326,6 +360,7 @@ static void generate_proxy(int nparms)
|
|||
{
|
||||
FILE *stream = open_proxy();
|
||||
char formal[MAX_PARMSIZE];
|
||||
char fieldname[MAX_PARMSIZE];
|
||||
bool bvarargs = false;
|
||||
int nformal;
|
||||
int nactual;
|
||||
|
@ -444,7 +479,22 @@ static void generate_proxy(int nparms)
|
|||
|
||||
for (i = 0; i < nactual; i++)
|
||||
{
|
||||
fprintf(stream, ", (uintptr_t)parm%d", i+1);
|
||||
/* Is the parameter a union member */
|
||||
|
||||
if (i < nparms && is_union(g_parm[PARM1_INDEX+i]))
|
||||
{
|
||||
/* Then we will have to pick a field name that can be cast to a
|
||||
* uintptr_t. There probably should be some error handling here
|
||||
* to catch the case where the fieldname was not supplied.
|
||||
*/
|
||||
|
||||
get_fieldname(g_parm[PARM1_INDEX+i], fieldname);
|
||||
fprintf(stream, ", (uintptr_t)parm%d.%s", i+1, fieldname);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stream, ", (uintptr_t)parm%d", i+1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle the tail end of the function. */
|
||||
|
|
Loading…
Reference in New Issue