# MI_SecureUncompressAny

## 構文

  `#include <nitro/mi.h>`
  `s32 MI_SecureUncompressAny( const void* srcp, u32 srcSize, void* destp, u32 dstSize );`

## 引数

srcp | 圧縮データが格納されているソースアドレス
srcSize | ソースデータサイズ
destp | 展開するディスティネーションアドレス
dstSize | 展開するディスティネーションサイズ

## 返り値

MI_ERR_SUCCESS | 正常終了
MI_ERR_UNSUPPORTED | 対応していない圧縮データタイプ
MI_ERR_SRC_SHORTAGE | ソースデータサイズが過小
MI_ERR_SRC_REMAINDER | ソースデータサイズが過大
MI_ERR_DEST_OVERRUN | 展開先のバッファを超過してしまう（バッファオーバーラン）
MI_ERR_ILLEGAL_TABLE | ハフマンテーブルに誤りがある

## 説明

データヘッダから圧縮タイプを判別して、適当な展開処理を実行します。

すべての圧縮タイプの展開処理がリンクされますので、特定の圧縮フォーマット以外使用していない場合には圧縮種別毎の関数を実行した方がよいかもしれません。

展開先のバッファサイズを確保する際の参考として、`MI_GetUncompressedSize()`を呼ぶことで、
圧縮データのヘッダに書かれている展開後のデータサイズを取得することができます。
圧縮データのヘッダが壊れており、正しい値が取得できなかった場合でも、各`MI_SecureUncompress()*`の中で検知しエラーを返します。

## 参照

`MI_GetUncompressedSize, MI_SecureUncompressRL, MI_SecureUncompressLZ,
MI_SecureUncompressHuffman, MI_SecureUnfilterDiff`

## 履歴

2008/05/22 初版