Subversion Repositories shark

Rev

Rev 166 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Project: S.Ha.R.K.
 *
 * Coordinators:
 *   Giorgio Buttazzo    <giorgio@sssup.it>
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *
 * Authors     :
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *   Massimiliano Giorgi <massy@gandalf.sssup.it>
 *   Luca Abeni          <luca@gandalf.sssup.it>
 *   (see the web pages for full authors list)
 *
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
 *
 * http://www.sssup.it
 * http://retis.sssup.it
 * http://shark.sssup.it
 */


/**
 ------------
 CVS :        $Id: unistd.h,v 1.3 2003-05-22 09:35:08 giacomo Exp $

 File:        $File$
 Revision:    $Revision: 1.3 $
 Last update: $Date: 2003-05-22 09:35:08 $
 ------------

 unistd.h, inspired on BSD one...
 and heavy modified by Massy (inspired on GLibc one...)
 
**/


/*
 * Copyright (C) 2000 Paolo Gai
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */


/*
 * Copyright (c) 1989, 1993
 *      The Regents of the University of California.  All rights reserved.
 *
 * 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. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the University of
 *      California, Berkeley and its contributors.
 * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
 *
 *      @(#)unistd.h    8.2 (Berkeley) 1/7/94
 */


#ifndef __UNISTD_H__
#define __UNISTD_H__

#include <features.h>
#include "ll/sys/cdefs.h"

__BEGIN_DECLS

void _exit(int status);

/* compile-time symbolic constants */

/* NYI = Not Yet Implemented */

// NYI #define _POSIX_ASYNCHRONOUS_IO
// NYI #define _POSIX_ASYNC_IO
// NRQ for PSE52 #define        _POSIX_CHOWN_RESTRICTED 1
// NYI #define _POSIX_FSYNC
// NRQ for PSE52 #define        _POSIX_JOB_CONTROL
// NYI #define _POSIX_MAPPED_FILES
// NYI #define _POSIX_MEMLOCK
// NYI #define _POSIX_MEMLOCK_RANGE
// NRQ for PSE52 #define _POSIX_MEMORY_PROTECTION
#define _POSIX_MESSAGE_PASSING
// NYI #define  _POSIX_NO_TRUNC         1
// NRQ for PSE52 #define _POSIX_PRIORITIZED_IO
// NRQ for PSE52 #define _POSIX_PRIORITY_SCHEDULING
// NYI #define _POSIX_PRIO_IO
#define _POSIX_REALTIME_SIGNALS
// NRQ for PSE52 #define        _POSIX_SAVED_IDS
#define _POSIX_SEMAPHORES
// NYI #define _POSIX_SHARED_MEMORY_OBJECTS
// NYI #define _POSIX_SYNCHRONIZED_IO
// NYI #define _POSIX_SYNC_IO
#define _POSIX_THREADS
#define _POSIX_THREAD_ATTR_STACKADDR
#define _POSIX_THREAD_ATTR_STACKSIZE
#define _POSIX_THREAD_PRIO_INHERIT
#define _POSIX_THREAD_PRIO_PROTECT
#define _POSIX_THREAD_PRIORITY_SCHEDULING
// NRQ for PSE52 #define _POSIX_THREAD_PROCESS_SHARED
// NYI #define _POSIX_THREAD_SAFE_FUNCTIONS
#define _POSIX_TIMERS
// NRQ for PSE52 #define        _POSIX_VDISABLE         0xff
#define _POSIX_VERSION          199506L







/* access function */
#define F_OK            0       /* test for existence of file */
#define X_OK            0x01    /* test for execute or search permission */
#define W_OK            0x02    /* test for write permission */
#define R_OK            0x04    /* test for read permission */

/* whence values for lseek(2) */
#define SEEK_SET        0       /* set file offset to offset */
#define SEEK_CUR        1       /* set file offset to current plus offset */
#define SEEK_END        2       /* set file offset to EOF plus offset */

#ifndef _POSIX_SOURCE
/* whence values for lseek(2); renamed by POSIX 1003.1 */
#define L_SET           SEEK_SET
#define L_INCR          SEEK_CUR
#define L_XTND          SEEK_END
#endif

/* configurable pathname variables */
#define _PC_ASYNC_IO             1
#define _PC_CHOWN_RESTRICTED     2
#define _PC_LINK_MAX             3
#define _PC_MAX_CANON            4
#define _PC_MAX_INPUT            5
#define _PC_NAME_MAX             6
#define _PC_NO_TRUNC             7
#define _PC_PATH_MAX             8
#define _PC_PIPE_BUF             9
#define _PC_PRIO_IO             10
#define _PC_SYNC_IO             11
#define _PC_VDISABLE            12

