diff options
Diffstat (limited to 'CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp')
-rw-r--r-- | CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp | 206 |
1 files changed, 88 insertions, 118 deletions
diff --git a/CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp b/CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp index 5969a12273e..0acfc785dca 100644 --- a/CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp +++ b/CIAO/DAnCE/tools/Convert_Plan/Convert_Plan_Impl.cpp @@ -1,7 +1,7 @@ // $Id$ #include "Convert_Plan_Impl.h" -#include "ace/OS_NS_stdio.h" +#include "ace/FILE_Connector.h" #include "tao/CDR.h" #include "Config_Handlers/XML_File_Intf.h" #include "Logger/Log_Macros.h" @@ -11,12 +11,6 @@ namespace DAnCE Deployment::DeploymentPlan * Convert_Plan::read_xml_plan (const char *filename) { - if (!filename) - { - DANCE_ERROR (2, (LM_WARNING, DLINFO ACE_TEXT ("Convert_Plan::read_xml_plan - ") - ACE_TEXT ("Passed a null pointer, returning.\n"))); - } - CIAO::Config_Handlers::XML_File_Intf xml_intf (filename); xml_intf.add_search_path ("ACE_ROOT", "/docs/schema/"); xml_intf.add_search_path ("TAO_ROOT", "/docs/schema/"); @@ -29,54 +23,42 @@ namespace DAnCE Deployment::DeploymentPlan * Convert_Plan::read_cdr_plan (const char *filename) { - if (!filename) + ACE_FILE_Addr file_addr (ACE_sap_any_cast (ACE_FILE_Addr &)); + + if (filename) + file_addr.set (filename); + else { - DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Convert_Plan::read_cdr_plan - ") - ACE_TEXT ("Passed a null pointer, returning.\n"))); + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::read_cdr_plan - passed nil file name\n")); return 0; } - - FILE *file = ACE_OS::fopen (filename, "r"); - - if (!file) + + ACE_FILE_Connector conn; + ACE_FILE_IO file; + + if (conn.connect (file, + file_addr, + 0, + ACE_Addr::sap_any, + 0, + O_RDONLY, + ACE_DEFAULT_FILE_PERMS == -1)) { - DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Convert_Plan::read_cdr_plan - ") - ACE_TEXT ("Error: Unable to open file for reasding %C\n"), + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::read_cdr_plan - unable to read file %p\n", filename)); return 0; } - - char byte_order; - ssize_t n = ACE_OS::fread (&byte_order, sizeof (byte_order), 1, file); - - if (n == 0) - { - DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Convert_Plan::read_cdr_plan - ") - ACE_TEXT ("Byte order not written to file\n"))); - ACE_OS::fclose (file); - return 0; - } - - ACE_UINT32 bufsize (0); - n = ACE_OS::fread (&bufsize, sizeof (bufsize), 1, file); - - if (n == 0) + + ACE_FILE_Info info; + if (file.get_info (info) == -1) { - DANCE_ERROR (1, (LM_ERROR, DLINFO ACE_TEXT ("Convert_Plan::read_cdr_plan - ") - ACE_TEXT ("Plan size not written to file\n"))); - ACE_OS::fclose (file); + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::read_cdr_plan - unable to determine file size %p\n", + filename)); return 0; } - - if (byte_order != ACE_CDR_BYTE_ORDER) - { - DANCE_DEBUG (6, (LM_DEBUG, DLINFO ACE_TEXT ("Convert_Plan::read_cdr_plan - ") - ACE_TEXT ("Plan appears encoded in a different endian.\n"))); - ACE_CDR::swap_4 (reinterpret_cast<char *> (&bufsize), - reinterpret_cast<char *> (&bufsize)); - } - - + + ACE_OFF_T bufsize = info.size_ - 1; + char *buffer = 0; ACE_NEW_RETURN (buffer, char[bufsize], @@ -85,17 +67,25 @@ namespace DAnCE #if defined (ACE_INITIALIZE_MEMORY_BEFORE_USE) ACE_OS::memset(buffer, 0, sizeof (buffer)); #endif /* ACE_INITIALIZE_MEMORY_BEFORE_USE */ - + // Make sure <buffer> is released automagically. ACE_Auto_Basic_Array_Ptr<char> b (buffer); - n = ACE_OS::fread (buffer, 1, bufsize, file); - ACE_OS::fclose (file); - - if (n != bufsize) + if (file.seek (0, SEEK_SET) == -1) + { + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::read_cdr_plan - seek failed %p\n", + filename)); + return 0; + } + + char byte_order; + ssize_t size = file.recv (&byte_order, 1); + size = file.recv (buffer, bufsize); + + if (size != bufsize) { DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::read_cdr_plan - read %u bytes " - "instead of %u bytes\n", n, bufsize)); + "instead of %u bytes\n", size, bufsize)); return 0; } @@ -107,24 +97,17 @@ namespace DAnCE input_cdr.reset_byte_order ((int) byte_order); DANCE_DEBUG (9, (LM_TRACE, DLINFO "Convert_Plan_Impl::read_cdr_plan - " - "Reading file %C in %s endian format with size %u\n", - filename, - ACE_CDR_BYTE_ORDER ? ACE_TEXT("little") : ACE_TEXT("big"), - bufsize)); + "Reading file %C in %s endian format\n", + filename, ACE_CDR_BYTE_ORDER ? ACE_TEXT("little") : ACE_TEXT("big"))); Deployment::DeploymentPlan *retval; - + ACE_NEW_RETURN (retval, Deployment::DeploymentPlan (), 0); - if (!(input_cdr >> *retval)) - { - DANCE_ERROR (1, (LM_ERROR, ACE_TEXT ("Convert_Plan_Impl::read_cdr_plan - ") - ACE_TEXT ("Failed to demarshal plan\n"))); - delete retval; - return 0; - } + input_cdr >> *retval; + file.close (); return retval; } @@ -132,67 +115,54 @@ namespace DAnCE bool Convert_Plan::write_cdr_plan (const char *output_filename, Deployment::DeploymentPlan &plan) { - if (!output_filename) - { - DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::write_cdr_plan - passed nil file name\n")); - return false; - } + ACE_FILE_Addr file_addr (ACE_sap_any_cast (ACE_FILE_Addr &)); - TAO_OutputCDR output_cdr; - - if (output_cdr << plan) + if (output_filename) + file_addr.set (output_filename); + else { - FILE *file = ACE_OS::fopen (output_filename, "w"); - - if (file == 0) - { - DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::write_cdr_plan - failed to open file %C\n", - output_filename)); - return false; - } - - // First write the byte order - char byte_order = ACE_CDR_BYTE_ORDER; - size_t n = ACE_OS::fwrite (&byte_order, sizeof(byte_order), 1, file); - - // Next write the length - ACE_UINT32 cdr_length (output_cdr.total_length ()); - n += ACE_OS::fwrite (&cdr_length, sizeof (cdr_length), 1, file); - - DANCE_DEBUG (9, (LM_TRACE, DLINFO "Convert_Plan_Impl::write_cdr_plan - " - ACE_TEXT ("Writing plan to file %s in %s endian format and length %u\n"), - output_filename, - ACE_CDR_BYTE_ORDER ? ACE_TEXT("little") : ACE_TEXT("big"), - cdr_length)); - - // Now write the IDL structure. - for (const ACE_Message_Block *output_mb = output_cdr.begin (); - output_mb != 0; - output_mb = output_mb->cont ()) - { - n += ACE_OS::fwrite (output_mb->rd_ptr (), - 1, - output_mb->length (), - file); - } - - ACE_OS::fclose (file); - - size_t total_size = sizeof (byte_order) + sizeof (cdr_length) + cdr_length; - if (n != total_size) - { - DANCE_ERROR (1, (LM_ERROR, ACE_TEXT ("Convert_Plan::write_cdr_plan - ") - ACE_TEXT ("Error: Unexpected number of bytes written: %u instead of %u\n"), - n, total_size)); - } + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::write_cdr_plan - passed nil file name\n")); + return 0; } - else + + ACE_FILE_Connector conn; + ACE_FILE_IO file; + + if (conn.connect (file, + file_addr, + 0, + ACE_Addr::sap_any, + 0, + O_RDWR | O_CREAT, + ACE_DEFAULT_FILE_PERMS == -1)) { - DANCE_ERROR (1, (LM_ERROR, ACE_TEXT ("Convert_Plan::write_cdr_plan - ") - ACE_TEXT ("Failed to mashal deployment plan\n"))); - return false; + DANCE_ERROR (1, (LM_ERROR, DLINFO "Convert_Plan_Impl::write_cdr_plan - unable to write file %p\n", + output_filename)); + return 0; } + char byte_order = ACE_CDR_BYTE_ORDER; + size_t n = file.send (&byte_order, 1); + + TAO_OutputCDR output_cdr (0, ACE_CDR_BYTE_ORDER, 0, 0, 0, + ACE_DEFAULT_CDR_MEMCPY_TRADEOFF, + ACE_CDR_GIOP_MAJOR_VERSION, + ACE_CDR_GIOP_MINOR_VERSION); + + output_cdr << plan; + + const ACE_Message_Block *output_mb = output_cdr.begin (); + + DANCE_DEBUG (9, (LM_TRACE, DLINFO "Convert_Plan_Impl::write_cdr_plan - " + ACE_TEXT ("Writing plan to file %s in %s endian format\n"), + output_filename, + ACE_CDR_BYTE_ORDER ? ACE_TEXT("little") : ACE_TEXT("big"))); + + n = file.send (output_mb->rd_ptr (), + output_mb->length ()); + + file.close (); + return true; } } |