stub.c 1.49 KB
/* stub with functions replacing some system calling */

//#include <stdio.h>
#include "my_printf.h"

//struct _IO_FILE {
//  int dumb;
//};

FILE *stderr = NULL;
FILE *stdout = NULL;

int errno = 0;


typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler)
{
  return handler;
}


void exit(int status)
{
  (void) status;
  asm("mov %psr,%g1");
  asm("sub %g0,33,%g2");
  asm("and %g1,%g2,%g1");
  asm("mov %g1,%psr");
  asm("nop");
  asm("ta 0");
  asm("nop");
  asm("nop");
  asm("nop");
  while(1) ;
}

int fputs(const char *s, FILE *stream)
{
  printf_(s);
  return 0;
}

int puts(const char *s)
{
  printf_(s);
  return 0;
}

int fputc(int c, FILE *stream)
{
  printf_("%c",c);
  return c;
}

int putc(int c, FILE *stream)
{
  printf_("%c",c);
  return c;
}

int fflush(FILE *stream)
{
  return 0;
}

int my_vfprintf(FILE *stream, const char *format, ...);
#undef fprintf
int fprintf(FILE *stream, const char *format, ...)
{
  va_list arg;
  int length;

  va_start(arg, format);
  length = my_vfprintf(stream, format, arg);
  va_end(arg);
  return length;
}

#undef printf
int printf(const char *format, ...)
{
  va_list arg;
  int length;

  va_start(arg, format);
  length = my_vfprintf(stdout, format, arg);
  va_end(arg);
  return length;
}

int vfprintf(FILE *stream, const char *format, va_list ap)
{
  return my_vfprintf(stream, format, ap);
}

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
  // TODO ... for -O3 fputs is sometimes replaced by fwrite
}