【发布时间】:2011-06-21 10:00:35
【问题描述】:
我正在尝试在 AIX 上构建 python-kerberos。 kerberospw.c 使用对 asprintf 的调用,但从 Google 告诉我的内容来看,AIX 上不存在 asprintf。
我看到了http://www.koders.com/c/fidAA9B130D588302673A28B568430A83131B7734C0.aspx?s=windows.h,看起来我可以创建一个替代 asprintf,但我不知道它会去哪里或如何#include 它在 kerberospw.c 中。
有没有办法可以使用 koders.com 示例或其他代码来“伪造”asprintf?我可以只包含 kerberospw.c 中所示的 asprintf 函数吗?我不是 C 程序员,但
asprintf (char **resultp, const char *format, ...)
对我来说,最后的点看起来不像是一个有效的签名。 kerberospw.c 的相关行如下
asprintf(&message, "%.*s: %.*s", (int) result_code_string.length,
(char *) result_code_string.data,
(int) result_string.length,
(char *) result_string.data);
我意识到我可以联系 python-kerberos 的作者,但是 a) 我认为如果我这样做的话,有一个潜在的补丁会很有帮助,并且 b) 我可能遇到其他使用 asprintf 的软件,并且有一个解决方法会很好。
【问题讨论】:
-
请注意,
asprintf()的手册页指出,*resultp中的返回值在出现错误时是不确定的。其他手册页,例如问题中引用的手册页,表明它在错误时显式设置为 NULL。如果使用asprintf(),则不要假设函数失败时指针已初始化。如果实现asprintf(),请确保指针在出错时设置为 null 以提供确定性行为。