+gint procheader_get_one_field_asis(gchar *buf, gint len, FILE *fp)
+{
+ gint nexthead;
+
+ if (fgets(buf, len, fp) == NULL) return -1;
+ if (buf[0] == '\r' || buf[0] == '\n') return -1;
+
+ /* concatenate multi-line fields */
+ while (1) {
+ nexthead = file_peekchar(fp);
+ /* ([*WSP CRLF] 1*WSP) */
+ if (nexthead == ' ' || nexthead == '\t') {
+ size_t buflen = strlen(buf);
+
+ /* concatenate next line */
+ if ((len - buflen) > 2) {
+ if (fgets(buf + buflen, len - buflen, fp) == NULL)
+ break;
+ } else
+ break;
+ } else {
+ /* remove trailing new line */
+ strretchomp(buf);
+ break;
+ }
+ }
+ return 0;
+}
+