From: <enl...@li...> - 2003-10-31 20:23:56
|
Enlightenment CVS committal Author : mej Project : eterm Module : libast Dir : eterm/libast/src Modified Files: str.c Log Message: Fri Oct 31 15:21:53 2003 Michael Jennings (mej) Fixes to string class find/splice routines. Added SPIF_DEFINE_PROPERTY_FUNC_NONOBJ() macro for defining get/set methods of a property which is not an object. It should be used in place of SPIF_DEFINE_PROPERTY_FUNC() for spif_*_t types that are not objects, such as spif_int32_t and spif_sockport_t. =================================================================== RCS file: /cvsroot/enlightenment/eterm/libast/src/str.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- str.c 30 Oct 2003 23:13:53 -0000 1.20 +++ str.c 31 Oct 2003 20:23:25 -0000 1.21 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: str.c,v 1.20 2003/10/30 23:13:53 mej Exp $"; +static const char cvs_ident[] = "$Id: str.c,v 1.21 2003/10/31 20:23:25 mej Exp $"; #ifdef HAVE_CONFIG_H # include <config.h> @@ -308,27 +308,51 @@ size_t spif_str_index(spif_str_t self, spif_char_t c) { - return (size_t) ((long) (index(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), c)) - (long) (SPIF_STR_STR(self))); + char *tmp = index(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), c); + + if (tmp) { + return SPIF_CAST_C(size_t) (SPIF_CAST_C(long) tmp - SPIF_CAST_C(long) (SPIF_STR_STR(self))); + } else { + return SPIF_CAST_C(size_t) (self->len); + } } size_t spif_str_rindex(spif_str_t self, spif_char_t c) { - return (size_t) ((long) (rindex(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), c)) - (long) (SPIF_STR_STR(self))); + char *tmp = rindex(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), c); + + if (tmp) { + return SPIF_CAST_C(size_t) (SPIF_CAST_C(long) tmp - SPIF_CAST_C(long) (SPIF_STR_STR(self))); + } else { + return SPIF_CAST_C(size_t) (self->len); + } } size_t spif_str_find(spif_str_t self, spif_str_t other) { - return (size_t) ((long) (strstr(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), - SPIF_CONST_CAST_C(char *) SPIF_STR_STR(other))) - (long) (SPIF_STR_STR(self))); + char *tmp = strstr(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), + SPIF_CONST_CAST_C(char *) SPIF_STR_STR(other)); + + if (tmp) { + return SPIF_CAST_C(size_t) (SPIF_CAST_C(long) tmp - SPIF_CAST_C(long) (SPIF_STR_STR(self))); + } else { + return SPIF_CAST_C(size_t) (self->len); + } } size_t spif_str_find_from_ptr(spif_str_t self, spif_charptr_t other) { - return (size_t) ((long) (strstr(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), - SPIF_CONST_CAST_C(char *) other)) - (long) (SPIF_STR_STR(self))); + char *tmp = strstr(SPIF_CONST_CAST_C(char *) SPIF_STR_STR(self), + SPIF_CONST_CAST_C(char *) other); + + if (tmp) { + return SPIF_CAST_C(size_t) (SPIF_CAST_C(long) tmp - SPIF_CAST_C(long) (SPIF_STR_STR(self))); + } else { + return SPIF_CAST_C(size_t) (self->len); + } } spif_str_t @@ -430,10 +454,12 @@ spif_charptr_t tmp, ptmp; size_t newsize; - newsize = self->len + ((SPIF_OBJ_ISNULL(other)) ? (0) : (other->len)) - cnt + 1; + newsize = self->len + ((SPIF_STR_ISNULL(other)) ? (0) : (other->len)) - cnt + 1; ptmp = tmp = SPIF_CAST(charptr) MALLOC(newsize); - memcpy(tmp, self->s, idx); - ptmp += idx; + if (idx > 0) { + memcpy(tmp, self->s, idx); + ptmp += idx; + } if (!SPIF_OBJ_ISNULL(other)) { memcpy(ptmp, other->s, other->len); ptmp += other->len; @@ -458,8 +484,10 @@ len = (other ? strlen(SPIF_CONST_CAST_C(char *) other) : 0); newsize = self->len + len - cnt + 1; ptmp = tmp = SPIF_CAST(charptr) MALLOC(newsize); - memcpy(tmp, self->s, idx); - ptmp += idx; + if (idx > 0) { + memcpy(tmp, self->s, idx); + ptmp += idx; + } if (len) { memcpy(ptmp, other, len); ptmp += len; |