void * alloca (size_t size);
#endif
int atoi (char const *s);
+int atexit (void (*function) (void));
void * calloc (size_t nmemb, size_t size);
-void exit (int);
+void _exit (int status);
+void exit (int status);
void free (void *ptr);
char* getenv (char const* s);
int setenv (char const* s, char const* v, int overwrite_p);
int access (char const *s, int mode);
unsigned int alarm (unsigned int seconds);
-#define alarm(x) {eputs ("alarm x="); eputs (itoa (x)); eputs ("\n"); kill (getpid (), 14);}
-#define atexit(x) eputs ("atexit\n")
-
int close (int fd);
int execv (char const *file_name, char *const argv[]);
int execve (char const *file, char *const argv[], char *const env[]);
p++;
}
}
+
+// gcc-3.0
+int
+atexit (void (*function) (void))
+{
+ __call_at_exit = function;
+}
+
#define SYS_write "0x04"
void
-exit (int code)
+_exit (int code)
{
#if !__TINYC__
asm (
);
#endif // __TINYC__
// not reached
- exit (0);
+ _exit (0);
+}
+
+void (*__call_at_exit) (void);
+
+void
+exit (int code)
+{
+ if (__call_at_exit)
+ (*__call_at_exit) ();
+ _exit (code);
}
ssize_t
*/
void
-exit ()
+_exit ()
{
asm ("mov____$i32,%eax SYS_exit");
asm ("mov____0x8(%ebp),%ebx !8");
asm ("int____$0x80");
}
+void (*__call_at_exit) (void);
+
+void
+exit (int code)
+{
+ if (__call_at_exit)
+ (*__call_at_exit) ();
+ _exit (code);
+}
+
void
write ()
{