Hi,

My name is Henrique do N. Angelo and I'm currently working on the
implementation of Unicode into PHP 6 as a Google Summer of Code 2008
project, mentored by Scott MacVicar. Scott has been helping me for the past
few weeks and, so far, I've got a couple patches done.

Following Philip's advice, I'm sending here some of the patches I've written
so far and soon I will be requesting a cvs account.

If you want to contact me directly, feel free to send me an email or talk to
me at #php.pecl at efnet, I'm hnangelo.

Cheers
Henrique
Index: ext/date/php_date.c
===================================================================
RCS file: /repository/php-src/ext/date/php_date.c,v
retrieving revision 1.187
diff -u -r1.187 php_date.c
--- ext/date/php_date.c 20 May 2008 12:07:13 -0000      1.187
+++ ext/date/php_date.c 31 May 2008 03:36:17 -0000
@@ -1214,7 +1214,7 @@
 }
 /* }}} */
 
-/* {{{ proto string date(string format [, long timestamp])
+/* {{{ proto string date(string format [, long timestamp]) U
    Format a local date/time */
 PHP_FUNCTION(date)
 {
@@ -1222,7 +1222,7 @@
 }
 /* }}} */
 
-/* {{{ proto string gmdate(string format [, long timestamp])
+/* {{{ proto string gmdate(string format [, long timestamp]) U
    Format a GMT date/time */
 PHP_FUNCTION(gmdate)
 {
@@ -1230,7 +1230,7 @@
 }
 /* }}} */
 
-/* {{{ proto int idate(string format [, int timestamp])
+/* {{{ proto int idate(string format [, int timestamp]) U
    Format a local time/date as integer */
 PHP_FUNCTION(idate)
 {
@@ -1292,7 +1292,7 @@
 /* }}} */
 
 
-/* {{{ proto int strtotime(string time [, int now ])
+/* {{{ proto int strtotime(string time [, int now ]) U
    Convert string representation of date and time to a timestamp */
 PHP_FUNCTION(strtotime)
 {
@@ -1453,7 +1453,7 @@
 }
 /* }}} */
 
-/* {{{ proto int mktime([int hour [, int min [, int sec [, int mon [, int day 
[, int year]]]]]])
+/* {{{ proto int mktime([int hour [, int min [, int sec [, int mon [, int day 
[, int year]]]]]]) U
    Get UNIX timestamp for a date */
 PHP_FUNCTION(mktime)
 {
@@ -1461,7 +1461,7 @@
 }
 /* }}} */
 
-/* {{{ proto int gmmktime([int hour [, int min [, int sec [, int mon [, int 
day [, int year]]]]]])
+/* {{{ proto int gmmktime([int hour [, int min [, int sec [, int mon [, int 
day [, int year]]]]]]) U
    Get UNIX timestamp for a GMT date */
 PHP_FUNCTION(gmmktime)
 {
@@ -1470,7 +1470,7 @@
 /* }}} */
 
 
-/* {{{ proto bool checkdate(int month, int day, int year)
+/* {{{ proto bool checkdate(int month, int day, int year) U
    Returns true(1) if it is a valid date in gregorian calendar */
 PHP_FUNCTION(checkdate)
 {
@@ -1578,7 +1578,7 @@
 }
 /* }}} */
 
-/* {{{ proto string strftime(string format [, int timestamp])
+/* {{{ proto string strftime(string format [, int timestamp]) U
    Format a local time/date according to locale settings */
 PHP_FUNCTION(strftime)
 {
@@ -1586,7 +1586,7 @@
 }
 /* }}} */
 
-/* {{{ proto string gmstrftime(string format [, int timestamp])
+/* {{{ proto string gmstrftime(string format [, int timestamp]) U
    Format a GMT/UCT time/date according to locale settings */
 PHP_FUNCTION(gmstrftime)
 {
@@ -1595,7 +1595,7 @@
 /* }}} */
 #endif
 
-/* {{{ proto int time(void)
+/* {{{ proto int time(void) U
    Return current UNIX timestamp */
 PHP_FUNCTION(time)
 {
@@ -1603,7 +1603,7 @@
 }
 /* }}} */
 
-/* {{{ proto array localtime([int timestamp [, bool associative_array]])
+/* {{{ proto array localtime([int timestamp [, bool associative_array]]) U
    Returns the results of the C system call localtime as an associative array 
if the associative_array argument is set to 1 other wise it is a regular array 
*/
 PHP_FUNCTION(localtime)
 {
@@ -1650,7 +1650,7 @@
 }
 /* }}} */
 
-/* {{{ proto array getdate([int timestamp])
+/* {{{ proto array getdate([int timestamp]) U
    Get date/time information */
 PHP_FUNCTION(getdate)
 {
@@ -1678,8 +1678,8 @@
        add_ascii_assoc_long(return_value, "mon", ts->m);
        add_ascii_assoc_long(return_value, "year", ts->y);
        add_ascii_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, 
ts->m, ts->d));
-       add_ascii_assoc_string(return_value, "weekday", 
php_date_full_day_name(ts->y, ts->m, ts->d), 1);
-       add_ascii_assoc_string(return_value, "month", mon_full_names[ts->m - 
1], 1);
+       add_ascii_assoc_ascii_string(return_value, "weekday", 
php_date_full_day_name(ts->y, ts->m, ts->d), 1);
+       add_ascii_assoc_ascii_string(return_value, "month", 
mon_full_names[ts->m - 1], 1);
        add_index_long(return_value, 0, timestamp);
 
        timelib_time_dtor(ts);
@@ -2028,7 +2028,7 @@
                MAKE_STD_ZVAL(zv);
                switch (dateobj->time->zone_type) {
                        case TIMELIB_ZONETYPE_ID:
-                               ZVAL_STRING(zv, dateobj->time->tz_info->name, 
1);
+                               ZVAL_ASCII_STRING(zv, 
dateobj->time->tz_info->name, 1);
                                break;
                        case TIMELIB_ZONETYPE_OFFSET: {
                                char *tmpstr = emalloc(sizeof("UTC+05:00"));
@@ -2039,11 +2039,11 @@
                                        abs(utc_offset / 60),
                                        abs((utc_offset % 60)));
 
-                               ZVAL_STRING(zv, tmpstr, 0);
+                               ZVAL_ASCII_STRING(zv, tmpstr, 0);
                                }
                                break;
                        case TIMELIB_ZONETYPE_ABBR:
-                               ZVAL_STRING(zv, dateobj->time->tz_abbr, 1);
+                               ZVAL_ASCII_STRING(zv, dateobj->time->tz_abbr, 
1);
                                break;
                }
                zend_hash_update(props, "timezone", 9, &zv, sizeof(zval), NULL);
@@ -2356,7 +2356,7 @@
        return 1;
 }
 