/* configurable system variables */
#define _SC_AIO_LISTIO_MAX                1
#define _SC_AIO_MAX                       2
#define _SC_AIO_PRIO_DELTA_MAX            3
#define _SC_ARG_MAX                       4
#define _SC_CHILD_MAX                     5
#define _SC_CLK_TICK                      6
#define _SC_DELAYTIMER_MAX                7
#define _SC_GETGR_R_SIZE_MAX              8
#define _SC_GETPW_R_SIZE_MAX              9
#define _SC_LOGIN_NAME_MAX               10
#define _SC_MQ_OPEN_MAX                  11
#define _SC_MQ_PRIO_MAX                  12
#define _SC_NGROUPS_MAX                  13
#define _SC_OPEN_MAX                     14
#define _SC_PAGESIZE                     15
#define _SC_RTSIG_MAX                    16
#define _SC_SEM_NSEMS_MAX                17
#define _SC_SEM_VALUE_MAX                18
#define _SC_SIGQUEUE_MAX                 19
#define _SC_STREAM_MAX                   20
#define _SC_THREAD_DESTRUCTOR_ITERATIONS 21
#define _SC_THREAD_KEYS_MAX              22
#define _SC_THREAD_STACK_MIN             23
#define _SC_THREAD_THREADS_MAX           24
#define _SC_TIMER_MAX                    25
#define _SC_TTY_NAME_MAX                 26
#define _SC_TZNAME_MAX                   27

#define _SC_ASYNCHRONOUS_IO              28
#define _SC_FSYNC                        29
#define _SC_JOB_CONTROL                  30
#define _SC_MAPPED_FILES                 31
#define _SC_MEMLOCK                      32
#define _SC_MEMLOCK_RANGE                33
#define _SC_MEMORY_PROTECTION            34
#define _SC_MESSAGE_PASSING              35
#define _SC_PRIORITIZED_IO               36
#define _SC_PRIORITY_SCHEDULING          37
#define _SC_REALTIME_SIGNALS             38
#define _SC_SAVED_IDS                    39
#define _SC_SEMAPHORES                   40
#define _SC_SHARED_MEMORY_OBJECTS        41
#define _SC_SYNCHRONIZED_IO              42
#define _SC_TIMERS                       43
#define _SC_THREADS                      44
#define _SC_THREAD_ATTR_STACKADDR        45
#define _SC_THREAD_ATTR_STACKSIZE        46
#define _SC_THREAD_PRIORITY_SCHEDULING   47
#define _SC_THREAD_PRIO_INHERIT          48
#define _SC_THREAD_PRIO_PROTECT          49
#define _SC_THREAD_PROCESS_SHARED        50
#define _SC_THREAD_SAFE_FUNCTIONS        51
#define _SC_VERSION                      52

/* configurable system strings */
#define _CS_PATH                 1

/*+ send an alarm signal +*/
unsigned int alarm(unsigned int seconds);

/*+ wait a signal delivery +*/
int pause(void);

/*+ sleep for n seconds or until a signal is delivered to the thread +*/
unsigned int sleep(unsigned int seconds);

/*+ sleep for n useconds */
unsigned int usleep(unsigned int usec);

#define udelay(x) usleep(x)
/*
 *
 *
 *
 *
 *
 *
 */


/* X/Open version number to which the library conforms.  It is selectable.  */
//#ifdef __USE_UNIX98
//# define _XOPEN_VERSION       500
//#else
//# define _XOPEN_VERSION       4
//#endif

/* Commands and utilities from XPG4 are available.  */
//#define _XOPEN_XCU_VERSION    4

/* We are compatible with the old published standards as well.  */
//#define _XOPEN_XPG2   1
//#define _XOPEN_XPG3   1
//#define _XOPEN_XPG4   1

/* The X/Open Unix extensions are available.  */
//#define _XOPEN_UNIX   1

/* Encryption is present.  */
//#define       _XOPEN_CRYPT    1

/* The enhanced internationalization capabilities according to XPG4.2
   are present.  */

//#define       _XOPEN_ENH_I18N 1

/* The legacy interfaces are also available.  */
//#define _XOPEN_LEGACY 1

/* Standard file descriptors.  */
#define STDIN_FILENO    0       /* Standard input.  */
#define STDOUT_FILENO   1       /* Standard output.  */
#define STDERR_FILENO   2       /* Standard error output.  */

#include <ll/sys/types.h>
#include <sys/types.h>

__DJ_dev_t
#undef __DJ_dev_t
#define __DJ_dev_t

__DJ_ino_t
#undef __DJ_ino_t
#define __DJ_ino_t

__DJ_mode_t
#undef __DJ_mode_t
#define __DJ_mode_t

__DJ_nlink_t
#undef __DJ_nlink_t
#define __DJ_nlink_t

__DJ_gid_t
#undef __DJ_gid_t
#define __DJ_gid_t

__DJ_off_t
#undef __DJ_off_t
#define __DJ_off_t

__DJ_pid_t
#undef __DJ_pid_t
#define __DJ_pid_t

