NPK_ENTITY npk_package_get_entity( NPK_PACKAGE package, NPK_CSTR entityname ) { NPK_ENTITYBODY* eb = NULL; NPK_PACKAGEBODY* pb = package; NPK_BUCKET* bucket = NULL; NPK_CHAR buf[512]; if( !package ) { npk_error( NPK_ERROR_PackageIsNull ); return NULL; } if( NPK_SUCCESS != npk_prepare_entityname( entityname, buf, 512 ) ) return NULL; if( pb->usingHashmap_ ) { bucket = pb->bucket_[npk_get_bucket(buf)]; if( bucket != NULL ) { eb = bucket->pEntityHead_; while( eb != NULL ) { #ifdef NPK_CASESENSITIVE if( strcmp( eb->name_, buf ) == 0 ) #else if( stricmp( eb->name_, buf ) == 0 ) #endif { pb->pEntityLatest_ = eb; return eb; } eb = eb->nextInBucket_; } } } else /* not usingHashmap_ */ { eb = pb->pEntityHead_; while( eb != NULL ) { #ifdef NPK_CASESENSITIVE if( strcmp( eb->name_, buf ) == 0 ) #else if( stricmp( eb->name_, buf ) == 0 ) #endif { pb->pEntityLatest_ = eb; return eb; } eb = eb->next_; } } npk_error( NPK_ERROR_CannotFindEntity ); return NULL; }
NPK_RESULT npk_package_add_file( NPK_PACKAGE package, NPK_CSTR filename, NPK_CSTR entityname, NPK_ENTITY* lpEntity ) { NPK_ENTITYBODY* eb; NPK_CSTR __entityname; NPK_RESULT res; NPK_CHAR namebuf[512]; if( ( res = npk_entity_alloc( (NPK_ENTITY*)&eb ) ) != NPK_SUCCESS ) return res; if( entityname == NULL ) { __entityname = NULL; if( ( entityname = strrchr( filename, '\\' ) ) == NULL ) if( ( entityname = strrchr( filename, '/' ) ) == NULL ) __entityname = filename; if( __entityname == NULL ) __entityname = entityname + sizeof(NPK_CHAR); } else __entityname = entityname; if( ( res = npk_prepare_entityname( __entityname, namebuf, 512) ) != NPK_SUCCESS ) goto npk_package_add_file_return_with_error; if( ( res = npk_get_filetime( filename, &eb->info_.modified_ ) ) != NPK_SUCCESS ) goto npk_package_add_file_return_with_error; if( ( res = npk_alloc_copy_string( &eb->localname_, filename ) ) != NPK_SUCCESS ) goto npk_package_add_file_return_with_error; if( ( res = npk_alloc_copy_string( &eb->name_, namebuf ) ) != NPK_SUCCESS ) goto npk_package_add_file_return_with_error; eb->info_.nameLength_ = (NPK_SIZE)strlen( eb->name_ ); if( ( res = npk_package_add_entity( package, eb ) ) != NPK_SUCCESS ) goto npk_package_add_file_return_with_error; if( lpEntity ) *lpEntity = eb; return NPK_SUCCESS; npk_package_add_file_return_with_error: NPK_SAFE_FREE( eb ); return res; }