man ページによると、snprintf は glibc バージョン 2.2 以降で書き込まれたバイト数を返しています。ただし、libc2.2 および HP-UX の下位バージョンでは、正の整数が返されるため、バッファ オーバーフローが発生する可能性があります。
どうすればこれを克服し、移植可能なコードを書けるでしょうか?
編集:より明確にするために
このコードはlib 2.3で完全に機能しています
if ( snprintf( cmd, cmdLen + 1, ". %s%s", myVar1, myVar2 ) != cmdLen )
{
fprintf( stderr, "\nError: Unable to copy bmake command!!!");
returnCode = ERR_COPY_FILENAME_FAILED;
}
Linux では文字列の長さ (10) を返します。しかし、同じコードが、HP-UX マシンで出力される文字数よりも大きい正の数を返しています。この説明でいいと思います。