- if (fgets(buf, sizeof(buf), fp)) {
- oldtokenid = strtok(buf, ":\r\n");
- oldid = strtok(NULL, ":\r\n");
- oldnonce = strtok(NULL, ":\r\n");
- hauthobj = strtok(NULL, ":\r\n");
+ struct stat st;
+ int fd = fileno(fp);
+
+ if (fstat(fd, &st)) {
+ eprint("fstat \"%s\" (fd %d) error: %s",
+ fn, fd, strerror(errno));
+ st.st_size = 2047;
+ }
+ if (st.st_size > 2047) st.st_size = 2047;
+ buf = alloca(st.st_size + 1);
+ if (fgets(buf, st.st_size + 1, fp)) {
+ char *p;
+
+ p = &buf[strlen(buf) - 1];
+ while (*p == '\n' || *p == '\r') *p-- = '\0';
+ mytokenid = strtok(buf, ":");
+ myid = strtok(NULL, ":");
+ mynonce = strtok(NULL, ":");
+ hauthobj = strtok(NULL, ":");