From 7f8ec7f1631944f4fd473aeb5e60fc3438a3378c Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Wed, 20 Jun 2007 21:44:54 +0000 Subject: [PATCH] 2007-06-20 Patrick Mansfield * spu/jsre.h: JSRE_LINK, JSRE_SYMLINK and JSRE_READLINK. * spu/link.c: New file to add link support via an assist call. * spu/readlink.c: New file to add readlink support via an assist call. * spu/symlink.c: New file to add symlink support via an assist call. * spu/Makefile.in: Add new files. --- libgloss/ChangeLog | 8 ++++++ libgloss/spu/Makefile.in | 5 ++-- libgloss/spu/jsre.h | 3 ++ libgloss/spu/link.c | 53 ++++++++++++++++++++++++++++++++++ libgloss/spu/readlink.c | 62 ++++++++++++++++++++++++++++++++++++++++ libgloss/spu/symlink.c | 53 ++++++++++++++++++++++++++++++++++ 6 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 libgloss/spu/link.c create mode 100644 libgloss/spu/readlink.c create mode 100644 libgloss/spu/symlink.c diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index ad2e062b4..82b6d3651 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,11 @@ +2007-06-20 Patrick Mansfield + + * spu/jsre.h: JSRE_LINK, JSRE_SYMLINK and JSRE_READLINK. + * spu/link.c: New file to add link support via an assist call. + * spu/readlink.c: New file to add readlink support via an assist call. + * spu/symlink.c: New file to add symlink support via an assist call. + * spu/Makefile.in: Add new files. + 2007-06-20 Patrick Mansfield * spu/jsre.h: Add JSRE_LSTAT. diff --git a/libgloss/spu/Makefile.in b/libgloss/spu/Makefile.in index 5ec6b31f0..c71db76dd 100644 --- a/libgloss/spu/Makefile.in +++ b/libgloss/spu/Makefile.in @@ -58,8 +58,9 @@ OBJS = \ access.o chdir.o chmod.o chown.o close.o conv_stat.o dup.o exit.o \ fchdir.o fchmod.o fchown.o fstat.o ftruncate.o getcwd.o \ getpagesize.o getpid.o gettimeofday.o isatty.o kill.o lchown.o \ - lseek.o lstat.o mkdir.o mknod.o nanosleep.o open.o read.o rmdir.o \ - sbrk.o stat.o syscalls.o unlink.o write.o + link.o lseek.o lstat.o mkdir.o mknod.o nanosleep.o open.o read.o \ + readlink.o rmdir.o sbrk.o stat.o symlink.o syscalls.o unlink.o \ + write.o # Object files specific to particular targets. EVALOBJS = ${OBJS} diff --git a/libgloss/spu/jsre.h b/libgloss/spu/jsre.h index 33a2af739..a6f5c8ed1 100644 --- a/libgloss/spu/jsre.h +++ b/libgloss/spu/jsre.h @@ -67,6 +67,9 @@ Author: Andreas Neukoetter (ti95neuk@de.ibm.com) #define JSRE_FCHOWN 41 #define JSRE_LCHOWN 42 #define JSRE_GETCWD 43 +#define JSRE_LINK 44 +#define JSRE_SYMLINK 45 +#define JSRE_READLINK 46 struct jsre_stat { unsigned int dev; diff --git a/libgloss/spu/link.c b/libgloss/spu/link.c new file mode 100644 index 000000000..dde2a0dc6 --- /dev/null +++ b/libgloss/spu/link.c @@ -0,0 +1,53 @@ +/* + Copyright 2007 + International Business Machines Corporation, + Sony Computer Entertainment, Incorporated, + Toshiba Corporation, + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * 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. + * Neither the names of the copyright holders nor the names of their + 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 +#include "jsre.h" + +typedef struct +{ + unsigned int oldpath; + unsigned int pad0[3]; + unsigned int newpath; + unsigned int pad1[3]; +} syscall_link_t; + +int +link (const char *oldpath, const char *newpath) +{ + syscall_link_t sys; + + sys.oldpath = (unsigned int) oldpath; + sys.newpath = (unsigned int) newpath; + return __send_to_ppe (JSRE_POSIX1_SIGNALCODE, JSRE_LINK, &sys); +} diff --git a/libgloss/spu/readlink.c b/libgloss/spu/readlink.c new file mode 100644 index 000000000..ac7c59182 --- /dev/null +++ b/libgloss/spu/readlink.c @@ -0,0 +1,62 @@ +/* + Copyright 2007 + International Business Machines Corporation, + Sony Computer Entertainment, Incorporated, + Toshiba Corporation, + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * 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. + * Neither the names of the copyright holders nor the names of their + 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 +#include "jsre.h" + +typedef struct +{ + unsigned int path; + unsigned int pad0[3]; + unsigned int buf; + unsigned int pad1[3]; + unsigned int bufsiz; + unsigned int pad2[3]; +} syscall_readlink_t; + +/* + * POSIX says readlink returns ssize_t, and has an size_t bufsiz, but + * newlib has it prototyped as returning int, and int bufsiz. ssize_t, + * size_t and int are ally currently 4 bytes for SPU, so just leave them + * as ints for now. + */ +int +readlink (const char *path, char *buf, int bufsiz) +{ + syscall_readlink_t sys; + + sys.path = (unsigned int) path; + sys.buf = (unsigned int) buf; + sys.bufsiz = (unsigned int) bufsiz; + return __send_to_ppe (JSRE_POSIX1_SIGNALCODE, JSRE_READLINK, &sys); +} diff --git a/libgloss/spu/symlink.c b/libgloss/spu/symlink.c new file mode 100644 index 000000000..f95825b02 --- /dev/null +++ b/libgloss/spu/symlink.c @@ -0,0 +1,53 @@ +/* + Copyright 2007 + International Business Machines Corporation, + Sony Computer Entertainment, Incorporated, + Toshiba Corporation, + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * 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. + * Neither the names of the copyright holders nor the names of their + 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 +#include "jsre.h" + +typedef struct +{ + unsigned int oldpath; + unsigned int pad0[3]; + unsigned int newpath; + unsigned int pad1[3]; +} syscall_link_t; + +int +symlink (const char *oldpath, const char *newpath) +{ + syscall_link_t sys; + + sys.oldpath = (unsigned int) oldpath; + sys.newpath = (unsigned int) newpath; + return __send_to_ppe (JSRE_POSIX1_SIGNALCODE, JSRE_SYMLINK, &sys); +}