-/* {{{ proto DateTime date_create([string time[, DateTimeZone object]])
+/* {{{ proto DateTime date_create([string time[, DateTimeZone object]]) U
    Returns new DateTime object
 */
 PHP_FUNCTION(date_create)
@@ -2376,7 +2376,7 @@
 }
 /* }}} */
 
-/* {{{ proto DateTime date_create_from_format(string format, string time[, 
DateTimeZone object])
+/* {{{ proto DateTime date_create_from_format(string format, string time[, 
DateTimeZone object]) 
    Returns new DateTime object formatted according to the specified format
 */
 PHP_FUNCTION(date_create_from_format)
@@ -2504,7 +2504,7 @@
        MAKE_STD_ZVAL(element);
        array_init(element);
        for (i = 0; i < error->warning_count; i++) {
-               add_index_string(element, error->warning_messages[i].position, 
error->warning_messages[i].message, 1);
+               add_index_ascii_string(element, 
error->warning_messages[i].position, error->warning_messages[i].message, 1);
        }
        add_ascii_assoc_zval(z, "warnings", element);
 
@@ -2512,12 +2512,12 @@
        MAKE_STD_ZVAL(element);
        array_init(element);
        for (i = 0; i < error->error_count; i++) {
-               add_index_string(element, error->error_messages[i].position, 
error->error_messages[i].message, 1);
+               add_index_ascii_string(element, 
error->error_messages[i].position, error->error_messages[i].message, 1);
        }
        add_ascii_assoc_zval(z, "errors", element);
 }
 
-/* {{{ proto array date_get_last_errorse()
+/* {{{ proto array date_get_last_errorse() U
    Returns the warnings and errors found while parsing a date/time string.
 */
 PHP_FUNCTION(date_get_last_errors)
@@ -2606,7 +2606,7 @@
        timelib_time_dtor(parsed_time);
 }
 
-/* {{{ proto array date_parse(string date)
+/* {{{ proto array date_parse(string date) U
    Returns associative array with detailed info about given date
 */
 PHP_FUNCTION(date_parse)
@@ -2625,7 +2625,7 @@
 }
 /* }}} */
 
-/* {{{ proto array date_parse(string date)
+/* {{{ proto array date_parse_from_format(string format, string date) U
    Returns associative array with detailed info about given date
 */
 PHP_FUNCTION(date_parse_from_format)
@@ -2644,7 +2644,7 @@
 }
 /* }}} */
 
-/* {{{ proto string date_format(DateTime object, string format)
+/* {{{ proto string date_format(DateTime object, string format) U
    Returns date formatted according to given format
 */
 PHP_FUNCTION(date_format)
@@ -2668,7 +2668,7 @@
 }
 /* }}} */
 
-/* {{{ proto string date_format_locale(DateTime object, string format)
+/* {{{ proto string date_format_locale(DateTime object, string format) U
 */
 PHP_FUNCTION(date_format_locale)
 {
@@ -2691,7 +2691,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_modify(DateTime object, string modify)
+/* {{{ proto void date_modify(DateTime object, string modify) U
    Alters the timestamp.
 */
 PHP_FUNCTION(date_modify)
@@ -2726,7 +2726,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_add(DateTime object, DateInterval interval)
+/* {{{ proto void date_add(DateTime object, DateInterval interval) U
    Adds an interval to the current date in object.
 */
 PHP_FUNCTION(date_add)
@@ -2764,7 +2764,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_sub(DateTime object, DateInterval interval)
+/* {{{ proto void date_sub(DateTime object, DateInterval interval) U
    Subtracts an interval to the current date in object.
 */
 PHP_FUNCTION(date_sub)
@@ -2802,7 +2802,7 @@
 }
 /* }}} */
 
-/* {{{ proto DateTimeZone date_timezone_get(DateTime object)
+/* {{{ proto DateTimeZone date_timezone_get(DateTime object) U
    Return new DateTimeZone object relative to give DateTime
 */
 PHP_FUNCTION(date_timezone_get)
@@ -2867,7 +2867,7 @@
 }
 /* }}} */
 
-/* {{{ proto long date_offset_get(DateTime object)
+/* {{{ proto long date_offset_get(DateTime object) U
    Returns the DST offset.
 */
 PHP_FUNCTION(date_offset_get)
@@ -2902,7 +2902,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_time_set(DateTime object, long hour, long minute[, long 
second])
+/* {{{ proto void date_time_set(DateTime object, long hour, long minute[, long 
second]) U
    Sets the time.
 */
 PHP_FUNCTION(date_time_set)
@@ -2923,7 +2923,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_date_set(DateTime object, long year, long month, long 
day)
+/* {{{ proto void date_date_set(DateTime object, long year, long month, long 
day) U
    Sets the date.
 */
 PHP_FUNCTION(date_date_set)
