불행히도 일부 시스템은 crypt
다음에서 통합되고 있습니다.libxcrypt함수가 실패하면 널 포인터를 반환하는 대신 로 시작하는 "실패 플래그" 문자열을 반환 합니다 *
.*0
해당 특정 문자열이 보장되는지 여부는 불분명합니다. 우리가 볼 때libxcrypt코드에서는 이 기능을 컴파일 타임에 끌 수 있는 것으로 보입니다. 이 경우 API 함수는 *
하위 수준 루틴의 선행 문자만 확인하고 이를 null로 반환합니다. 이는 애플리케이션 코드가 동일한 작업을 수행해야 하며 *
특정 토큰을 가정하지 않아야 함을 의미합니다.
내 질문은 crypt
다른 구현이 어떤 상황에서도 선도가 결코 반환되지 않을 것이라고 보장하는 것입니다 *
(실패한 경우를 제외하고 모방함으로써).libxcrypt? )
이렇게 하면:
if (ret != NULL && ret[0] != '*') {
/* we have a valid result */
} else {
/* crypt failed */
}
멋지나요? 아니면 crypt
우리가 사용하고 있는지 구별해야합니까?libxcrypt하나, 이 경우에만 확인하시겠습니까?
errno
(한 가지 생각: 0 으로 설정 하고 *
로 변경하면 선행이 실패했다고 결론을 내릴 수도 있습니다.)errno
EINVAL