From 27aa5407603c20a19c93f329d9e40c6c197e914b Mon Sep 17 00:00:00 2001 From: Prachi Gupta Date: Wed, 27 Jul 2016 11:10:04 -0500 Subject: p9_ipl_build: take out the read for the debug file The debug file will be overwritten each iteration. Change-Id: If8aecf3b044cd3908ebc22acdcaea3f2de31d235 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27513 Tested-by: Jenkins Server Reviewed-by: Richard J. Knight Reviewed-by: Martin Gloff Reviewed-by: Prachi Gupta Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30255 Reviewed-by: Sachin Gupta --- src/import/tools/imageProcs/p9_ipl_build.C | 164 ++++++++++++++--------------- 1 file changed, 78 insertions(+), 86 deletions(-) (limited to 'src/import') diff --git a/src/import/tools/imageProcs/p9_ipl_build.C b/src/import/tools/imageProcs/p9_ipl_build.C index 15909527..b963cb60 100644 --- a/src/import/tools/imageProcs/p9_ipl_build.C +++ b/src/import/tools/imageProcs/p9_ipl_build.C @@ -248,123 +248,115 @@ int ipl_build(char* i_fnSbeImage, } else { - // open it in read mode, if it does not exist this will fail, which means - // its ok to create, otherwise we don't want to overwrite existing files. - ddSpecificImage.open(ddSpecificFileName.c_str(), std::ios::in); - - // did it open ok, if so tell the user - if(!ddSpecificImage) + do { - do + // get a filebuf pointer to make it easy to work with + std::filebuf* pbuf = sbeImageFile.rdbuf(); + + // get the file size + std::size_t sbeImageSize = pbuf->pubseekoff(0, + sbeImageFile.end, sbeImageFile.in); + + pbuf->pubseekpos(0, sbeImageFile.in); + + // allocate some space to hold the file data + sbeImage = (char*)malloc(sbeImageSize); + + if(sbeImage == NULL) { - // get a filebuf pointer to make it easy to work with - std::filebuf* pbuf = sbeImageFile.rdbuf(); + MY_ERR("Failed to allocate memory for the SBE image\n"); + rc = IMGBUILD_ERR_MEMORY; + break; + } - // get the file size - std::size_t sbeImageSize = pbuf->pubseekoff(0, - sbeImageFile.end, sbeImageFile.in); + bzero(sbeImage, sbeImageSize); - pbuf->pubseekpos(0, sbeImageFile.in); + // copy the SBE image into memory + pbuf->sgetn(sbeImage, sbeImageSize); - // allocate some space to hold the file data - sbeImage = (char*)malloc(sbeImageSize); + // validate it + rc = p9_xip_validate(sbeImage, sbeImageSize); - if(sbeImage == NULL) - { - MY_ERR("Failed to allocate memory for the SBE image\n"); - rc = IMGBUILD_ERR_MEMORY; - break; - } + if(rc) + { + MY_ERR("The SBE image copied to memory" + "failed validation rc = %d", rc); - bzero(sbeImage, sbeImageSize); + rc = IMGBUILD_INVALID_IMAGE; + break; + } - // copy the SBE image into memory - pbuf->sgetn(sbeImage, sbeImageSize); + MY_INF("SBE Image validated ok.. %p\n", sbeImage); - // validate it - rc = p9_xip_validate(sbeImage, sbeImageSize); + uint32_t l_blockSize = 0; - if(rc) - { - MY_ERR("The SBE image copied to memory" - "failed validation rc = %d", rc); + char* hwImagePtr = static_cast(i_hwImage); - rc = IMGBUILD_INVALID_IMAGE; - break; - } + rc = get_dd_level_rings_from_hw_image(hwImagePtr, + i_ddLevel, + &l_ringBlock, + l_blockSize); - MY_INF("SBE Image validated ok.. %p\n", sbeImage); + if(rc == IMGBUILD_SUCCESS) + { + // update our SBE image size to include the new block of rings + sbeImageSize += l_blockSize; - uint32_t l_blockSize = 0; + // grow our workspace + void* tmp = realloc(sbeImage, sbeImageSize); - char* hwImagePtr = static_cast(i_hwImage); + if(tmp == NULL) + { + MY_ERR("error resizing workspace..giving up errno=%d", errno); + rc = IMGBUILD_ERR_MEMORY; + break; + } - rc = get_dd_level_rings_from_hw_image(hwImagePtr, - i_ddLevel, - &l_ringBlock, - l_blockSize); + // use the new, larger space + sbeImage = static_cast(tmp); + + rc = append_ring_block_to_image(sbeImage, + sbeImageSize, + (char*)l_ringBlock, + l_blockSize); if(rc == IMGBUILD_SUCCESS) { - // update our SBE image size to include the new block of rings - sbeImageSize += l_blockSize; - - // grow our workspace - void* tmp = realloc(sbeImage, sbeImageSize); + // looks like it worked, create a debug file and write the + // customized image to it + ddSpecificImage.open(ddSpecificFileName.c_str(), std::ios::binary | std::ios::out); - if(tmp == NULL) + if(!ddSpecificImage) { - MY_ERR("error resizing workspace..giving up errno=%d", errno); - rc = IMGBUILD_ERR_MEMORY; - break; + MY_ERR("failed to open %s for writing\n", ddSpecificFileName.c_str()); + rc = IMGBUILD_ERR_FILE_ACCESS; } - - // use the new, larger space - sbeImage = static_cast(tmp); - - rc = append_ring_block_to_image(sbeImage, - sbeImageSize, - (char*)l_ringBlock, - l_blockSize); - - if(rc == IMGBUILD_SUCCESS) + else { - // looks like it worked, create a debug file and write the - // customized image to it - ddSpecificImage.open(ddSpecificFileName.c_str(), std::ios::binary | std::ios::out); - - if(!ddSpecificImage) - { - MY_ERR("failed to open %s for writing\n", ddSpecificFileName.c_str()); - rc = IMGBUILD_ERR_FILE_ACCESS; - } - else - { - std::filebuf* outbuf = ddSpecificImage.rdbuf(); + std::filebuf* outbuf = ddSpecificImage.rdbuf(); - outbuf->sputn(sbeImage, sbeImageSize); + outbuf->sputn(sbeImage, sbeImageSize); - MY_INF("DD specific file created as %s\n", ddSpecificFileName.c_str()); + MY_INF("DD specific file created as %s\n", ddSpecificFileName.c_str()); - // rewind to the beginning of the original file and write this - // into it. - pbuf->pubseekpos(0, sbeImageFile.in); + // rewind to the beginning of the original file and write this + // into it. + pbuf->pubseekpos(0, sbeImageFile.in); - pbuf->sputn(sbeImage, sbeImageSize); + pbuf->sputn(sbeImage, sbeImageSize); - } - } - else - { - MY_ERR("creating dd specific SBE image failed rc=%d\n", rc); } } + else + { + MY_ERR("creating dd specific SBE image failed rc=%d\n", rc); + } } - while(0); - - free(sbeImage); - free(l_ringBlock); } + while(0); + + free(sbeImage); + free(l_ringBlock); ddSpecificImage.close(); sbeImageFile.close(); -- cgit v1.2.1