Beispiel #1
0
Datei: npk.c Projekt: keedi/npk
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;
}
Beispiel #2
0
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;
}