diff --git a/legacy/eet/src/lib/Eet.h b/legacy/eet/src/lib/Eet.h index 9f4923f0d5..c79a436516 100644 --- a/legacy/eet/src/lib/Eet.h +++ b/legacy/eet/src/lib/Eet.h @@ -243,6 +243,14 @@ extern "C" { */ EAPI char **eet_list (Eet_File *ef, char *glob, int *count_ret); + /** + * Return the number of entries in the specified eet file. + * @param ef A valid eet file handle. + * @return Number of entries in ef or -1 if the number of entries + * cannot be read due to open mode restrictions. + */ + EAPI int eet_num_entries(Eet_File *ef); + /***************************************************************************/ /** diff --git a/legacy/eet/src/lib/eet_lib.c b/legacy/eet/src/lib/eet_lib.c index a60442d9f4..95c11db6a1 100644 --- a/legacy/eet/src/lib/eet_lib.c +++ b/legacy/eet/src/lib/eet_lib.c @@ -1040,6 +1040,34 @@ eet_list(Eet_File *ef, char *glob, int *count_ret) return list_ret; } +int +eet_num_entries(Eet_File *ef) +{ + int i, num, ret = 0; + Eet_File_Node *efn; + + /* check to see its' an eet file pointer */ + if ((!ef) || (ef->magic != EET_MAGIC_FILE) || + (!ef->header) || (!ef->header->directory) || + ((ef->mode != EET_FILE_MODE_READ) && + (ef->mode != EET_FILE_MODE_READ_WRITE))) + { + return -1; + } + + /* loop through all entries */ + num = (1 << ef->header->directory->size); + for (i = 0; i < num; i++) + { + for (efn = ef->header->directory->nodes[i]; efn; efn = efn->next) + { + ret++; + } + } + + return ret; +} + int eet_init(void) { return ++eet_initcount;