Author: sebor Date: Wed Apr 2 15:47:22 2008 New Revision: 644098 URL: http://svn.apache.org/viewvc?rev=644098&view=rev Log: 2008-04-02 Martin Sebor <[EMAIL PROTECTED]>
* tests/src/braceexp.cpp (UChar): Added a convenience typedef. (_rw_find_match, _rw_brace_graph::build_character_sequence): Cast char to UChar before passing it to isspace, islower, and isupper to avoid undefined behavior on sign extension. (_rw_string_buffer, build_and_expand, _rw_brace_node_buffer, _rw_brace_node, reset_for_reuse, get_new_node, brace_expand_write, build_integer_sequence, brace_expand, rw_brace_expand, rw_shell_expand): Used size_t instead of _RWSTD_SIZE_T for readability. Modified: stdcxx/trunk/tests/src/braceexp.cpp Modified: stdcxx/trunk/tests/src/braceexp.cpp URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/braceexp.cpp?rev=644098&r1=644097&r2=644098&view=diff ============================================================================== --- stdcxx/trunk/tests/src/braceexp.cpp (original) +++ stdcxx/trunk/tests/src/braceexp.cpp Wed Apr 2 15:47:22 2008 @@ -35,6 +35,10 @@ #include <rw_braceexp.h> +// for convenience +typedef unsigned char UChar; + + // search `beg' to `end' for a character that `fn' // returns non-zero. static const char* @@ -46,7 +50,7 @@ for (/**/; beg < end; ++beg) { - const bool is_space = 0 != isspace (*beg); + const bool is_space = 0 != isspace (UChar (*beg)); if (!is_escaped && match_space == is_space) { return beg; @@ -203,7 +207,7 @@ struct _rw_string_buffer { - _rw_string_buffer (char* s, _RWSTD_SIZE_T n) + _rw_string_buffer (char* s, size_t n) : capacity_ (n) , length_ (0) , buffer_ (s) @@ -214,12 +218,12 @@ // destructor does not deallocate memory // user expected to do that - _RWSTD_SIZE_T capacity_; - _RWSTD_SIZE_T length_; + size_t capacity_; + size_t length_; char* buffer_; bool owned_; - bool append (const char* s, _RWSTD_SIZE_T n); + bool append (const char* s, size_t n); private: // not implemented @@ -242,7 +246,7 @@ // it is not equal to `buf'. char* build_and_expand (const char* beg, const char* end, - char* buf, _RWSTD_SIZE_T len, char sep); + char* buf, size_t len, char sep); private: @@ -256,7 +260,7 @@ struct _rw_brace_node { const char* str_; - _RWSTD_SIZE_T len_; + size_t len_; _rw_brace_node* sibling_; _rw_brace_node* child_; @@ -312,7 +316,7 @@ struct _rw_brace_node_buffer { _rw_brace_node nodes_ [size]; - _RWSTD_SIZE_T used_; // number of nodes_ used in this buffer + size_t used_; // number of nodes_ used in this buffer _rw_brace_node_buffer* next_; }; @@ -324,7 +328,7 @@ // code for handling integer ranges - void reset_for_reuse (char* buf, _RWSTD_SIZE_T len); + void reset_for_reuse (char* buf, size_t len); void free_range_buffers (); // this is essentially a rope with a variable length payload @@ -400,7 +404,7 @@ char* _rw_brace_graph::build_and_expand (const char* beg, const char* end, - char* buf, _RWSTD_SIZE_T len, char sep) + char* buf, size_t len, char sep) { assert (beg != 0); assert (end != 0); @@ -428,8 +432,7 @@ // kill the last seperator with a null terminator else if (string_.buffer_) { - const _RWSTD_SIZE_T pos - = string_.length_ < 1 ? 0 : string_.length_ - 1; + const size_t pos = string_.length_ < 1 ? 0 : string_.length_ - 1; string_.buffer_ [pos] = '\0'; } @@ -453,7 +456,7 @@ // otherwise we allocate one else { - const _RWSTD_SIZE_T sz = sizeof (_rw_brace_node_buffer); + const size_t sz = sizeof (_rw_brace_node_buffer); nodes_->next_ = (_rw_brace_node_buffer*)malloc (sz); if (!nodes_->next_) @@ -545,7 +548,7 @@ return 0; // failed to parse an integer value // number of characters needed to represent ibeg - const _RWSTD_SIZE_T ibeg_dig = (pend - beg); + const size_t ibeg_dig = (pend - beg); // make sure we have two dots beg = pend; @@ -561,7 +564,7 @@ return 0; // failed to parse an integer value // number of characters needed to represent iend - const _RWSTD_SIZE_T iend_dig = (pend - beg); + const size_t iend_dig = (pend - beg); // make sure we have an end brace beg = pend; @@ -579,18 +582,18 @@ // maximum length of the string representation of a single // integer in the range - const _RWSTD_SIZE_T len = (ibeg_dig < iend_dig ? iend_dig : ibeg_dig); + const size_t len = (ibeg_dig < iend_dig ? iend_dig : ibeg_dig); // number of integers in the range [ibeg, iend] - const _RWSTD_SIZE_T num = 1 + (iend - ibeg) * dir; + const size_t num = 1 + (iend - ibeg) * dir; // maximum number of bytes needed to represent all of the numbers // and a single null - const _RWSTD_SIZE_T cnt = 1 + (num * len); + const size_t cnt = 1 + (num * len); // number of bytes we have to allocate, cnt of which is data // and the rest is to allow us to chain these buffers together - const _RWSTD_SIZE_T bsz = cnt + sizeof (_rw_range_buffer); + const size_t bsz = cnt + sizeof (_rw_range_buffer); // allocate a rope segment big enough for all of the strings // we need to keep. @@ -682,8 +685,10 @@ char cend = beg [4]; // only works if sequence characters are both lowercase or uppercase. - const int both_are_lower = islower (cbeg) && islower (cend); - const int both_are_upper = isupper (cbeg) && isupper (cend); + const int both_are_lower = + islower (UChar (cbeg)) && islower (UChar (cend)); + const int both_are_upper = + isupper (UChar (cbeg)) && isupper (UChar (cend)); if (! (both_are_lower || both_are_upper)) return 0; @@ -841,7 +846,7 @@ return first_child; } -void _rw_brace_graph::reset_for_reuse (char* buf, _RWSTD_SIZE_T len) +void _rw_brace_graph::reset_for_reuse (char* buf, size_t len) { node_cache_.used_ = 0; nodes_ = &node_cache_; @@ -882,9 +887,9 @@ bool is_escaped = false; const char* beg = context->node_->str_; - const _RWSTD_SIZE_T len = context->node_->len_; + const size_t len = context->node_->len_; - for (_RWSTD_SIZE_T n = 0; n < len; ++n, ++beg) { + for (size_t n = 0; n < len; ++n, ++beg) { is_escaped = !is_escaped && (*beg == '\\'); if (!is_escaped) { @@ -903,14 +908,14 @@ if (!self->node_ || !self->node_->sibling_ && !self->node_->child_) { - const _RWSTD_SIZE_T length_before = string_.length_; + const size_t length_before = string_.length_; // use recursion again to walk back to the root the graph and // write each contexts data as we unwind back toward the leaf if (!brace_expand_write (self)) return false; - const _RWSTD_SIZE_T length_after = string_.length_; + const size_t length_after = string_.length_; // don't write a seperator if we wrote no data if (length_before != length_after && !string_.append (&sep, 1)) @@ -933,15 +938,15 @@ return true; } -bool _rw_string_buffer::append (const char* s, _RWSTD_SIZE_T n) +bool _rw_string_buffer::append (const char* s, size_t n) { - const _RWSTD_SIZE_T new_len = length_ + n; + const size_t new_len = length_ + n; // not enough space, grow buf if (! (new_len < capacity_)) { // buf grows in 256 byte blocks - _RWSTD_SIZE_T new_cap = capacity_; + size_t new_cap = capacity_; while (! (new_len < new_cap)) new_cap += 256; @@ -979,8 +984,8 @@ // char* rw_brace_expand (const char* brace_expr, - _RWSTD_SIZE_T sz, - char* s, _RWSTD_SIZE_T n, char sep) + size_t sz, + char* s, size_t n, char sep) { if (!brace_expr) return 0; @@ -1002,8 +1007,8 @@ // -char* rw_shell_expand (const char* shell_expr, _RWSTD_SIZE_T sz, - char* s, _RWSTD_SIZE_T n, char sep) +char* rw_shell_expand (const char* shell_expr, size_t sz, + char* s, size_t n, char sep) { if (!shell_expr) return 0; @@ -1058,7 +1063,7 @@ for (/**/; *term; term += strlen (term) + 1) ; - const _RWSTD_SIZE_T len = exp < term ? (term - exp) - 1 : 0; + const size_t len = exp < term ? (term - exp) - 1 : 0; if (is_first_expand) app = result.append (exp, len);