def traverse_ds_store_file(d):
    """
    Traverse a DSStore object from the node and yeld each entry.
    :param d: DSStore object
    :return: None
    """
    node = d._rootnode
    with d._get_block(node) as block:
        next_node, count = block.read(b'>II')
        if next_node:
            for n in range(count):
                ptr = block.read(b'>I')[0]
                for e in d._traverse(ptr):
                    yield e
                e = DSStoreEntry.read(block)
                yield e
            for e in d._traverse(next_node):
                yield e
        else:
            for n in range(count):
                e = DSStoreEntry.read(block)
                yield e