EMILE/libiso9660/iso9660_readdir.c

33 lines
664 B
C
Raw Normal View History

2005-11-12 19:12:13 +00:00
/*
*
* (c) 2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
#include "libiso9660.h"
2005-11-13 19:43:28 +00:00
extern iso9660_read_t __iso9660_device_read;
2005-11-12 19:12:13 +00:00
struct iso_directory_record *iso9660_readdir(iso9660_DIR *dir)
{
struct iso_directory_record *idr;
if (dir->index > 2048 - offsetof(struct iso_directory_record, name[0]))
{
if (dir->len <= 0)
return NULL;
2005-11-13 19:43:28 +00:00
__iso9660_device_read(dir->extent, dir->buffer, sizeof (dir->buffer));
2005-11-12 19:12:13 +00:00
dir->len -= sizeof (dir->buffer);
dir->extent++;
dir->index = 0;
}
idr = (struct iso_directory_record *) &dir->buffer[dir->index];
if (idr->length[0] == 0)
return NULL;
dir->index += dir->buffer[dir->index];
return idr;
}