@@ -2944,7 +2944,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_isodate_set(DateTime object, long year, long week[, 
long day])
+/* {{{ proto void date_isodate_set(DateTime object, long year, long week[, 
long day]) U
    Sets the ISO date.
 */
 PHP_FUNCTION(date_isodate_set)
@@ -2968,7 +2968,7 @@
 }
 /* }}} */
 
-/* {{{ proto void date_timestamp_set(DateTime object, long unixTimestamp)
+/* {{{ proto void date_timestamp_set(DateTime object, long unixTimestamp) U
    Sets the date and time based on an Unix timestamp.
 */
 PHP_FUNCTION(date_timestamp_set)
@@ -2987,7 +2987,7 @@
 }
 /* }}} */
 
-/* {{{ proto long date_timestamp_get(DateTime object)
+/* {{{ proto long date_timestamp_get(DateTime object) U
    Gets the Unix timestamp.
 */
 PHP_FUNCTION(date_timestamp_get)
@@ -3013,7 +3013,7 @@
 }
 /* }}} */
 
-/* {{{ proto DateInterval date_diff(DateTime object [, bool absolute])
+/* {{{ proto DateInterval date_diff(DateTime object [, bool absolute]) U
    Returns the difference between two DateTime objects.
 */
 PHP_FUNCTION(date_diff)
@@ -3063,7 +3063,7 @@
        }
 }
 
-/* {{{ proto DateTimeZone timezone_open(string timezone)
+/* {{{ proto DateTimeZone timezone_open(string timezone) U
    Returns new DateTimeZone object
 */
 PHP_FUNCTION(timezone_open)
@@ -3111,7 +3111,7 @@
 }
 /* }}} */
 
-/* {{{ proto string timezone_name_get(DateTimeZone object)
+/* {{{ proto string timezone_name_get(DateTimeZone object) U
    Returns the name of the timezone.
 */
 PHP_FUNCTION(timezone_name_get)
@@ -3138,7 +3138,7 @@
                                abs(utc_offset / 60),
                                abs((utc_offset % 60)));
 
-                       RETURN_ASCII_STRING(tmpstr, 0);
+                       RETURN_ASCII_STRING(tmpstr, ZSTR_AUTOFREE);
                        }
                        break;
                case TIMELIB_ZONETYPE_ABBR:
@@ -3148,7 +3148,7 @@
 }
 /* }}} */
 
-/* {{{ proto string timezone_name_from_abbr(string abbr[, long gmtOffset[, 
long isdst]])
+/* {{{ proto string timezone_name_from_abbr(string abbr[, long gmtOffset[, 
long isdst]]) U
    Returns the timezone name from abbrevation
 */
 PHP_FUNCTION(timezone_name_from_abbr)
@@ -3165,14 +3165,14 @@
        tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst);
 
        if (tzid) {
-               RETURN_STRING(tzid, 1);
+               RETURN_ASCII_STRING(tzid, 1);
        } else {
                RETURN_FALSE;
        }
 }
 /* }}} */
 
-/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTime object)
+/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTime object) U
    Returns the timezone offset.
 */
 PHP_FUNCTION(timezone_offset_get)
@@ -3206,7 +3206,7 @@
 }
 /* }}} */
 
-/* {{{ proto array timezone_transitions_get(DateTimeZone object [, long 
timestamp_begin [, long timestamp_end ]])
+/* {{{ proto array timezone_transitions_get(DateTimeZone object [, long 
timestamp_begin [, long timestamp_end ]]) U
    Returns numerically indexed array containing associative array for all 
transitions in the specified range for the timezone.
 */
 PHP_FUNCTION(timezone_transitions_get)
@@ -3236,7 +3236,7 @@
                } \
                add_ascii_assoc_long(element, "offset", 
tzobj->tzi.tz->type[0].offset); \
                add_ascii_assoc_bool(element, "isdst",  
tzobj->tzi.tz->type[0].isdst); \
-               add_ascii_assoc_string(element, "abbr", 
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \
+               add_ascii_assoc_ascii_string(element, "abbr", 
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \
                add_next_index_zval(return_value, element);
 
 #define add(i,ts) \
@@ -3250,7 +3250,7 @@
                } \
                add_ascii_assoc_long(element, "offset", 
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
                add_ascii_assoc_bool(element, "isdst",  
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
-               add_ascii_assoc_string(element, "abbr", 
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx],
 1); \
+               add_ascii_assoc_ascii_string(element, "abbr", 
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx],
 1); \
                add_next_index_zval(return_value, element);
 
 #define add_last() add(tzobj->tzi.tz->timecnt - 1, timestamp_begin)
@@ -3514,7 +3514,7 @@
 }
 /* }}} */
 
-/* {{{ proto string date_interval_format(DateInterval object)
+/* {{{ proto string date_interval_format(DateInterval object, string format) U
    Formats the interval.
 */
 PHP_FUNCTION(date_interval_format)
@@ -3530,7 +3530,7 @@
        diobj = (php_interval_obj *) zend_object_store_get_object(object 
TSRMLS_CC);
        DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval);
 
-       RETURN_STRING(date_interval_format(format, format_len, diobj->diff), 0);
+       RETURN_ASCII_STRING(date_interval_format(format, format_len, 
diobj->diff), ZSTR_AUTOFREE);
 }
 /* }}} */
 
@@ -3661,7 +3661,7 @@
        return 0;
 }
 
-/* {{{ proto array timezone_identifiers_list([long what])
+/* {{{ proto array timezone_identifiers_list([long what]) U
    Returns numerically index array with all timezone identifiers.
 */
 PHP_FUNCTION(timezone_identifiers_list)
