containerfs: fix memory leak

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2018-06-28 12:23:57 +02:00
parent 554264ce1e
commit 09771b9864
No known key found for this signature in database
GPG Key ID: E4730F97F60286ED

24
main.c
View File

@ -1169,7 +1169,7 @@ lo_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
return; return;
} }
p = buffer; p = buffer;
while (remaining > 0 && offset < d->tbl_size) for (;remaining > 0 && offset < d->tbl_size; offset++)
{ {
int ret; int ret;
size_t entsize; size_t entsize;
@ -1187,19 +1187,13 @@ lo_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
if (node->parent) if (node->parent)
node = node->parent; node = node->parent;
else else
{ continue;
offset++;
continue;
}
} }
else else
{ {
node = do_lookup_file (lo, ino, name); node = do_lookup_file (lo, ino, name);
if (node == NULL) if (node == NULL)
{ continue;
offset++;
continue;
}
} }
ret = rpl_stat (req, node, &st); ret = rpl_stat (req, node, &st);
@ -1219,19 +1213,21 @@ lo_do_readdir (fuse_req_t req, fuse_ino_t ino, size_t size,
e.attr_timeout = ATTR_TIMEOUT; e.attr_timeout = ATTR_TIMEOUT;
e.entry_timeout = ENTRY_TIMEOUT; e.entry_timeout = ENTRY_TIMEOUT;
e.ino = NODE_TO_INODE (node); e.ino = NODE_TO_INODE (node);
if ((strcmp (name, ".") != 0) && (strcmp (name, "..") != 0))
node->lookups++;
memcpy (&e.attr, &st, sizeof (st)); memcpy (&e.attr, &st, sizeof (st));
entsize = fuse_add_direntry_plus (req, p, remaining, name, &e, offset + 1); entsize = fuse_add_direntry_plus (req, p, remaining, name, &e, offset + 1);
}
p += entsize; if (entsize <= remaining)
offset++; {
if ((strcmp (name, ".") != 0) && (strcmp (name, "..") != 0))
node->lookups++;
}
}
if (entsize > remaining) if (entsize > remaining)
break; break;
p += entsize;
remaining -= entsize; remaining -= entsize;
} }
fuse_reply_buf (req, buffer, size - remaining); fuse_reply_buf (req, buffer, size - remaining);