残念ながら、一部のシステムはcrypt
以下で統合されています。libxcrypt関数が失敗した場合は、NULLポインタを返す代わりに始まる「失敗フラグ」文字列を返します*
。*0
その特定の文字列が保証されるかどうかは不明です。私たちが見るときlibxcryptコードでは、この機能をコンパイル時にオフにできるようです。この場合、API関数は*
下位レベルのルーチンの先行文字のみを確認し、それをnullとして返します。これは、アプリケーションコードが同じことを実行し、特定の*
トークンを想定してはいけないことを意味します。
私の質問は、他crypt
の実装がどんな状況でもリードが返されないことを保証することです*
(失敗した場合を除いて模倣することによって)。libxcrypt? )
これにより:
if (ret != NULL && ret[0] != '*') {
/* we have a valid result */
} else {
/* crypt failed */
}
素敵ですか?それともcrypt
私たちが使っているものを区別する必要がありますか?libxcrypt一つ、この場合のみ確認してもよろしいですか?
errno
(1つの考え:0に設定して*
に変更すると、先行が失敗したと結論付けることもできます。)errno
EINVAL