summaryrefslogtreecommitdiff
path: root/apps/examples/posix_spawn/filesystem
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-10 21:39:57 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-10 21:39:57 +0000
commit697666a4f68ea2cd163cbba71dd703ee7b8efab5 (patch)
tree131c191493d4b1db094cddb4ce39e9d75c539daf /apps/examples/posix_spawn/filesystem
parenta98403873095d93cc68226cc63f15a6194bf2268 (diff)
downloadnuttx-697666a4f68ea2cd163cbba71dd703ee7b8efab5.tar.gz
nuttx-697666a4f68ea2cd163cbba71dd703ee7b8efab5.tar.bz2
nuttx-697666a4f68ea2cd163cbba71dd703ee7b8efab5.zip
Added a test of posix_spawn()
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5507 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/examples/posix_spawn/filesystem')
-rw-r--r--apps/examples/posix_spawn/filesystem/Makefile85
-rwxr-xr-xapps/examples/posix_spawn/filesystem/mksymtab.sh51
-rw-r--r--apps/examples/posix_spawn/filesystem/program/Makefile59
-rw-r--r--apps/examples/posix_spawn/filesystem/program/program.c60
-rw-r--r--apps/examples/posix_spawn/filesystem/testdata.txt2
5 files changed, 257 insertions, 0 deletions
diff --git a/apps/examples/posix_spawn/filesystem/Makefile b/apps/examples/posix_spawn/filesystem/Makefile
new file mode 100644
index 000000000..19a02bb80
--- /dev/null
+++ b/apps/examples/posix_spawn/filesystem/Makefile
@@ -0,0 +1,85 @@
+############################################################################
+# apps/examples/posix_spawn/filesystem/Makefile
+#
+# Copyright (C) 2013 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# 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.
+#
+############################################################################
+
+-include $(TOPDIR)/Make.defs
+include $(APPDIR)$(DELIM)Make.defs
+
+SPAWN_DIR = $(APPDIR)$(DELIM)examples$(DELIM)posix_spawn
+FILESYSTEM_DIR = $(SPAWN_DIR)$(DELIM)filesystem
+ROMFS_DIR = $(FILESYSTEM_DIR)$(DELIM)romfs
+ROMFS_IMG = $(FILESYSTEM_DIR)$(DELIM)romfs.img
+ROMFS_HDR = $(FILESYSTEM_DIR)$(DELIM)romfs.h
+SYMTAB_SRC = $(FILESYSTEM_DIR)$(DELIM)symtab.c
+
+all: $(ROMFS_HDR) $(SYMTAB_SRC)
+.PHONY: all program clean install populate
+
+# Create the romfs directory
+
+$(ROMFS_DIR):
+ $(Q) mkdir $(ROMFS_DIR)
+
+# Build the test program
+
+program: $(ROMFS_DIR)
+ $(Q) $(MAKE) -C program program TOPDIR="$(TOPDIR)" APPDIR="$(APPDIR)" ROMFS_DIR="$(ROMFS_DIR)"
+
+# Install the test program in the romfs directory
+
+install: program testdata.txt
+ $(Q) $(MAKE) -C program install TOPDIR="$(TOPDIR)" APPDIR="$(APPDIR)" ROMFS_DIR="$(ROMFS_DIR)"
+ $(Q) install --mode=0644 testdata.txt $(ROMFS_DIR)/testdata.txt
+
+# Create the romfs.img file from the romfs directory
+
+$(ROMFS_IMG): install
+ $(Q) genromfs -f $@ -d $(ROMFS_DIR) -V "POSIXSPAWN"
+
+# Create the romfs.h header file from the romfs.img file
+
+$(ROMFS_HDR) : $(ROMFS_IMG)
+ $(Q) (cd $(FILESYSTEM_DIR); xxd -i romfs.img | sed -e "s/^unsigned/static const unsigned/g" >$@)
+
+# Create the exported symbol table
+
+$(SYMTAB_SRC): program
+ $(Q) $(FILESYSTEM_DIR)$(DELIM)mksymtab.sh $(ROMFS_DIR) >$@
+
+# Clean each subdirectory
+
+clean:
+ $(Q) $(MAKE) -C program clean TOPDIR="$(TOPDIR)" APPDIR="$(APPDIR)" ROMFS_DIR="$(ROMFS_DIR)"
+ $(Q) rm -f $(ROMFS_HDR) $(ROMFS_IMG) $(SYMTAB_SRC)
+ $(Q) rm -rf $(ROMFS_DIR)
diff --git a/apps/examples/posix_spawn/filesystem/mksymtab.sh b/apps/examples/posix_spawn/filesystem/mksymtab.sh
new file mode 100755
index 000000000..51408a89c
--- /dev/null
+++ b/apps/examples/posix_spawn/filesystem/mksymtab.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+usage="Usage: $0 <test-dir-path>"
+
+# Check for the required ROMFS directory path
+
+dir=$1
+if [ -z "$dir" ]; then
+ echo "ERROR: Missing <test-dir-path>"
+ echo ""
+ echo $usage
+ exit 1
+fi
+
+if [ ! -d "$dir" ]; then
+ echo "ERROR: Directory $dir does not exist"
+ echo ""
+ echo $usage
+ exit 1
+fi
+
+# Extract all of the undefined symbols from the ELF files and create a
+# list of sorted, unique undefined variable names.
+
+varlist=`find ${dir} -executable -type f | xargs nm | fgrep ' U ' | sed -e "s/^[ ]*//g" | cut -d' ' -f2 | sort | uniq`
+
+# Now output the symbol table as a structure in a C source file. All
+# undefined symbols are declared as void* types. If the toolchain does
+# any kind of checking for function vs. data objects, then this could
+# faile
+
+echo "#include <nuttx/compiler.h>"
+echo "#include <nuttx/binfmt/symtab.h>"
+echo ""
+
+for var in $varlist; do
+ echo "extern void *${var};"
+done
+
+echo ""
+echo "const struct symtab_s exports[] = "
+echo "{"
+
+for var in $varlist; do
+ echo " {\"${var}\", &${var}},"
+done
+
+echo "};"
+echo ""
+echo "const int nexports = sizeof(exports) / sizeof(struct symtab_s);"
+
diff --git a/apps/examples/posix_spawn/filesystem/program/Makefile b/apps/examples/posix_spawn/filesystem/program/Makefile
new file mode 100644
index 000000000..cf55797b2
--- /dev/null
+++ b/apps/examples/posix_spawn/filesystem/program/Makefile
@@ -0,0 +1,59 @@
+############################################################################
+# examples/posix_spawn/filesystem/program/Makefile
+#
+# Copyright (C) 2013 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <gnutt@nuttx.org>
+#
+# 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.
+#
+############################################################################
+
+-include $(TOPDIR)/Make.defs
+
+BIN = program
+
+SRCS = $(BIN).c
+OBJS = $(SRCS:.c=.o)
+
+all: $(BIN)
+
+$(OBJS): %.o: %.c
+ @echo "CC: $<"
+ $(Q) $(CC) -c $(CELFFLAGS) $< -o $@
+
+$(BIN): $(OBJS)
+ @echo "LD: $<"
+ $(Q) $(LD) $(LDELFFLAGS) -o $@ $^
+
+clean:
+ $(call DELFILE, $(BIN))
+ $(call CLEAN)
+
+install:
+ $(Q) mkdir -p $(ROMFS_DIR)
+ $(Q) install --mode=0755 $(BIN) $(ROMFS_DIR)/$(BIN)
diff --git a/apps/examples/posix_spawn/filesystem/program/program.c b/apps/examples/posix_spawn/filesystem/program/program.c
new file mode 100644
index 000000000..f63b559c8
--- /dev/null
+++ b/apps/examples/posix_spawn/filesystem/program/program.c
@@ -0,0 +1,60 @@
+/****************************************************************************
+ * examples/posix_spawn/filesystem/program/program.c
+ *
+ * Copyright (C) 2013 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * 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 <stdio.h>
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+int main(int argc, char **argv)
+{
+ int ch;
+
+ /* stdin should have been redirected to testdata.txt. Read and print until
+ * we hit the end of file.
+ */
+
+ while ((ch = getchar()) != EOF)
+ {
+ putchar(ch);
+ }
+
+ return 0;
+}
diff --git a/apps/examples/posix_spawn/filesystem/testdata.txt b/apps/examples/posix_spawn/filesystem/testdata.txt
new file mode 100644
index 000000000..bb581fbb5
--- /dev/null
+++ b/apps/examples/posix_spawn/filesystem/testdata.txt
@@ -0,0 +1,2 @@
+Now is the time for all good men to come to the aid of their party.
+