mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15079 87f5fb63-7c3d-0410-a384-fd976d0f7a62
805 lines
28 KiB
C
805 lines
28 KiB
C
/*
|
|
* $Id: usergroup_headers.h,v 1.8 2006-01-08 12:04:27 obarthel Exp $
|
|
*
|
|
* :ts=4
|
|
*
|
|
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
|
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) sourcery.han.de>
|
|
* 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.
|
|
*
|
|
* - Neither the name of Olaf Barthel nor the names of 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.
|
|
*/
|
|
|
|
#ifndef _USERGROUP_HEADERS_H
|
|
#define _USERGROUP_HEADERS_H
|
|
|
|
/****************************************************************************/
|
|
|
|
#ifndef _STDIO_HEADERS_H
|
|
#include "stdio_headers.h"
|
|
#endif /* _STDIO_HEADERS_H */
|
|
|
|
/****************************************************************************/
|
|
|
|
#ifndef _STDLIB_HEADERS_H
|
|
#include "stdlib_headers.h"
|
|
#endif /* _STDLIB_HEADERS_H */
|
|
|
|
/****************************************************************************/
|
|
|
|
#ifndef _STDLIB_PROFILE_H
|
|
#include "stdlib_profile.h"
|
|
#endif /* _STDLIB_PROFILE_H */
|
|
|
|
/****************************************************************************/
|
|
|
|
#ifndef _PWD_H
|
|
#include <pwd.h>
|
|
#endif /* _PWD_H */
|
|
|
|
#ifndef _GRP_H
|
|
#include <grp.h>
|
|
#endif /* _GRP_H */
|
|
|
|
/****************************************************************************/
|
|
|
|
extern struct Library * NOCOMMON __UserGroupBase;
|
|
|
|
/****************************************************************************/
|
|
|
|
#if defined(__amigaos4__)
|
|
|
|
extern struct UserGroupIFace * NOCOMMON __IUserGroup;
|
|
|
|
#endif /* __amigaos4__ */
|
|
|
|
/****************************************************************************/
|
|
|
|
extern BOOL NOCOMMON __root_mode;
|
|
|
|
/****************************************************************************/
|
|
|
|
extern int NOCOMMON __root_uid;
|
|
extern int NOCOMMON __root_gid;
|
|
extern int NOCOMMON __root_euid;
|
|
extern int NOCOMMON __root_egid;
|
|
|
|
/****************************************************************************/
|
|
|
|
#if defined(__GNUC__)
|
|
|
|
#if defined(__amigaos4__)
|
|
|
|
#include <interfaces/usergroup.h>
|
|
|
|
#define __ug_SetupContextTagList(name, tags) __IUserGroup->ug_SetupContextTagList(name, tags)
|
|
#define __ug_GetErr() __IUserGroup->ug_GetErr()
|
|
#define __ug_StrError(err) __IUserGroup->ug_StrError(err)
|
|
#define __getuid() __IUserGroup->getuid()
|
|
#define __geteuid() __IUserGroup->geteuid()
|
|
#define __setreuid(real, effective) __IUserGroup->setreuid(real, effective)
|
|
#define __setuid(uid) __IUserGroup->setuid(uid)
|
|
#define __getgid() __IUserGroup->getgid()
|
|
#define __getegid() __IUserGroup->getegid()
|
|
#define __setregid(real, effective) __IUserGroup->setregid(real, effective)
|
|
#define __setgid(gid) __IUserGroup->setgid(gid)
|
|
#define __getgroups(gidsetlen, gidset) __IUserGroup->getgroups(gidsetlen, gidset)
|
|
#define __setgroups(gidsetlen, gidset) __IUserGroup->setgroups(gidsetlen, gidset)
|
|
#define __initgroups(name, basegid) __IUserGroup->initgroups(name, basegid)
|
|
#define __getpwnam(login) __IUserGroup->getpwnam(login)
|
|
#define __getpwuid(uid) __IUserGroup->getpwuid(uid)
|
|
#define __setpwent() __IUserGroup->setpwent()
|
|
#define __getpwent() __IUserGroup->getpwent()
|
|
#define __endpwent() __IUserGroup->endpwent()
|
|
#define __getgrnam(name) __IUserGroup->getgrnam(name)
|
|
#define __getgrgid(gid) __IUserGroup->getgrgid(gid)
|
|
#define __setgrent() __IUserGroup->setgrent()
|
|
#define __getgrent() __IUserGroup->getgrent()
|
|
#define __endgrent() __IUserGroup->endgrent()
|
|
#define __crypt(key, set) __IUserGroup->crypt(key, set)
|
|
#define __ug_GetSalt(user, buf, size) __IUserGroup->ug_GetSalt(user, buf, size)
|
|
#define __getpass(prompt) __IUserGroup->getpass(prompt)
|
|
#define __umask(mask) __IUserGroup->umask(mask)
|
|
#define __getumask() __IUserGroup->getumask()
|
|
#define __setsid() __IUserGroup->setsid()
|
|
#define __getpgrp() __IUserGroup->getpgrp()
|
|
#define __getlogin() __IUserGroup->getlogin()
|
|
#define __setlogin(name) __IUserGroup->setlogin(name)
|
|
#define __setutent() __IUserGroup->setutent()
|
|
#define __getutent() __IUserGroup->getutent()
|
|
#define __endutent() __IUserGroup->endutent()
|
|
#define __getlastlog(uid) __IUserGroup->getlastlog(uid)
|
|
#define __setlastlog(uid, name, host) __IUserGroup->setlastlog(uid, name, host)
|
|
#define __getcredentials(task) __IUserGroup->getcredentials(task)
|
|
|
|
#else
|
|
|
|
#define __ug_SetupContextTagList(name, tags) ({ \
|
|
UBYTE * _ug_SetupContextTagList_name = (name); \
|
|
struct TagItem * _ug_SetupContextTagList_tags = (tags); \
|
|
LONG _ug_SetupContextTagList__re = \
|
|
({ \
|
|
register struct Library * const __ug_SetupContextTagList__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register LONG __ug_SetupContextTagList__re __asm("d0"); \
|
|
register UBYTE * __ug_SetupContextTagList_name __asm("a0") = (_ug_SetupContextTagList_name); \
|
|
register struct TagItem * __ug_SetupContextTagList_tags __asm("a1") = (_ug_SetupContextTagList_tags); \
|
|
__asm volatile ("jsr a6@(-30:W)" \
|
|
: "=r"(__ug_SetupContextTagList__re) \
|
|
: "r"(__ug_SetupContextTagList__bn), "r"(__ug_SetupContextTagList_name), "r"(__ug_SetupContextTagList_tags) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__ug_SetupContextTagList__re; \
|
|
}); \
|
|
_ug_SetupContextTagList__re; \
|
|
})
|
|
|
|
#define __ug_GetErr() ({ \
|
|
LONG _ug_GetErr__re = \
|
|
({ \
|
|
register struct Library * const __ug_GetErr__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register LONG __ug_GetErr__re __asm("d0"); \
|
|
__asm volatile ("jsr a6@(-36:W)" \
|
|
: "=r"(__ug_GetErr__re) \
|
|
: "r"(__ug_GetErr__bn) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__ug_GetErr__re; \
|
|
}); \
|
|
_ug_GetErr__re; \
|
|
})
|
|
|
|
#define __ug_StrError(err) ({ \
|
|
LONG _ug_StrError_err = (err); \
|
|
UBYTE * _ug_StrError__re = \
|
|
({ \
|
|
register struct Library * const __ug_StrError__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register UBYTE * __ug_StrError__re __asm("d0"); \
|
|
register LONG __ug_StrError_err __asm("d1") = (_ug_StrError_err); \
|
|
__asm volatile ("jsr a6@(-42:W)" \
|
|
: "=r"(__ug_StrError__re) \
|
|
: "r"(__ug_StrError__bn), "r"(__ug_StrError_err) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__ug_StrError__re; \
|
|
}); \
|
|
_ug_StrError__re; \
|
|
})
|
|
|
|
#define __getuid() ({ \
|
|
LONG _getuid__re = \
|
|
({ \
|
|
register struct Library * const __getuid__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register LONG __getuid__re __asm("d0"); \
|
|
__asm volatile ("jsr a6@(-48:W)" \
|
|
: "=r"(__getuid__re) \
|
|
: "r"(__getuid__bn) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__getuid__re; \
|
|
}); \
|
|
_getuid__re; \
|
|
})
|
|
|
|
#define __geteuid() ({ \
|
|
LONG _geteuid__re = \
|
|
({ \
|
|
register struct Library * const __geteuid__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register LONG __geteuid__re __asm("d0"); \
|
|
__asm volatile ("jsr a6@(-54:W)" \
|
|
: "=r"(__geteuid__re) \
|
|
: "r"(__geteuid__bn) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__geteuid__re; \
|
|
}); \
|
|
_geteuid__re; \
|
|
})
|
|
|
|
#define __setreuid(real, effective) ({ \
|
|
LONG _setreuid_real = (real); \
|
|
LONG _setreuid_effective = (effective); \
|
|
LONG _setreuid__re = \
|
|
({ \
|
|
register struct Library * const __setreuid__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
|
register LONG __setreuid__re __asm("d0"); \
|
|
register LONG __setreuid_real __asm("d0") = (_setreuid_real); \
|
|
register LONG __setreuid_effective __asm("d1") = (_setreuid_effective); \
|
|
__asm volatile ("jsr a6@(-60:W)" \
|
|
: "=r"(__setreuid__re) \
|
|
: "r"(__setreuid__bn), "r"(__setreuid_real), "r"(__setreuid_effective) \
|
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
|
__setreuid__re; \
|
|
}); \
|
|
|