137da2899SCharles.Forsyth #include "lib9.h"
237da2899SCharles.Forsyth
337da2899SCharles.Forsyth #include <errno.h>
437da2899SCharles.Forsyth
537da2899SCharles.Forsyth static char errstring[ERRMAX];
637da2899SCharles.Forsyth
737da2899SCharles.Forsyth enum
837da2899SCharles.Forsyth {
937da2899SCharles.Forsyth Magic = 0xffffff
1037da2899SCharles.Forsyth };
1137da2899SCharles.Forsyth
1237da2899SCharles.Forsyth void
werrstr(char * fmt,...)1337da2899SCharles.Forsyth werrstr(char *fmt, ...)
1437da2899SCharles.Forsyth {
1537da2899SCharles.Forsyth va_list arg;
1637da2899SCharles.Forsyth
1737da2899SCharles.Forsyth va_start(arg, fmt);
1837da2899SCharles.Forsyth vseprint(errstring, errstring+sizeof(errstring), fmt, arg);
1937da2899SCharles.Forsyth va_end(arg);
2037da2899SCharles.Forsyth errno = Magic;
2137da2899SCharles.Forsyth }
2237da2899SCharles.Forsyth
2337da2899SCharles.Forsyth void
oserrstr(char * buf,uint nerr)2437da2899SCharles.Forsyth oserrstr(char *buf, uint nerr)
2537da2899SCharles.Forsyth {
26*35a6f3e1Sforsyth char *s;
27*35a6f3e1Sforsyth
28*35a6f3e1Sforsyth if(errno != EINTR)
29*35a6f3e1Sforsyth s = strerror(errno);
30*35a6f3e1Sforsyth else
31*35a6f3e1Sforsyth s = "interrupted";
32*35a6f3e1Sforsyth utfecpy(buf, buf+nerr, s);
3337da2899SCharles.Forsyth }
3437da2899SCharles.Forsyth
3537da2899SCharles.Forsyth int
errstr(char * buf,uint nerr)3637da2899SCharles.Forsyth errstr(char *buf, uint nerr)
3737da2899SCharles.Forsyth {
3837da2899SCharles.Forsyth if(errno == Magic)
3937da2899SCharles.Forsyth utfecpy(buf, buf+nerr, errstring);
4037da2899SCharles.Forsyth else
4137da2899SCharles.Forsyth oserrstr(buf, nerr);
4237da2899SCharles.Forsyth return 1;
4337da2899SCharles.Forsyth }
44