#include #include #include #include #include extern const char *__progname; static int errs; static char *linkbuf; static int lblen; static void printlink(const char *path) { int n; while (1) { if (linkbuf == 0) { fprintf(stderr,"%s: can't malloc %d: %s\n",__progname,lblen,strerror(errno)); exit(-1); } n = readlink(path,linkbuf,lblen); if (n < 0) { fprintf(stderr,"%s: %s: %s\n",__progname,path,strerror(errno)); errs ++; return; } if (n < lblen) { printf("%.*s\n",n,linkbuf); return; } free(linkbuf); linkbuf = malloc(lblen+=lblen>>1); } } int main(int, char **); int main(int ac, char **av) { errs = 0; linkbuf = malloc(lblen=64); for (ac--,av++;ac;ac--,av++) printlink(*av); exit(errs); }