659 |
659 |
660 memset(pheader, 0, sizeof(struct FileMapHeader)); |
660 memset(pheader, 0, sizeof(struct FileMapHeader)); |
661 // read FileMapHeader |
661 // read FileMapHeader |
662 size_t n = read(fd, pheader, sizeof(struct FileMapHeader)); |
662 size_t n = read(fd, pheader, sizeof(struct FileMapHeader)); |
663 if (n != sizeof(struct FileMapHeader)) { |
663 if (n != sizeof(struct FileMapHeader)) { |
664 free(pheader); |
|
665 close(fd); |
|
666 char errMsg[ERR_MSG_SIZE]; |
664 char errMsg[ERR_MSG_SIZE]; |
667 sprintf(errMsg, "unable to read shared archive file map header from %s", classes_jsa); |
665 sprintf(errMsg, "unable to read shared archive file map header from %s", classes_jsa); |
|
666 close(fd); |
|
667 free(pheader); |
668 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
668 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
669 } |
669 } |
670 |
670 |
671 // check file magic |
671 // check file magic |
672 if (pheader->_magic != 0xf00baba2) { |
672 if (pheader->_magic != 0xf00baba2) { |
673 free(pheader); |
|
674 close(fd); |
|
675 char errMsg[ERR_MSG_SIZE]; |
673 char errMsg[ERR_MSG_SIZE]; |
676 sprintf(errMsg, "%s has bad shared archive magic 0x%x, expecting 0xf00baba2", |
674 sprintf(errMsg, "%s has bad shared archive magic 0x%x, expecting 0xf00baba2", |
677 classes_jsa, pheader->_magic); |
675 classes_jsa, pheader->_magic); |
|
676 close(fd); |
|
677 free(pheader); |
678 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
678 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
679 } |
679 } |
680 |
680 |
681 // check version |
681 // check version |
682 if (pheader->_version != CURRENT_ARCHIVE_VERSION) { |
682 if (pheader->_version != CURRENT_ARCHIVE_VERSION) { |
683 free(pheader); |
|
684 close(fd); |
|
685 char errMsg[ERR_MSG_SIZE]; |
683 char errMsg[ERR_MSG_SIZE]; |
686 sprintf(errMsg, "%s has wrong shared archive version %d, expecting %d", |
684 sprintf(errMsg, "%s has wrong shared archive version %d, expecting %d", |
687 classes_jsa, pheader->_version, CURRENT_ARCHIVE_VERSION); |
685 classes_jsa, pheader->_version, CURRENT_ARCHIVE_VERSION); |
|
686 close(fd); |
|
687 free(pheader); |
688 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
688 THROW_NEW_DEBUGGER_EXCEPTION_(errMsg, 1); |
689 } |
689 } |
690 |
690 |
691 if (_libsaproc_debug) { |
691 if (_libsaproc_debug) { |
692 for (int m = 0; m < NUM_SHARED_MAPS; m++) { |
692 for (int m = 0; m < NUM_SHARED_MAPS; m++) { |