@@ -3683,13 +3683,13 @@
 
        for (i = 0; i < item_count; ++i) {
                if (what == PHP_DATE_TIMEZONE_GROUP_ALL_W_BC || 
check_id_allowed(table[i].id, what)) {
-                       add_next_index_string(return_value, table[i].id, 1);
+                       add_next_index_ascii_string(return_value, table[i].id, 
1);
                }
        };
 }
 /* }}} */
 
-/* {{{ proto array timezone_abbreviations_list()
+/* {{{ proto array timezone_abbreviations_list() U
    Returns associative array containing dst, offset and the timezone name
 */
 PHP_FUNCTION(timezone_abbreviations_list)
@@ -3725,7 +3725,7 @@
 }
 /* }}} */
 
-/* {{{ proto bool date_default_timezone_set(string timezone_identifier)
+/* {{{ proto bool date_default_timezone_set(string timezone_identifier) U
    Sets the default timezone used by all date/time functions in a script */
 PHP_FUNCTION(date_default_timezone_set)
 {
@@ -3748,7 +3748,7 @@
 }
 /* }}} */
 
-/* {{{ proto string date_default_timezone_get()
+/* {{{ proto string date_default_timezone_get() U
    Gets the default timezone used by all date/time functions in a script */
 PHP_FUNCTION(date_default_timezone_get)
 {
@@ -3846,7 +3846,7 @@
 }
 /* }}} */
 
-/* {{{ proto mixed date_sunrise(mixed time [, int format [, float latitude [, 
float longitude [, float zenith [, float gmt_offset]]]]])
+/* {{{ proto mixed date_sunrise(mixed time [, int format [, float latitude [, 
float longitude [, float zenith [, float gmt_offset]]]]]) U
    Returns time of sunrise for a given day and location */
 PHP_FUNCTION(date_sunrise)
 {
@@ -3854,7 +3854,7 @@
 }
 /* }}} */
 
-/* {{{ proto mixed date_sunset(mixed time [, int format [, float latitude [, 
float longitude [, float zenith [, float gmt_offset]]]]])
+/* {{{ proto mixed date_sunset(mixed time [, int format [, float latitude [, 
float longitude [, float zenith [, float gmt_offset]]]]]) U
    Returns time of sunset for a given day and location */
 PHP_FUNCTION(date_sunset)
 {
@@ -3862,7 +3862,7 @@
 }
 /* }}} */
 
-/* {{{ proto array date_sun_info(long time, float latitude, float longitude)
+/* {{{ proto array date_sun_info(long time, float latitude, float longitude) U
    Returns an array with information about sun set/rise and twilight begin/end 
*/
 PHP_FUNCTION(date_sun_info)
 {
Index: ext/exif/exif.c
===================================================================
RCS file: /repository/php-src/ext/exif/exif.c,v
retrieving revision 1.201
diff -u -r1.201 exif.c
--- ext/exif/exif.c     12 Mar 2008 17:32:26 -0000      1.201
+++ ext/exif/exif.c     30 May 2008 22:44:04 -0000
@@ -1970,7 +1970,7 @@
 /*             php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Adding infos: 
tag(0x%04X,%12s,L=0x%04X): %s", info_tag, exif_get_tagname(info_tag, buffer, 
-12, exif_get_tag_table(section_index) TSRMLS_CC), info_data->length, 
info_data->format==TAG_FMT_STRING?(info_value&&info_value->s?info_value->s:"<no 
data>"):exif_get_tagformat(info_data->format));*/
 #endif
                        if (info_data->length==0) {
-                               add_assoc_null(tmpi, name);
+                               add_ascii_assoc_null(tmpi, name);
                        } else {
                                switch (info_data->format) {
                                        default:
@@ -1983,9 +1983,9 @@
                                        case TAG_FMT_SBYTE:
                                        case TAG_FMT_UNDEFINED:
                                                if (!info_value->s) {
-                                                       add_assoc_stringl(tmpi, 
name, "", 0, 1);
+                                                       
add_ascii_assoc_ascii_stringl(tmpi, name, "", 0, 1);
                                                } else {
-                                                       add_assoc_stringl(tmpi, 
name, info_value->s, info_data->length, 1);
+                                                       
add_ascii_assoc_ascii_stringl(tmpi, name, info_value->s, info_data->length, 1);
                                                }
                                                break;
 
@@ -1994,9 +1994,9 @@
                                                        val = "";
                                                }
                                                if 
(section_index==SECTION_COMMENT) {
-                                                       add_index_string(tmpi, 
idx++, val, 1);
+                                                       
add_index_ascii_string(tmpi, idx++, val, 1);
                                                } else {
-                                                       add_assoc_string(tmpi, 
name, val, 1);
+                                                       
add_ascii_assoc_ascii_string(tmpi, name, val, 1);
                                                }
                                                break;
 
@@ -2032,7 +2032,7 @@
                                                                case 
TAG_FMT_USHORT:
                                                                case 
TAG_FMT_ULONG:
                                                                        if 
(l==1) {
-                                                                               
add_assoc_long(tmpi, name, (int)info_value->u);
+                                                                               
add_ascii_assoc_long(tmpi, name, (int)info_value->u);
                                                                        } else {
                                                                                
add_index_long(array, ap, (int)info_value->u);
                                                                        }
@@ -2041,9 +2041,9 @@
                                                                case 
TAG_FMT_URATIONAL:
                                                                        
snprintf(buffer, sizeof(buffer), "%i/%i", info_value->ur.num, 
info_value->ur.den);
                                                                        if 
(l==1) {
-                                                                               
add_assoc_string(tmpi, name, buffer, 1);
+                                                                               
add_ascii_assoc_ascii_string(tmpi, name, buffer, 1);
                                                                        } else {
-                                                                               
add_index_string(array, ap, buffer, 1);
+                                                                               
add_index_ascii_string(array, ap, buffer, 1);
                                                                        }
                                                                        break;
 
@@ -2058,7 +2058,7 @@
                                                                case 
TAG_FMT_SSHORT:
                                                                case 
TAG_FMT_SLONG:
                                                                        if 
(l==1) {
-                                                                               
add_assoc_long(tmpi, name, info_value->i);
+                                                                               
add_ascii_assoc_long(tmpi, name, info_value->i);
                                                                        } else {
                                                                                
add_index_long(array, ap, info_value->i);
                                                                        }
@@ -2067,15 +2067,15 @@
                                                                case 
TAG_FMT_SRATIONAL:
                                                                        
snprintf(buffer, sizeof(buffer), "%i/%i", info_value->sr.num, 
info_value->sr.den);
                                                                        if 
(l==1) {
-                                                                               
add_assoc_string(tmpi, name, buffer, 1);
+                                                                               
add_ascii_assoc_ascii_string(tmpi, name, buffer, 1);
                                                                        } else {
-                                                                               
add_index_string(array, ap, buffer, 1);
+                                                                               
add_index_ascii_string(array, ap, buffer, 1);
                                                                        }
                                                                        break;
 
                                                                case 
TAG_FMT_SINGLE:
                                                                        if 
(l==1) {
-                                                                               
add_assoc_double(tmpi, name, info_value->f);
+                                                                               
add_ascii_assoc_double(tmpi, name, info_value->f);
                                                                        } else {
                                                                                
add_index_double(array, ap, info_value->f);
                                                                        }
@@ -2083,7 +2083,7 @@
 
                                                                case 
TAG_FMT_DOUBLE:
                                                                        if 
(l==1) {
-                                                                               
add_assoc_double(tmpi, name, info_value->d);
+                                                                               
add_ascii_assoc_double(tmpi, name, info_value->d);
                                                                        } else {
                                                                                
add_index_double(array, ap, info_value->d);
                                                                        }
@@ -2092,14 +2092,14 @@
                                                        info_value = 
&info_data->value.list[ap];
                                                }
                                                if (l>1) {
-                                                       add_assoc_zval(tmpi, 
name, array);
+                                                       
add_ascii_assoc_zval(tmpi, name, array);
                                                }
                                                break;
                                }
                        }
                }
                if (sub_array) {
-                       add_assoc_zval(value, 
exif_get_sectionname(section_index), tmpi);
+                       add_ascii_assoc_zval(value, 
exif_get_sectionname(section_index), tmpi);
                }
        }
 }
