- if (input_f) fclose(input_f);
- input_f= fopen(input_filename, "rb"); if (!input_f) diee("input file");
+ for (;;) {
+ r= readlink(input_filename, symlink_check, TITLE_MAX);
+ assert(r<=TITLE_MAX);
+ assert(r!=-2);
+
+ if (r>=0) symlink_check[r]= 0;
+ else symlink_check[0]= 0;
+
+ if (r == last_readlink_r &&
+ (r<0
+ ? (errno==last_readlink_errno)
+ : !strcmp(symlink_check, title))) {
+ assert(input_f);
+ if (r<0) {
+ if (last_readlink_errno==EINVAL)
+ snprintf(title,sizeof(title),"%s",input_filename);
+ else
+ snprintf(title,sizeof(title),"? %s",strerror(last_readlink_errno));
+ }
+ break;
+ }
+
+ strcpy(title, symlink_check);
+ last_readlink_r= r;
+ last_readlink_errno= errno;
+
+ if (input_f) fclose(input_f);
+ input_f= fopen(input_filename, "rb"); if (!input_f) diee("input file");
+ }