summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/lib/assert_fail.c
blob: 3d6ba65c1cb5f608bff7b37819a24d511a4c647b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "dietwarning.h"

extern int __ltostr(char *s, int size, unsigned long i, int base, char UpCase);

void __assert_fail (const char *assertion, const char *file, unsigned int line, const char *function)
{
  int alen=strlen(assertion);
  int flen=strlen(file);
  int fulen=strlen(function);
  char *buf=(char*)alloca(alen+flen+fulen+50);
  if (buf) {
    char *tmp;
    *buf=0;
    if (file) strcat(strcat(buf,file),":");
    tmp=buf+strlen(buf);
    __ltostr(tmp,10,line,10,0);
    strcat(buf,": ");
    if (function) strcat(strcat(buf,function),": ");
    strcat(buf,"Assertion `");
    strcat(buf,assertion);
    strcat(buf,"' failed.\n");
    write(2,buf,strlen(buf));
  }
  abort();
}

link_warning("__assert_fail","warning: your code still has assertions enabled!")