@@ -2335,25 +2335,22 @@
 #endif
 /* }}} */
 
-/* {{{ proto string exif_tagname(index)
+/* {{{ proto string exif_tagname(long index) U
        Get headername for index or false if not defined */
 PHP_FUNCTION(exif_tagname)
 {
-       zval **p_num;
-       int tag, ac = ZEND_NUM_ARGS();
+       long  tag;
        char *szTemp;
 
-       if ((ac < 1 || ac > 1) || zend_get_parameters_ex(ac, &p_num) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"l", &tag) == FAILURE) {
+               return;
        }
 
-       convert_to_long_ex(p_num);
-       tag = Z_LVAL_PP(p_num);
        szTemp = exif_get_tagname(tag, NULL, 0, tag_table_IFD TSRMLS_CC);
        if (tag<0 || !szTemp || !szTemp[0]) {
                RETURN_BOOL(FALSE);
        } else {
-               RETURN_STRING(szTemp, 1)
+               RETURN_ASCII_STRING(szTemp, 1)
        }
 }
 /* }}} */
@@ -3893,22 +3890,24 @@
    Reads header data from the JPEG/TIFF image filename and optionally reads 
the internal thumbnails */
 PHP_FUNCTION(exif_read_data)
 {
-       zval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, 
**p_read_all;
+       zval **p_name, **p_read_all;
        int i, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, 
read_thumbnail=0, read_all=0;
        image_info_type ImageInfo;
-       char tmp[64], *sections_str, *s;
+       char tmp[64], *sections_str=0, *s;
+       char *filename;
+       int filename_len, sections_str_len;
 
        memset(&ImageInfo, 0, sizeof(ImageInfo));
 
-       if ((ac < 1 || ac > 4) || zend_get_parameters_ex(ac, &p_name, 
&p_sections_needed, &p_sub_arrays, &p_read_thumbnail, &p_read_all) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|sbb", &p_name, 
&sections_str, &sections_str_len, &sub_arrays, &read_thumbnail) == FAILURE) {
+               return;
        }
 
-       convert_to_string_ex(p_name);
+       if (php_stream_path_param_encode(p_name, &filename, &filename_len, 
REPORT_ERRORS, FG(default_context)) == FAILURE) {
+               return;
+       }
 
