usb-mtp: use bool to track MTPObject init status
Stop setting nchildren to -1. Use separate bool variable to track whenever we've already fetched the child objects instead. Also make nchildren unsigned. Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
f995523582
commit
36084d7e31
@ -109,7 +109,8 @@ struct MTPObject {
|
|||||||
struct stat stat;
|
struct stat stat;
|
||||||
MTPObject *parent;
|
MTPObject *parent;
|
||||||
MTPObject **children;
|
MTPObject **children;
|
||||||
int32_t nchildren;
|
uint32_t nchildren;
|
||||||
|
bool have_children;
|
||||||
QTAILQ_ENTRY(MTPObject) next;
|
QTAILQ_ENTRY(MTPObject) next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -273,7 +274,6 @@ static MTPObject *usb_mtp_object_alloc(MTPState *s, uint32_t handle,
|
|||||||
o->handle = handle;
|
o->handle = handle;
|
||||||
o->parent = parent;
|
o->parent = parent;
|
||||||
o->name = g_strdup(name);
|
o->name = g_strdup(name);
|
||||||
o->nchildren = -1;
|
|
||||||
if (parent == NULL) {
|
if (parent == NULL) {
|
||||||
o->path = g_strdup(name);
|
o->path = g_strdup(name);
|
||||||
} else {
|
} else {
|
||||||
@ -340,7 +340,11 @@ static void usb_mtp_object_readdir(MTPState *s, MTPObject *o)
|
|||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
|
|
||||||
o->nchildren = 0;
|
if (o->have_children) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
o->have_children = true;
|
||||||
|
|
||||||
dir = opendir(o->path);
|
dir = opendir(o->path);
|
||||||
if (!dir) {
|
if (!dir) {
|
||||||
return;
|
return;
|
||||||
@ -789,9 +793,7 @@ static void usb_mtp_command(MTPState *s, MTPControl *c)
|
|||||||
c->trans, 0, 0, 0);
|
c->trans, 0, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (o->nchildren == -1) {
|
usb_mtp_object_readdir(s, o);
|
||||||
usb_mtp_object_readdir(s, o);
|
|
||||||
}
|
|
||||||
if (c->code == CMD_GET_NUM_OBJECTS) {
|
if (c->code == CMD_GET_NUM_OBJECTS) {
|
||||||
trace_usb_mtp_op_get_num_objects(s->dev.addr, o->handle, o->path);
|
trace_usb_mtp_op_get_num_objects(s->dev.addr, o->handle, o->path);
|
||||||
nres = 1;
|
nres = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user