10 #include <sys/ioctl.h>
14 extern void NORETURN_ATTR
GCC_FMT_ATTR (2, 3)
15 err (int exitcode
, const char *fmt
, ...);
16 extern void NORETURN_ATTR
GCC_FMT_ATTR (2, 3)
17 errx (int exitcode
, const char *fmt
, ...);
19 void NORETURN_ATTR
GCC_FMT_ATTR (2, 3) err (int exitcode
, const char *fmt
, ...)
26 vfprintf (stderr
, fmt
, ap
);
28 fprintf (stderr
, ": %s\n", strerror (savederrno
));
33 void NORETURN_ATTR
GCC_FMT_ATTR (2, 3) errx (int exitcode
, const char *fmt
, ...)
38 vfprintf (stderr
, fmt
, ap
);
45 void *parse_pointer (const char *cap
, const char *s
)
50 ret
= sscanf (s
, "%" SCN_ptr
, (uintptr_t *) &ptr
);
52 errx (1, "%s: cannot parse pointer in `%s'", cap
, s
);
60 gettimeofday (&tv
, NULL
);
61 return tv
.tv_sec
+ tv
.tv_usec
*1e-6;
64 /* slightly tweaked fmt_ulong by D.J. Bernstein */
65 void fmt_linkn (char *s
, unsigned int u
)
67 unsigned int len
; unsigned int q
;
68 unsigned int zma
= 'z' - 'a' + 1;
70 while (q
> zma
- 1) { ++len
; q
/= zma
; }
73 do { *--s
= (char)('a' + (u
% zma
) - (u
< zma
&& len
> 1));
80 char *ystrdup (const char *s
)
82 size_t len
= strlen (s
);
84 char *r
= malloc (len
+1);
85 if (!r
) errx (1, "malloc %zu", len
+1);