-       if(ac >= 2) {
-               convert_to_string_ex(p_sections_needed);
-               spprintf(&sections_str, 0, ",%s,", 
Z_STRVAL_PP(p_sections_needed));
+       if (sections_needed) {
                /* sections_str DOES start with , and SPACES are NOT allowed in 
names */
                s = sections_str;
                while(*++s) {
@@ -3933,14 +3932,7 @@
                EFREE_IF(sections_str);
 #endif
        }
-       if(ac >= 3) {
-               convert_to_long_ex(p_sub_arrays);
-               sub_arrays = Z_LVAL_PP(p_sub_arrays);
-       }
-       if(ac >= 4) {
-               convert_to_long_ex(p_read_thumbnail);
-               read_thumbnail = Z_LVAL_PP(p_read_thumbnail);
-       }
+
        if(ac >= 5) {
                convert_to_long_ex(p_read_all);
                read_all = Z_LVAL_PP(p_read_all);
@@ -3948,7 +3940,7 @@
        /* parameters 3,4 will be working in later versions.... */
        read_all = 0;       /* just to make function work for 4.2 tree */
 
-       ret = exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), read_thumbnail, 
read_all TSRMLS_CC);
+       ret = exif_read_file(&ImageInfo, filename, read_thumbnail, read_all 
TSRMLS_CC);
 
        sections_str = exif_get_sectionlist(ImageInfo.sections_found TSRMLS_CC);
 
@@ -4076,18 +4068,19 @@
        exif_discard_imageinfo(&ImageInfo);
 
 #ifdef EXIF_DEBUG
-       php_error_docref1(NULL TSRMLS_CC, Z_STRVAL_PP(p_name), E_NOTICE, 
"done");
+       php_error_docref1(NULL TSRMLS_CC, filename, E_NOTICE, "done");
 #endif
 }
 /* }}} */
 
-/* {{{ proto string exif_thumbnail(string filename [, &width, &height [, 
&imagetype]])
+/* {{{ proto string exif_thumbnail(string filename [, &width, &height [, 
&imagetype]]) U
    Reads the embedded thumbnail */
 PHP_FUNCTION(exif_thumbnail)
 {
        zval *p_width = 0, *p_height = 0, *p_imagetype = 0;
-       char *p_name;
-       int p_name_len, ret, arg_c = ZEND_NUM_ARGS();
+       zval **p_name;
+       char *filename;
+       int filename_len, ret, arg_c = ZEND_NUM_ARGS();
        image_info_type ImageInfo;
 
        memset(&ImageInfo, 0, sizeof(ImageInfo));
@@ -4096,11 +4089,15 @@
                WRONG_PARAM_COUNT;
        }
 
-       if (zend_parse_parameters(arg_c TSRMLS_CC, "s|z/z/z/", &p_name, 
&p_name_len, &p_width, &p_height, &p_imagetype) == FAILURE) {
+       if (zend_parse_parameters(arg_c TSRMLS_CC, "Z|z/z/z/", &p_name, 
&p_width, &p_height, &p_imagetype) == FAILURE) {
                return;
        }
 
-       ret = exif_read_file(&ImageInfo, p_name, 1, 0 TSRMLS_CC);
+       if (php_stream_path_param_encode(p_name, &filename, &filename_len, 
REPORT_ERRORS, FG(default_context)) == FAILURE) {
+               return;
+       }
+
+       ret = exif_read_file(&ImageInfo, filename, 1, 0 TSRMLS_CC);
        if (ret==FALSE) {
                exif_discard_imageinfo(&ImageInfo);
                RETURN_FALSE;
@@ -4140,27 +4137,30 @@
        exif_discard_imageinfo(&ImageInfo);
 
 #ifdef EXIF_DEBUG
-       php_error_docref1(NULL TSRMLS_CC, p_name, E_NOTICE, "Done");
+       php_error_docref1(NULL TSRMLS_CC, filename, E_NOTICE, "Done");
 #endif
 }
 /* }}} */
 
-/* {{{ proto int exif_imagetype(string imagefile)
+/* {{{ proto int exif_imagetype(string imagefile) U
    Get the type of an image */
 PHP_FUNCTION(exif_imagetype)
 {
        zval **arg1;
+       char *filename;
+       int filename_len;
        php_stream * stream;
        int itype = 0;
 
-       if (ZEND_NUM_ARGS() != 1)
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &arg1) == 
FAILURE) {
+               return;
+       }
 
-       if (zend_get_parameters_ex(1, &arg1) == FAILURE)
-               WRONG_PARAM_COUNT;
+       if (php_stream_path_param_encode(arg1, &filename, &filename_len, 
REPORT_ERRORS, FG(default_context)) == FAILURE) {
+               return;
+       }
 
-       convert_to_string_ex(arg1);
-       stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", 
IGNORE_PATH|REPORT_ERRORS, NULL);
+       stream = php_stream_open_wrapper(filename, "rb", 
IGNORE_PATH|REPORT_ERRORS, NULL);
 
        if (stream == NULL) {
                RETURN_FALSE;
Index: 008.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/008.phpt,v
retrieving revision 1.2
diff -u -r1.2 008.phpt
--- 008.phpt    27 May 2008 18:16:00 -0000      1.2
+++ 008.phpt    6 Jun 2008 22:24:12 -0000
@@ -34,9 +34,9 @@
   [u"yday"]=>
   int(177)
   [u"weekday"]=>
-  string(7) "Tuesday"
+  unicode(7) "Tuesday"
   [u"month"]=>
-  string(4) "June"
+  unicode(4) "June"
   [0]=>
   int(1151366400)
 }
@@ -58,9 +58,9 @@
   [u"yday"]=>
   int(%d)
   [u"weekday"]=>
-  string(%d) "%s"
+  unicode(%d) "%s"
   [u"month"]=>
-  string(%d) "%s"
+  unicode(%d) "%s"
   [0]=>
   int(%d)
 }
Index: 011.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/011.phpt,v
retrieving revision 1.1
diff -u -r1.1 011.phpt
--- 011.phpt    22 Dec 2006 13:07:26 -0000      1.1
+++ 011.phpt    6 Jun 2008 22:24:12 -0000
@@ -16,8 +16,8 @@
 --EXPECTF--
 Warning: timezone_name_from_abbr() expects at least 1 parameter, 0 given in %s 
on line 3
 bool(false)
-string(13) "Europe/Berlin"
+unicode(13) "Europe/Berlin"
 bool(false)
 bool(false)
-string(12) "Europe/Paris"
+unicode(12) "Europe/Paris"
 Done
