From: Ralph Corderoy Date: Sun, 16 Oct 2016 07:23:51 +0000 (+0100) Subject: Stop one lseek(2) per header fetched by m_getfld.c in common case. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/f2ecc1fd04d5b842b8373e589395e0118cbe62d0?hp=bd057d60eba167871169c243a64dbf9d7d9f4cde Stop one lseek(2) per header fetched by m_getfld.c in common case. Only call ftello(3) in enter_getfld() when track_filepos has been requested; not often. --- diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index 4da2f3ee..531381d8 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -347,7 +347,7 @@ void m_getfld_state_destroy (m_getfld_state_t *gstate) { static void enter_getfld (m_getfld_state_t *gstate, FILE *iob) { m_getfld_state_t s; - off_t pos = ftello (iob); + off_t pos; if (! *gstate) { m_getfld_state_init (gstate, iob); @@ -363,7 +363,11 @@ enter_getfld (m_getfld_state_t *gstate, FILE *iob) { readpos shift code being currently unused. */ s->iob = iob; - if (s->track_filepos && (pos != 0 || s->last_internal_pos != 0)) { + if (!s->track_filepos) + return; + + pos = ftello(iob); + if (pos != 0 || s->last_internal_pos != 0) { if (s->last_internal_pos == 0) { s->total_bytes_read = pos; } else {