xml解析コードをチェックする単体テストを作成しようとしています。ユニットテストは、shm_openを使用してメモリ内のxmlドキュメントにファイル記述子を作成し、それをxmlTextReaderForFd()に渡します。しかし、後続のxmlTextReaderRead()で "ドキュメントの最後に余分なコンテンツ"エラーが表示されます。解析コードは、実際のファイルから作成されたファイル記述子で正常に動作します(shm_openを使ってバイトごとに比較しました。これはまったく同じバイトセットです)。なぜファイル記述子でlibxml2が窒息するのですか? shm_openで?libxml2を使用してshm_openで作成したファイルハンドルから読み取るときに「ドキュメントの最後の余分な内容」エラー
void unitTest() {
int fd = shm_open("/temporary", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
char *pText = "<?xml version=\"1.0\"?><foo></foo>";
write(fd, pText, strlen(pText) + 1);
lseek(fd, 0, SEEK_SET);
xmlTextReaderPtr pReader = xmlReaderForFd(
fd, // file descriptor
"/temporary", // base uri
NULL, // encoding
0); // options
int result = xmlTextReaderRead(pReader);
// result is -1
// Get this error at console:
// /temporary:1: parser error : Extra content at the end of the document
// <?xml version="1.0"?><foo></foo>
// ^
}