Index: 013.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/013.phpt,v
retrieving revision 1.3
diff -u -r1.3 013.phpt
--- 013.phpt    27 May 2008 18:16:00 -0000      1.3
+++ 013.phpt    6 Jun 2008 22:24:12 -0000
@@ -26,7 +26,7 @@
   [u"timezone_type"]=>
   int(3)
   [u"timezone"]=>
-  string(3) "UTC"
+  unicode(3) "UTC"
 }
 unicode(19) "2006.12.12 00:00:00"
 
Index: 014.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/014.phpt,v
retrieving revision 1.3
diff -u -r1.3 014.phpt
--- 014.phpt    27 May 2008 18:16:00 -0000      1.3
+++ 014.phpt    6 Jun 2008 22:24:12 -0000
@@ -25,7 +25,7 @@
   [u"timezone_type"]=>
   int(3)
   [u"timezone"]=>
-  string(3) "UTC"
+  unicode(3) "UTC"
 }
 object(DateTimeZone)#%d (0) {
 }
Index: bug41523-64bit.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/bug41523-64bit.phpt,v
retrieving revision 1.3
diff -u -r1.3 bug41523-64bit.phpt
--- bug41523-64bit.phpt 27 May 2008 18:16:00 -0000      1.3
+++ bug41523-64bit.phpt 6 Jun 2008 22:24:12 -0000
@@ -48,6 +48,6 @@
   [u"timezone_type"]=>
   int(3)
   [u"timezone"]=>
-  string(3) "UTC"
+  unicode(3) "UTC"
 }
 -0001-11-30T00:00:00+0000
Index: bug41523.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/bug41523.phpt,v
retrieving revision 1.5
diff -u -r1.5 bug41523.phpt
--- bug41523.phpt       27 May 2008 18:16:00 -0000      1.5
+++ bug41523.phpt       6 Jun 2008 22:24:12 -0000
@@ -48,6 +48,6 @@
   [u"timezone_type"]=>
   int(3)
   [u"timezone"]=>
-  string(3) "UTC"
+  unicode(3) "UTC"
 }
 -0001-11-30T00:00:00+0000
Index: bug43808.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/bug43808.phpt,v
retrieving revision 1.2
diff -u -r1.2 bug43808.phpt
--- bug43808.phpt       27 May 2008 18:16:00 -0000      1.2
+++ bug43808.phpt       6 Jun 2008 22:24:12 -0000
@@ -20,14 +20,14 @@
   [u"warnings"]=>
   array(1) {
     [6]=>
-    string(29) "Double timezone specification"
+    unicode(29) "Double timezone specification"
   }
   [u"error_count"]=>
   int(1)
   [u"errors"]=>
   array(1) {
     [0]=>
-    string(47) "The timezone could not be found in the database"
+    unicode(47) "The timezone could not be found in the database"
   }
 }
 array(4) {
@@ -36,13 +36,13 @@
   [u"warnings"]=>
   array(1) {
     [6]=>
-    string(29) "Double timezone specification"
+    unicode(29) "Double timezone specification"
   }
   [u"error_count"]=>
   int(1)
   [u"errors"]=>
   array(1) {
     [0]=>
-    string(47) "The timezone could not be found in the database"
+    unicode(47) "The timezone could not be found in the database"
   }
 }
Index: date_parse_001.phpt
===================================================================
RCS file: /repository/php-src/ext/date/tests/date_parse_001.phpt,v
retrieving revision 1.3
diff -u -r1.3 date_parse_001.phpt
--- date_parse_001.phpt 27 May 2008 18:16:00 -0000      1.3
+++ date_parse_001.phpt 6 Jun 2008 22:24:12 -0000
@@ -98,7 +98,7 @@
   [u"errors"]=>
   array(1) {
     [7]=>
-    string(20) "Unexpected character"
+    unicode(20) "Unexpected character"
   }
   [u"is_localtime"]=>
   bool(true)
@@ -218,9 +218,9 @@
   [u"errors"]=>
   array(2) {
     [0]=>
-    string(20) "Unexpected character"
+    unicode(20) "Unexpected character"
     [1]=>
-    string(20) "Unexpected character"
+    unicode(20) "Unexpected character"
   }
   [u"is_localtime"]=>
   bool(true)
@@ -256,7 +256,7 @@
   [u"errors"]=>
   array(1) {
     [0]=>
-    string(20) "Unexpected character"
+    unicode(20) "Unexpected character"
   }
   [u"is_localtime"]=>
   bool(true)
@@ -292,7 +292,7 @@
   [u"errors"]=>
   array(1) {
     [0]=>
-    string(12) "Empty string"
+    unicode(12) "Empty string"
   }
   [u"is_localtime"]=>
   bool(false)
