Skip to content

Commit 8f547f8

Browse files
committed
refactor: memcpy the buffer in PACKFILE fread
This saves ~500ms on my Mac when loading Yuurand.qst
1 parent 586f194 commit 8f547f8

File tree

1 file changed

+21
-5
lines changed
  • third_party/allegro_legacy/src

1 file changed

+21
-5
lines changed

third_party/allegro_legacy/src/file.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2755,14 +2755,30 @@ static long normal_fread(void *p, long n, void *_f)
27552755
{
27562756
PACKFILE *f = _f;
27572757
unsigned char *cp = (unsigned char *)p;
2758-
long i;
2758+
long i = 0;
27592759
int c;
27602760

2761-
for (i=0; i<n; i++) {
2762-
if ((c = normal_getc(f)) == EOF)
2763-
break;
2761+
// local edit
2762+
// Copy the entire buffer as needed.
2763+
while (i < n)
2764+
{
2765+
// Check if buffer ran out. A call to the normal read byte function will refresh it.
2766+
if (f->normal.buf_size <= 0)
2767+
{
2768+
if ((c = normal_getc(f)) == EOF)
2769+
break;
2770+
*(cp++) = c;
2771+
i++;
2772+
if (f->normal.buf_size <= 0)
2773+
break;
2774+
}
27642775

2765-
*(cp++) = c;
2776+
long quick_read = MIN(f->normal.buf_size, n-i);
2777+
memcpy(cp, f->normal.buf_pos, quick_read);
2778+
cp += quick_read;
2779+
f->normal.buf_pos += quick_read;
2780+
i += quick_read;
2781+
f->normal.buf_size -= quick_read;
27662782
}
27672783

27682784
return i;

0 commit comments

Comments
 (0)