+2005-10-18 Miklos Szeredi <miklos@szeredi.hu>
+
+ * lib: optimize buffer reallocation in fill_dir.
+
2005-10-17 Miklos Szeredi <miklos@szeredi.hu>
* Released 2.4.1
char *contents;
int allocated;
unsigned len;
+ unsigned size;
unsigned needlen;
int filled;
unsigned long fh;
unsigned namelen = strlen(name);
unsigned entsize;
unsigned newlen;
- char *newptr;
if (statp)
stbuf = *statp;
return 1;
}
- newptr = (char *) realloc(dh->contents, newlen);
- if (!newptr) {
- dh->error = -ENOMEM;
- return 1;
+ if (newlen > dh->size) {
+ char *newptr;
+
+ if (!dh->size)
+ dh->size = 1024;
+ while (newlen > dh->size)
+ dh->size *= 2;
+
+ newptr = (char *) realloc(dh->contents, dh->size);
+ if (!newptr) {
+ dh->error = -ENOMEM;
+ return 1;
+ }
+ dh->contents = newptr;
}
- dh->contents = newptr;
fuse_add_dirent(dh->contents + dh->len, name, &stbuf, off ? off : newlen);
dh->len = newlen;
return 0;