Index: bug34704.phpt
===================================================================
RCS file: /repository/php-src/ext/exif/tests/bug34704.phpt,v
retrieving revision 1.5
diff -u -r1.5 bug34704.phpt
--- bug34704.phpt       2 Jun 2006 22:22:42 -0000       1.5
+++ bug34704.phpt       7 Jun 2008 02:31:14 -0000
@@ -13,51 +13,22 @@
 ===DONE===
 --EXPECTF--
 array(7) {
-  ["FileName"]=>
-  string(12) "bug34704.jpg"
-  ["FileDateTime"]=>
-  int(%d)
-  ["FileSize"]=>
-  int(9976)
-  ["FileType"]=>
-  int(2)
-  ["MimeType"]=>
-  string(10) "image/jpeg"
-  ["SectionsFound"]=>
-  string(4) "IFD0"
-  ["COMPUTED"]=>
-  array(5) {
-    ["html"]=>
-    string(24) "width="386" height="488""
-    ["Height"]=>
-    int(488)
-    ["Width"]=>
-    int(386)
-    ["IsColor"]=>
-    int(1)
-    ["ByteOrderMotorola"]=>
-    int(0)
-  }
-}
-===DONE===
---UEXPECTF--
-array(7) {
   [u"FileName"]=>
-  string(12) "bug34704.jpg"
+  unicode(12) "bug34704.jpg"
   [u"FileDateTime"]=>
-  int(1128867104)
+  int(%d)
   [u"FileSize"]=>
   int(9976)
   [u"FileType"]=>
   int(2)
   [u"MimeType"]=>
-  string(10) "image/jpeg"
+  unicode(10) "image/jpeg"
   [u"SectionsFound"]=>
-  string(4) "IFD0"
+  unicode(4) "IFD0"
   [u"COMPUTED"]=>
   array(5) {
     [u"html"]=>
-    string(24) "width="386" height="488""
+    unicode(24) "width="386" height="488""
     [u"Height"]=>
     int(488)
     [u"Width"]=>
Index: exif001.phpt
===================================================================
RCS file: /repository/php-src/ext/exif/tests/exif001.phpt,v
retrieving revision 1.6
diff -u -r1.6 exif001.phpt
--- exif001.phpt        27 May 2008 18:16:00 -0000      1.6
+++ exif001.phpt        7 Jun 2008 02:31:14 -0000
@@ -19,7 +19,7 @@
   [u"FILE"]=>
   array(6) {
     [u"FileName"]=>
-    string(9) "test2.jpg"
+    unicode(9) "test2.jpg"
     [u"FileDateTime"]=>
     int(%d)
     [u"FileSize"]=>
@@ -27,14 +27,14 @@
     [u"FileType"]=>
     int(2)
     [u"MimeType"]=>
-    string(10) "image/jpeg"
+    unicode(10) "image/jpeg"
     [u"SectionsFound"]=>
-    string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT"
+    unicode(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT"
   }
   [u"COMPUTED"]=>
   array(12) {
     [u"html"]=>
-    string(20) "width="1" height="1""
+    unicode(20) "width="1" height="1""
     [u"Height"]=>
     int(1)
     [u"Width"]=>
@@ -44,26 +44,26 @@
     [u"ByteOrderMotorola"]=>
     int(1)
     [u"UserComment"]=>
-    string(16) "Exif test image."
+    unicode(16) "Exif test image."
     [u"UserCommentEncoding"]=>
-    string(5) "ASCII"
+    unicode(5) "ASCII"
     [u"Copyright"]=>
-    string(41) "Photo (c) M.Boerger, Edited by M.Boerger."
+    unicode(41) "Photo (c) M.Boerger, Edited by M.Boerger."
     [u"Copyright.Photographer"]=>
-    string(19) "Photo (c) M.Boerger"
+    unicode(19) "Photo (c) M.Boerger"
     [u"Copyright.Editor"]=>
-    string(20) "Edited by M.Boerger."
+    unicode(20) "Edited by M.Boerger."
     [u"Thumbnail.FileType"]=>
     int(2)
     [u"Thumbnail.MimeType"]=>
-    string(10) "image/jpeg"
+    unicode(10) "image/jpeg"
   }
   [u"IFD0"]=>
   array(2) {
     [u"Copyright"]=>
-    string(19) "Photo (c) M.Boerger"
+    unicode(19) "Photo (c) M.Boerger"
     [u"UserComment"]=>
-    string(5) "ASCII"
+    unicode(5) "ASCII"
   }
   [u"THUMBNAIL"]=>
   array(2) {
@@ -75,10 +75,10 @@
   [u"COMMENT"]=>
   array(3) {
     [0]=>
-    string(11) "Comment #1."
+    unicode(11) "Comment #1."
     [1]=>
-    string(11) "Comment #2."
+    unicode(11) "Comment #2."
     [2]=>
-    string(13) "Comment #3end"
+    unicode(13) "Comment #3end"
   }
 }
Index: exif004.phpt
===================================================================
RCS file: /repository/php-src/ext/exif/tests/exif004.phpt,v
retrieving revision 1.5
diff -u -r1.5 exif004.phpt
--- exif004.phpt        4 Jan 2003 19:19:59 -0000       1.5
+++ exif004.phpt        7 Jun 2008 02:31:14 -0000
@@ -22,17 +22,17 @@
 ?>
 --EXPECT--
 array(5) {
-  ["Subject"]=>
-  string(10) "Subject..."
-  ["Keywords"]=>
-  string(11) "Keywords..."
-  ["Author"]=>
-  string(9) "Rui Carmo"
-  ["Comments"]=>
-  string(29) "Comments
+  [u"Subject"]=>
+  unicode(10) "Subject..."
+  [u"Keywords"]=>
+  unicode(11) "Keywords..."
+  [u"Author"]=>
+  unicode(9) "Rui Carmo"
+  [u"Comments"]=>
+  unicode(29) "Comments
 Line2
 Line3
 Line4"
-  ["Title"]=>
-  string(8) "Title..."
+  [u"Title"]=>
+  unicode(8) "Title..."
 }
Index: exif005.phpt
===================================================================
RCS file: /repository/php-src/ext/exif/tests/exif005.phpt,v
retrieving revision 1.8
diff -u -r1.8 exif005.phpt
--- exif005.phpt        27 May 2008 18:16:00 -0000      1.8
+++ exif005.phpt        7 Jun 2008 02:31:14 -0000
@@ -16,7 +16,7 @@
 --EXPECT--
 array(2) {
   [u"ImageDescription"]=>
-  string(11) "Ifd00000009"
+  unicode(11) "Ifd00000009"
   [u"DateTime"]=>
-  string(19) "2002:10:18 20:06:00"
+  unicode(19) "2002:10:18 20:06:00"
 }
-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to