static int _fm_canload( PM_PARAMS_CANLOAD )
{
fm_t fm;
- unsigned char *bb;
+ unsigned char *bb, *bb0;
int fm_file_pos;
- bb = (unsigned char *) buffer;
+ bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+ memcpy(bb, buffer, bufSize);
// Header
fm.fm_header_hdr = (fm_chunk_header_t *) bb;
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Header Ident incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_IDENT;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Header Version incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_VERSION;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_IDENT;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Skin Version incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_VERSION;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM ST Ident incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_IDENT;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM ST Version incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_VERSION;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_IDENT;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Tri Version incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_VERSION;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_IDENT;
}
#ifdef FM_DBG
_pico_printf( PICO_WARNING, "FM Frame Version incorrect\n");
#endif
+ _pico_free(bb0);
return PICO_PMV_ERROR_VERSION;
}
fm_xyz_st_t *triangle;
fm_frame_t *frame;
- picoByte_t *bb;
+ picoByte_t *bb, *bb0;
picoModel_t *picoModel;
picoSurface_t *picoSurface;
picoShader_t *picoShader;
picoColor_t color;
- bb = (picoByte_t*) buffer;
+ bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+ memcpy(bb, buffer, bufSize);
// Header Header
fm.fm_header_hdr = (fm_chunk_header_t *) bb;
if( (strcmp(fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME)) )
{
_pico_printf( PICO_WARNING, "FM Header Ident incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER )
{
_pico_printf( PICO_WARNING, "FM Header Version incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( (strcmp(fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME)) )
{
_pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER )
{
_pico_printf( PICO_WARNING, "FM Skin Version incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( (strcmp(fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME)) )
{
_pico_printf( PICO_WARNING, "FM ST Ident incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER )
{
_pico_printf( PICO_WARNING, "FM ST Version incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( (strcmp(fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME)) )
{
_pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER )
{
_pico_printf( PICO_WARNING, "FM Tri Version incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( (strcmp(fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME)) )
{
_pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER )
{
_pico_printf( PICO_WARNING, "FM Frame Version incorrect\n");
+ _pico_free(bb0);
return NULL;
}
if( fm_head->numFrames < 1 )
{
_pico_printf( PICO_ERROR, "%s has 0 frames!", fileName );
+ _pico_free(bb0);
return NULL;
}
if( frameNum < 0 || frameNum >= fm_head->numFrames )
{
_pico_printf( PICO_ERROR, "Invalid or out-of-range FM frame specified" );
+ _pico_free(bb0);
return NULL;
}
texCoord->t = _pico_little_short( texCoord[i].t );
}
// set Skin Name
- strncpy(skinname, (unsigned char *) fm.fm_skin, FM_SKINPATHSIZE );
+ strncpy(skinname, (const char *) fm.fm_skin, FM_SKINPATHSIZE );
#ifdef FM_VERBOSE_DBG
// Print out md2 values
if( picoModel == NULL )
{
_pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+ _pico_free(bb0);
return NULL;
}
{
_pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
PicoFreeModel( picoModel );
+ _pico_free(bb0);
return NULL;
}
{
_pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
PicoFreeModel( picoModel );
+ _pico_free(bb0);
return NULL;
}
_pico_free(p_index_LUT_DUPS);
/* return the new pico model */
+ _pico_free(bb0);
return picoModel;
}