如何便携式检查“crypt”故障?

如何便携式检查“crypt”故障?

不幸的是,一些系统正在集成crypt来自libxcrypt当函数失败时,不会返回空指针,而是返回以 开头的“失败标记”字符串*,例如*0

目前尚不清楚该特定字符串是否得到保证。当我们看libxcrypt代码中,似乎可以在编译时关闭此功能,在这种情况下,API 函数仅检查*来自较低级别例程的前导字符,并将其转换为 null 返回。这表明应用程序代码也应该执行相同的操作;只需检查*并且不假设任何特定令牌。

我的问题是,其他crypt实现是否保证在任何情况下都不会返回领先*(失败除外,通过模仿libxcrypt?)

如果我们这样做:

if (ret != NULL && ret[0] != '*') {
  /* we have a valid result */
} else {
  /* crypt failed */
}

很酷吗?或者我们是否必须区分我们crypt正在使用的是否是libxcrypt一,并且只在这种情况下进行检查?

(一个想法:我们也可以设置errno为零,只有改为*时才得出前导失败的结论。)errnoEINVAL

相关内容