콘텐츠로 이동
무료 평가 시작

pdcomm_secs_decode

함수

인코딩된 바이트에서 SECS-II 항목을 정확히 하나 디코딩합니다.

PdcommStatus pdcomm_secs_decode(const uint8_t *data, size_t length, const PdcommSecsLimits *options, PdcommSecsItem **out, size_t *error_offset)

선언 위치: #include <pdcomm.h>

입력은 트리를 할당하기 전에 options로 검증한 뒤 복사하므로, 새 항목은 data를 참조하지 않습니다. 항목 헤더는 필요보다 많은 길이 바이트를 사용해도 됩니다. pdcomm_secs_encode()는 항상 최소 크기의 헤더를 기록합니다.

매개변수

이름설명
data인코딩된 항목입니다. length가 0일 때만 NULL일 수 있으며, 이 경우 #PDCOMM_TRUNCATED를 보고합니다.
lengthdata의 바이트 수입니다. 모든 바이트는 하나의 항목에 속해야 합니다.
options적용할 한도입니다. struct_size는 sizeof(PdcommSecsLimits) 이상이어야 합니다.
out새 항목을 받습니다. 먼저 NULL로 설정되므로 실패하면 항상 NULL입니다.
error_offset선택 사항입니다. 시작할 때 0으로 설정되며, 디코딩 오류가 나면 첫 번째 누락 바이트가 아니라 실패한 필드가 시작하는 바이트 오프셋을 받습니다. NULL일 수 있습니다.

반환값

성공하면 #PDCOMM_OK를 반환합니다. out 또는 options가 NULL이거나, options->struct_size가 너무 작거나, length가 0이 아닌데 data가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 입력이 항목 중간에서 끝나면 #PDCOMM_TRUNCATED를 반환합니다. 인코딩이 잘못되었거나 항목 뒤에 바이트가 남아 있으면 #PDCOMM_INVALID_DATA를 반환합니다. options의 한도를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 그 밖에 #PDCOMM_ALLOCATION_FAILED 또는 #PDCOMM_INTERNAL_ERROR를 반환합니다.

참고

  • 소유권: pdcomm_secs_destroy()로 항목을 해제합니다.
  • out과 error_offset은 서로 겹치거나 data 또는 options와 겹치면 안 됩니다.