#include <Configuration_Import_Export.h>
Inheritance diagram for ACE_Ini_ImpExp:


Public Member Functions | |
| ACE_Ini_ImpExp (ACE_Configuration &) | |
| virtual | ~ACE_Ini_ImpExp (void) |
| virtual int | import_config (const ACE_TCHAR *filename) |
| virtual int | export_config (const ACE_TCHAR *filename) |
Private Member Functions | |
| int | export_section (const ACE_Configuration_Section_Key §ion, const ACE_TString &path, FILE *out) |
| ACE_TCHAR * | squish (ACE_TCHAR *src) |
| ACE_Ini_ImpExp (const ACE_Ini_ImpExp &) | |
| ACE_Ini_ImpExp & | operator= (const ACE_Ini_ImpExp &) |
This method allows for lines in the .ini or .conf file like this:
TimeToLive = 100 Delay = FALSE Flags = FF34 Heading = "ACE - Adaptive Communication Environment"
(note leading whitespace (tabs) in examples below)
SeekIndex = 14 TraceLevel = 6 # Can comment lines like this Justification = left_justified
The caller can then retrieve the string with the regular function and convert the string to the desired data type.
Definition at line 162 of file Configuration_Import_Export.h.
|
|
Construction Definition at line 375 of file Configuration_Import_Export.cpp.
00376 : ACE_Config_ImpExp_Base (config) 00377 { 00378 } |
|
|
Destructor Definition at line 380 of file Configuration_Import_Export.cpp.
00381 {
00382 }
|
|
|
|
|
|
This method exports the entire configuration database to filename. Once the file is opened this method calls export_section() passing the root section. Implements ACE_Config_ImpExp_Base. Definition at line 486 of file Configuration_Import_Export.cpp. References ACE_LIB_TEXT, ACE_TCHAR, export_section(), ACE_OS::fclose(), ACE_OS::fopen(), and ACE_Configuration::root_section().
00487 {
00488 if (0 == filename)
00489 {
00490 errno = EINVAL;
00491 return -1;
00492 }
00493 int result = -1;
00494
00495 FILE* out = ACE_OS::fopen (filename, ACE_LIB_TEXT ("w"));
00496 if (out)
00497 {
00498 result = this->export_section (config_.root_section (),
00499 ACE_LIB_TEXT (""),
00500 out);
00501 ACE_OS::fclose (out);
00502 }
00503 return result;
00504 }
|
|
||||||||||||||||
|
Method provided by derived classes in order to write one section to the file specified. Called by export_config() when exporting the entire configuration object. Definition at line 511 of file Configuration_Import_Export.cpp. References ACE_LIB_TEXT, ACE_TCHAR, ACE_TString, ACE_Configuration::enumerate_sections(), ACE_Configuration::enumerate_values(), ACE_String_Base< CHAR >::fast_rep(), ACE_OS::fputs(), ACE_Configuration::get_binary_value(), ACE_Configuration::get_integer_value(), ACE_Configuration::get_string_value(), ACE_String_Base< CHAR >::length(), ACE_Configuration::open_section(), and ACE_OS::sprintf(). Referenced by export_config().
00514 {
00515 // don't export the root
00516 if (path.length ())
00517 {
00518 // Write out the section header
00519 ACE_TString header = ACE_LIB_TEXT ("[");
00520 header += path;
00521 header += ACE_LIB_TEXT ("]\n");
00522 if (ACE_OS::fputs (header.fast_rep (), out) < 0)
00523 return -1;
00524 // Write out each value
00525 int index = 0;
00526 ACE_TString name;
00527 ACE_Configuration::VALUETYPE type;
00528 ACE_TString line;
00529 ACE_TCHAR int_value[32];
00530 ACE_TCHAR bin_value[3];
00531 void* binary_data;
00532 size_t binary_length;
00533 ACE_TString string_value;
00534 while (!config_.enumerate_values (section, index, name, type))
00535 {
00536 line = name + ACE_LIB_TEXT ("=");
00537 switch (type)
00538 {
00539 case ACE_Configuration::INTEGER:
00540 {
00541 u_int value;
00542 if (config_.get_integer_value (section, name.fast_rep (), value))
00543 return -2;
00544 ACE_OS::sprintf (int_value, ACE_LIB_TEXT ("%08x"), value);
00545 line += int_value;
00546 break;
00547 }
00548 case ACE_Configuration::STRING:
00549 {
00550 if (config_.get_string_value (section,
00551 name.fast_rep (),
00552 string_value))
00553 return -2;
00554 line += string_value;
00555 break;
00556 }
00557 #ifdef _WIN32
00558 case ACE_Configuration::INVALID:
00559 break; // JDO added break. Otherwise INVALID is processed
00560 // like BINARY. If that's correct, please remove the
00561 // break and these comments
00562 #endif
00563 case ACE_Configuration::BINARY:
00564 {
00565 // not supported yet - maybe use BASE64 codeing?
00566 if (config_.get_binary_value (section,
00567 name.fast_rep (),
00568 binary_data,
00569 binary_length))
00570 return -2;
00571 line += ACE_LIB_TEXT ("\"");
00572 unsigned char* ptr = (unsigned char*)binary_data;
00573 while (binary_length)
00574 {
00575 if (ptr != binary_data)
00576 {
00577 line += ACE_LIB_TEXT (",");
00578 }
00579 ACE_OS::sprintf (bin_value, ACE_LIB_TEXT ("%02x"), *ptr);
00580 line += bin_value;
00581 --binary_length;
00582 ++ptr;
00583 }
00584 line += ACE_LIB_TEXT ("\"");
00585 delete [] (char *) binary_data;
00586 break;
00587 }
00588 default:
00589 return -3;
00590
00591 }// end switch on type
00592
00593 line += ACE_LIB_TEXT ("\n");
00594 if (ACE_OS::fputs (line.fast_rep (), out) < 0)
00595 return -4;
00596 index++;
00597 }// end while enumerating values
00598 }
00599 // Export all sub sections
00600 int index = 0;
00601 ACE_TString name;
00602 ACE_Configuration_Section_Key sub_key;
00603 ACE_TString sub_section;
00604 while (!config_.enumerate_sections (section, index, name))
00605 {
00606 ACE_TString sub_section (path);
00607 if (path.length ())
00608 sub_section += ACE_LIB_TEXT ("\\");
00609 sub_section += name;
00610 if (config_.open_section (section, name.fast_rep (), 0, sub_key))
00611 return -5;
00612 if (export_section (sub_key, sub_section.fast_rep (), out))
00613 return -6;
00614 index++;
00615 }
00616 return 0;
00617
00618 }
|
|
|
Imports the configuration database from filename. No existing data is removed. Implements ACE_Config_ImpExp_Base. Definition at line 386 of file Configuration_Import_Export.cpp. References ACE_LIB_TEXT, ACE_TCHAR, ACE_Configuration::expand_path(), ACE_OS::fclose(), ACE_OS::fgets(), ACE_OS::fopen(), ACE_Configuration::root_section(), ACE_Configuration::set_string_value(), squish(), ACE_OS::strchr(), ACE_OS::strlen(), and ACE_OS::strrchr().
00387 {
00388 if (0 == filename)
00389 {
00390 errno = EINVAL;
00391 return -1;
00392 }
00393 FILE* in = ACE_OS::fopen (filename, ACE_LIB_TEXT ("r"));
00394 if (!in)
00395 return -1;
00396
00397 // @@ Make this a dynamic size!
00398 ACE_TCHAR buffer[4096];
00399 ACE_Configuration_Section_Key section;
00400 while (ACE_OS::fgets (buffer, sizeof buffer, in))
00401 {
00402 ACE_TCHAR *line = this->squish (buffer);
00403 // Check for a comment and blank line
00404 if (line[0] == ACE_LIB_TEXT (';') ||
00405 line[0] == ACE_LIB_TEXT ('#') ||
00406 line[0] == '\0')
00407 continue;
00408
00409 if (line[0] == ACE_LIB_TEXT ('['))
00410 {
00411 // We have a new section here, strip out the section name
00412 ACE_TCHAR* end = ACE_OS::strrchr (line, ACE_LIB_TEXT (']'));
00413 if (!end)
00414 {
00415 ACE_OS::fclose (in);
00416 return -3;
00417 }
00418 *end = 0;
00419
00420 if (config_.expand_path (config_.root_section (),
00421 line + 1,
00422 section,
00423 1))
00424 {
00425 ACE_OS::fclose (in);
00426 return -3;
00427 }
00428
00429 continue;
00430 }
00431
00432 // We have a line; name ends at equal sign.
00433 ACE_TCHAR *end = ACE_OS::strchr (line, ACE_LIB_TEXT ('='));
00434 if (end == 0) // No '='
00435 {
00436 ACE_OS::fclose (in);
00437 return -3;
00438 }
00439 *end++ = '\0';
00440 ACE_TCHAR *name = this->squish (line);
00441 #if 0
00442 if (ACE_OS::strlen (name) == 0) // No name; just an '='
00443 {
00444 ACE_OS::fclose (in);
00445 return -3;
00446 }
00447 #endif
00448 // Now find the start of the value
00449 ACE_TCHAR *value = this->squish (end);
00450 size_t value_len = ACE_OS::strlen (value);
00451 if (value_len > 0)
00452 {
00453 // ACE 5.2 (and maybe earlier) exported strings may be enclosed
00454 // in quotes. If string is quote-delimited, strip the quotes.
00455 // Newer exported files don't have quote delimiters.
00456 if (value[0] == ACE_LIB_TEXT ('"') &&
00457 value[value_len - 1] == ACE_LIB_TEXT ('"'))
00458 {
00459 // Strip quotes off both ends.
00460 value[value_len - 1] = '\0';
00461 value++;
00462 }
00463 }
00464
00465 if (config_.set_string_value (section, name, value))
00466 {
00467 ACE_OS::fclose (in);
00468 return -4;
00469 }
00470 } // end while fgets
00471
00472 if (ferror (in))
00473 {
00474 ACE_OS::fclose (in);
00475 return -1;
00476 }
00477
00478 ACE_OS::fclose (in);
00479 return 0;
00480 }
|
|
|
|
|
|
Method to squish leading and trailing whitespaces in a string. Whitespace is defined as: spaces (' '), tabs ('\t') or cr/lf. Returns a pointer to the first non-whitespace character in the buffer provided, or a pointer to the terminating null if the string is all whitespace. The terminating null is moved forward to the first character past the last non-whitespace. Definition at line 628 of file Configuration_Import_Export.cpp. References ACE_OS::ace_isspace(), ACE_TCHAR, and ACE_OS::strlen(). Referenced by import_config().
00629 {
00630 ACE_TCHAR *cp = 0;
00631
00632 if (src == 0)
00633 return 0;
00634
00635 // Start at the end and work backwards over all whitespace.
00636 for (cp = src + ACE_OS::strlen (src) - 1;
00637 cp != src;
00638 --cp)
00639 if (!ACE_OS::ace_isspace (*cp))
00640 break;
00641 cp[1] = '\0'; // Chop trailing whitespace
00642
00643 // Now start at the beginning and move over all whitespace.
00644 for (cp = src; ACE_OS::ace_isspace (*cp); ++cp)
00645 continue;
00646
00647 return cp;
00648 }
|
1.3.6