]> granicus.if.org Git - php/commitdiff
Reduced memory realocations
authorDmitry Stogov <dmitry@zend.com>
Tue, 15 Apr 2014 18:43:18 +0000 (22:43 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 15 Apr 2014 18:43:18 +0000 (22:43 +0400)
ext/date/php_date.c
ext/standard/basic_functions.c
ext/standard/browscap.c
ext/standard/dns.c
ext/standard/dns_win32.c

index 8009897b9a9448b9fdbb265db2e6a8fe85fc6f9f..68084a2f6fe2f147bcca05bede2e2b3afec0e794 100644 (file)
@@ -2204,17 +2204,15 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */
                                ZVAL_STRING(&zv, dateobj->time->tz_info->name);
                                break;
                        case TIMELIB_ZONETYPE_OFFSET: {
-                               char *tmpstr = emalloc(sizeof("UTC+05:00"));
+                               zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
                                timelib_sll utc_offset = dateobj->time->z;
 
-                               snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+                               tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
                                        utc_offset > 0 ? '-' : '+',
                                        abs(utc_offset / 60),
                                        abs((utc_offset % 60)));
 
-                               // TODO: avoid reallocation ???
-                               ZVAL_STRING(&zv, tmpstr);
-                               efree(tmpstr);
+                               ZVAL_STR(&zv, tmpstr);
                                }
                                break;
                        case TIMELIB_ZONETYPE_ABBR:
@@ -2299,16 +2297,14 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /*
                        ZVAL_STRING(&zv, tzobj->tzi.tz->name);
                        break;
                case TIMELIB_ZONETYPE_OFFSET: {
-                       char *tmpstr = emalloc(sizeof("UTC+05:00"));
+                       zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
 
-                       snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+                       tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
                        tzobj->tzi.utc_offset > 0 ? '-' : '+',
                        abs(tzobj->tzi.utc_offset / 60),
                        abs((tzobj->tzi.utc_offset % 60)));
 
-                       // TODO: avoid reallocation ???
-                       ZVAL_STRING(&zv, tmpstr);
-                       efree(tmpstr);
+                       ZVAL_STR(&zv, tmpstr);
                        }
                        break;
                case TIMELIB_ZONETYPE_ABBR:
@@ -3736,18 +3732,15 @@ PHP_FUNCTION(timezone_name_get)
                        RETURN_STRING(tzobj->tzi.tz->name);
                        break;
                case TIMELIB_ZONETYPE_OFFSET: {
-                       char *tmpstr = emalloc(sizeof("UTC+05:00"));
+                       zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0);
                        timelib_sll utc_offset = tzobj->tzi.utc_offset;
 
-                       snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d",
+                       tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d",
                                utc_offset > 0 ? '-' : '+',
                                abs(utc_offset / 60),
                                abs((utc_offset % 60)));
 
-                       // TODO: avoid reallocation ???
-                       RETVAL_STRING(tmpstr);
-                       efree(tmpstr);
-                       return;
+                       RETURN_STR(tmpstr);
                        }
                        break;
                case TIMELIB_ZONETYPE_ABBR:
index 0dc9874f4b7fa5aa3cf688393015ad0117891f95..9d6878817e853469881bbfccfc510eecb370a2dc 100644 (file)
@@ -3806,7 +3806,6 @@ PHP_RSHUTDOWN_FUNCTION(basic) /* {{{ */
                setlocale(LC_CTYPE, "");
                zend_update_current_locale();
        }
-//???  STR_FREE(BG(locale_string));
        if (BG(locale_string)) {
                efree(BG(locale_string));
                BG(locale_string) = NULL;
index 08a01d5dffd9e250899ed2e90708bc9d6e265514..ef49ee4d10f22179f49769f934c491732cdb1234 100644 (file)
@@ -83,7 +83,6 @@ static void convert_browscap_pattern(zval *pattern, int persistent) /* {{{ */
        zend_string *res;
        char *lc_pattern;
 
-       // TODO: overflow check???
        res = STR_SAFE_ALLOC(Z_STRLEN_P(pattern), 2, 4, persistent);
        t = res->val;
 
index 2501a03170b7095710ea82e029ccbe4a55791276..de0e24a2d7841b6da0a357aa0df677e23997ada1 100644 (file)
@@ -506,24 +506,24 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int
                        {
                                int ll = 0;
                                zval entries;
+                               zend_string *tp;
 
                                add_assoc_string(subarray, "type", "TXT");
-                               tp = emalloc(dlen + 1);
+                               tp = STR_ALLOC(dlen, 0);
                                
                                array_init(&entries);
                                
                                while (ll < dlen) {
                                        n = cp[ll];
-                                       memcpy(tp + ll , cp + ll + 1, n);
+                                       memcpy(tp->val + ll , cp + ll + 1, n);
                                        add_next_index_stringl(&entries, (char*)cp + ll + 1, n);
                                        ll = ll + n + 1;
                                }
-                               tp[dlen] = '\0';
+                               tp->val[dlen] = '\0';
+                               tp->len = dlen;
                                cp += dlen;
 
-                               // TODO: avoid reallocation ???
-                               add_assoc_stringl(subarray, "txt", (char*)tp, (dlen>0)?dlen - 1:0);
-                               efree(tp);
+                               add_assoc_str(subarray, "txt", tp);
                                add_assoc_zval(subarray, "entries", &entries);
                        }
                        break;
index 5fd0da0dea6550b34fd0c2133392f412390fdf83..4deed0bf4a6dd063a065c40c58047bb91038ad0b 100644 (file)
@@ -207,7 +207,8 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, int raw,
                                DWORD i = 0;
                                DNS_TXT_DATA *data_txt = &pRec->Data.TXT;
                                DWORD count = data_txt->dwStringCount;
-                               char *txt, *txt_dst;
+                               zend_string *txt;
+                               char *txt_dst;
                                long txt_len = 0;
                                zval *entries;
 
@@ -220,18 +221,16 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, int raw,
                                        txt_len += strlen(data_txt->pStringArray[i]) + 1;
                                }
 
-                               txt = ecalloc(txt_len * 2, 1);
-                               txt_dst = txt;
+                               txt = STR_SAFE_ALLOC(txt_len, 2, 0, 0);
+                               txt_dst = txt->val;
                                for (i = 0; i < count; i++) {
                                        int len = strlen(data_txt->pStringArray[i]);
                                        memcpy(txt_dst, data_txt->pStringArray[i], len);
                                        add_next_index_stringl(entries, data_txt->pStringArray[i], len);
                                        txt_dst += len;
                                }
-
-                               // TODO: avoid reallocation ???
-                               add_assoc_string(*subarray, "txt", txt);
-                               efree(txt);
+                               tct->len = txt_dst - txt->val;
+                               add_assoc_str(*subarray, "txt", txt);
                                add_assoc_zval(*subarray, "entries", entries);
                        }
                        break;