__DJ_uid_t
#undef __DJ_uid_t
#define __DJ_uid_t

/* Test for access to NAME using the real UID and real GID.  */
extern int access __P ((__const char *__name, int __type));
#if defined __USE_BSD && !defined L_SET

/* Old BSD names for the same constants; just for compatibility.  */
# define L_SET          SEEK_SET
# define L_INCR         SEEK_CUR
# define L_XTND         SEEK_END
#endif

/* Move FD's file position to OFFSET bytes from the
   beginning of the file (if WHENCE is SEEK_SET),
   the current position (if WHENCE is SEEK_CUR),
   or the end of the file (if WHENCE is SEEK_END).
   Return the new file position.  */

//extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence));
#ifndef __USE_FILE_OFFSET64
extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
#else
# ifdef __REDIRECT
extern __off64_t __REDIRECT (lseek,
                             __P ((int __fd, __off64_t __offset,
                                   int __whence)),
                             lseek64);
# else
#  define lseek lseek64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence));
#endif

/* Close the file descriptor FD.  */
//extern int __close __P ((int __fd));
extern int close __P ((int __fd));

/* Read NBYTES into BUF from FD.  Return the
   number read, -1 for errors or 0 for EOF.  */

//extern ssize_t __read __P ((int __fd, __ptr_t __buf, size_t __nbytes));
extern ssize_t read __P ((int __fd, __ptr_t __buf, size_t __nbytes));

/* Write N bytes of BUF to FD.  Return the number written, or -1.  */
//extern ssize_t __write __P ((int __fd, __const __ptr_t __buf, size_t __n));
extern ssize_t write __P ((int __fd, __const __ptr_t __buf, size_t __n));

/* Change the process's working directory to PATH.  */
extern int chdir __P ((__const char *__path));

#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
/* Change the process's working directory to the one FD is open on.  */
//extern int fchdir __P ((int __fd));
#endif

/* Get the pathname of the current working directory,
   and put it in SIZE bytes of BUF.  Returns NULL if the
   directory couldn't be determined or SIZE was too small.
   If successful, returns BUF.  In GNU, if BUF is NULL,
   an array is allocated with `malloc'; the array is SIZE
   bytes long, unless SIZE == 0, in which case it is as
   big as necessary.  */

extern char *getcwd __P ((char *__buf, size_t __size));

#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
/* Put the absolute pathname of the current working directory in BUF.
   If successful, return BUF.  If not, put an error message in
   BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */

extern char *getwd __P ((char *__buf));
#endif


/* Duplicate FD, returning a new file descriptor on the same file.  */
extern int dup __P ((int __fd));

/* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
extern int dup2 __P ((int __fd, int __fd2));

/* Return 1 if FD is a valid descriptor associated
   with a terminal, zero if not.  */

extern int isatty __P ((int __fd));

/* Make all changes done to FD actually appear on disk.  */
extern int fsync __P ((int __fd));

/* Truncate FILE to LENGTH bytes.  */
#ifndef __USE_FILE_OFFSET64
extern int truncate __P ((__const char *__file, __off_t __length));
#else
# ifdef __REDIRECT
extern int __REDIRECT (truncate,
                       __P ((__const char *__file, __off64_t __length)),
                       truncate64);
# else
#  define truncate truncate64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int truncate64 __P ((__const char *__file, __off64_t __length));
#endif

/* Truncate the file FD is open on to LENGTH bytes.  */
extern int __ftruncate __P ((int __fd, __off_t __length));
#ifndef __USE_FILE_OFFSET64
extern int ftruncate __P ((int __fd, __off_t __length));
#else
# ifdef __REDIRECT
extern int __REDIRECT (ftruncate, __P ((int __fd, __off64_t __length)),
                       ftruncate64);
# else
#  define ftruncate ftruncate64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int ftruncate64 __P ((int __fd, __off64_t __length));
#endif

/* Return the maximum number of file descriptors
   the current process could possibly have.  */

extern int getdtablesize __P ((void));

/* Make a link to FROM named TO.  */
extern int link __P ((__const char *__from, __const char *__to));

#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
/* Make a symbolic link to FROM named TO.  */
extern int symlink __P ((__const char *__from, __const char *__to));

/* Read the contents of the symbolic link PATH into no more than
   LEN bytes of BUF.  The contents are not null-terminated.
   Returns the number of characters read, or -1 for errors.  */

extern int readlink __P ((__const char *__path, char *__buf, size_t __len));
#endif /* Use BSD.  */

/* Remove the link NAME.  */
extern int unlink __P ((__const char *__name));

/* Remove the directory PATH.  */
extern int rmdir __P ((__const char *__path));

/* ??? */
char    *mktemp __P((char *));

extern __inline__ pid_t getpid(void)
{
  return 0;
}

extern long pathconf(const char *path, int name);
extern long fpathconf(int filedes, int name);

__END_DECLS
#endif /* !__UNISTD_H_ */