/******************************************************************************
 *
 * RCS ID
 * $Id: unix,v 1.1 1999/05/16 12:00:09 david Exp $
 *
 * HISTORY
 * $Log: unix,v $
 * Revision 1.1  1999/05/16 12:00:09  david
 * Initial revision
 *
 *
 *****************************************************************************/


#include "includes.h"
#include "swis.h"
#include "kernel.h"
#include "my_os.h"

char * __permstr (register const char *s)
{
  register int i;
  register char *r;

  if (!s)
    return (0);

  i = strlen (s) + 1;
  if (!(r = malloc (i)))
    return (0);
  memcpy ((void *) r, (void *) s, i);
  return (r);
}




int ftruncate(int fd, size_t length)
{ 
  int r[10];               
  _kernel_oserror *e;

 DEBUG(3,("ftruncate fd %d, length %d\n",fd,length));
     
 if (e = myos_args (3, fd, (int) length, r))
    {
      return (-1);
    }     

  DEBUG(3,("ftruncate passed\n"));
  return 0;
}

/*
int open(const char *pathname, int flags, mode_t mode)
{
  DEBUG(3,("open pathname %s, flags %d, mode 0x%x\n",
        pathname, flags, mode));
}
*/

int setgroups(size_t size, const gid_t *list)
{
  DEBUG(3,("setgroups\n"));
}

char *mktemp(char *template)
{
  _kernel_swi_regs r;               
  _kernel_oserror *e;         
  char monotime[10];       
  int  len;

  DEBUG(3,("mktemp %s\n",template));

  if (strncmp(&template[strlen(template)-6],"XXXXXX",6)!=0)
  {              
     DEBUG(5,("mktemp template error\n"));
     errno=EINVAL;
     return template; /* should return NULL */
  }
  
  e = _kernel_swi(OS_ReadMonotonicTime, &r, &r);
  
  if (e==NULL)
  {
    sprintf(monotime,"%x",r.r[0]);
    len = strlen(monotime);
    if (len>6)
    {
      len=6;
    }       
    strncpy(&template[strlen(template)-6],monotime,len);
  }
               
  DEBUG(5,("mktemp monotime %s, teplate %s\n",monotime, template));

  return template;
}






