/*
 *  This file is part of ixemul.library for the Amiga.
 *  Copyright (C) 1991, 1992  Markus M. Wild
 *  Portions Copyright (C) 1994 Rafael W. Luebbert
 *  Portions Copyright (C) 1996 Jeff Shepherd
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library 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
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public
 *  License along with this library; if not, write to the Free
 *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  $Id: smallfuncs.c,v 1.1 1994/06/24 22:10:32 rluebbert Exp $
 *
 *  $Log: smallfuncs.c,v $
 * Revision 1.1  1994/06/24  22:10:32  rluebbert
 * Initial revision
 *
 */

#define KERNEL
#include "ixemul.h"
#include <unistd.h>

int
chown(const char *name, uid_t uid, gid_t gid) {
  return 0;
}

int fchown(int fd, int uid, int mode) {
  return 0;
}

gid_t
getgid(void) {
#ifdef USE_NET
  extern gid_t NET_getgid(void);
  register struct user *p = &u;

    if (p->u_ixnetbase) {
	return NET_getgid();
    }
#endif
  return 0;
}

uid_t
getuid(void) {
  uid_t retval = 0;
#ifdef USE_NET
  extern uid_t NET_getuid(void);
  register struct user *p = &u;

    if (p->u_ixnetbase) {
	retval = NET_getuid();
    }
#endif
    return retval;
}

gid_t
getegid(void) {
  gid_t retval = 0;
#ifdef USE_NET
    extern gid_t NET_getegid(void);
    register struct user *p = &u;
    if (p->u_ixnetbase) {
	retval = NET_getegid();
    }
#endif
    return retval;
}

uid_t
geteuid(void) {
  uid_t retval = 0;
#ifdef USE_NET
    extern uid_t NET_geteuid(void);
    register struct user *p = &u;
    if (p->u_ixnetbase) {
	retval =  NET_geteuid();
    }
#endif
    return retval;
}

int
getppid(void) {
  /* all processes have been started by init :-)) */
  return 1;
}

/* not really useful.. but it's there ;-)) */
int
getpagesize(void) {
  return 2048;
}

int
initgroups (const char *name, int basegid) {
#ifdef USE_NET
  extern int NET_initgroups(const char *, int);
  register struct user *p = &u;

    if (p->u_ixnetbase) {
	return NET_initgroups(name,basegid);
    }
#endif
    return 0;
}

extern char _ctype_[];
extern int sys_nerr;

void
ix_get_vars (char **ctype, int *_sys_nerr) {
  if (ctype)            *ctype     = _ctype_;
  if (_sys_nerr)        *_sys_nerr = sys_nerr;
}

int
setgroups (int ngroups, const int *gidset)
{
#ifdef USE_NET
  extern int NET_setgroups(int, const int *);
  register struct user *p = &u;

    if (p->u_ixnetbase) {
	return NET_setgroups(ngroups,gidset);
    }
#endif
  return (ngroups >= 1) ? 0 : -1;
}

int
setpgrp(int pid, int pgrp)
{
  return pid==pgrp ? 0 : -1;
}

int
setpassent(int stayopen)
{
#ifdef USE_NET
    extern int NET_setpassent(int);
    register struct user *p = &u;

    if (p->u_ixnetbase) {
	return NET_setpassent(stayopen);
    }
#endif
    return(1);
}

int
setpwent(void)
{
#ifdef USE_NET
    extern int NET_setpwent(void);
    register struct user *p = &u;

    if (p->u_ixnetbase) {
	return NET_setpwent();
    }
#endif
    return(1);
}

void
endpwent(void)
{
#ifdef USE_NET
    extern void NET_endpwent(void);
    register struct user *p = &u;

    if (p->u_ixnetbase) {
	NET_endpwent();
    }
#endif
}

