nuttx/libs/libc/spawn/lib_task_spawn.c
2021-03-09 23:18:28 +08:00

80 lines
3.0 KiB
C

/****************************************************************************
* libs/libc/spawn/lib_task_spawn.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <spawn.h>
#include <nuttx/spawn.h>
#if defined(CONFIG_LIB_SYSCALL) && !defined(CONFIG_BUILD_KERNEL)
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: task_spawn
*
* Description:
* This function marshals task_spwan() parameters and invokes the
* nx_task_spawn() system call.
*
* task_spawn() and posix_spawn() are NuttX OS interfaces. In PROTECTED
* and KERNEL build modes, then can be reached from applications only via
* a system call. Currently, the number of parameters in a system call
* is limited to six; these spawn function have seven parameters. Rather
* than extend the maximum number of parameters across all architectures,
* I opted instead to marshal the seven parameters into a structure.
*
*
* Input Parameters:
* file_actions - The address of the posix_spawn_file_actions_t to be
* initialized.
*
* Returned Value:
* On success, these functions return 0; on failure they return an error
* number from <errno.h>.
*
****************************************************************************/
int task_spawn(FAR pid_t *pid, FAR const char *name, main_t entry,
FAR const posix_spawn_file_actions_t *file_actions,
FAR const posix_spawnattr_t *attr,
FAR char * const argv[], FAR char * const envp[])
{
struct spawn_syscall_parms_s parms;
parms.pid = pid;
parms.name = name;
parms.entry = entry;
parms.file_actions = file_actions;
parms.attr = attr;
parms.argv = (FAR char * const *)argv;
parms.envp = (FAR char * const *)envp;
return nx_task_spawn(&parms);
}
#endif /* CONFIG_LIB_SYSCALL && !CONFIG_BUILD_KERNEL */