不幸的是,一些系统正在集成crypt
来自libxcrypt当函数失败时,不会返回空指针,而是返回以 开头的“失败标记”字符串*
,例如*0
。
目前尚不清楚该特定字符串是否得到保证。当我们看libxcrypt代码中,似乎可以在编译时关闭此功能,在这种情况下,API 函数仅检查*
来自较低级别例程的前导字符,并将其转换为 null 返回。这表明应用程序代码也应该执行相同的操作;只需检查*
并且不假设任何特定令牌。
我的问题是,其他crypt
实现是否保证在任何情况下都不会返回领先*
(失败除外,通过模仿libxcrypt?)
如果我们这样做:
if (ret != NULL && ret[0] != '*') {
/* we have a valid result */
} else {
/* crypt failed */
}
很酷吗?或者我们是否必须区分我们crypt
正在使用的是否是libxcrypt一,并且只在这种情况下进行检查?
(一个想法:我们也可以设置errno
为零,只有改为*
时才得出前导失败的结论。)errno
EINVAL