Extension Upgrade Tracking
==========================

ext/standard
------------
  Status: In Progress

  array.c
  -------
    error_log()
        Params API, what encoding to use for the message, handling email
        option

    set_include_path(), get_include_path(), restore_include_path()
        Params API, depends on INI mechanism

    ini_get(), ini_get_all(), ini_set(), ini_restore()
        Params API, Unicode support per discussion

    get_cfg_var()
        IS_UNICODE support for varname

    parse_ini_file()
        Params API, unicode filename support, depends on INI mechaniem

    getopt()
        Will use ASCII for options. $_SERVER['argv'] should not be converted
        to Unicode and should stay binary, since we can't be sure of the
        encoding on CLI. Console_Getopt may be changed to support encodings.

  array.c
  -------
    natsort(), natcasesort()
        Params API
        Either port strnatcmp() to support Unicode or maybe use ICU's
        numeric collation. Update: can't seem to get the right collation
        parameters to duplicate strnatcmp() functionality. Conclusion: port
        to support Unicode.

  string.c
  --------
    hebrev(), hebrevc()
        Figure out if this is something we can use ICU for, internally.
        Check with Zeev.

    parse_str()
        Params API. How do we deal with encoding of the data?

    sscanf()
        Params API. Rest - no idea yet.

    strnatcmp(), strnatcasecmp()
        Params API. The rest depends on porting of strnatcmp.c

    strtr()
        Check on Derick's progress.

    wordwrap()
        Upgrade, do wordwrapping on codepoint (or glyph ?) level, maybe use
        additional whitespace chars instead of just space.

 
ext/filter
------------
  Status: To be discussed
  The unicode support must be discussed with the filter maintainers
  and Andrei (sapi maintainers too?). Please mail them and the list prior
  to any work or commits.

ext/gd
------------
  Status: In Progress
  A preliminary version has been commited by Sara. Pierre is working on the
  migration of the GD extension for php6. 
 
ext/openssl
------------
  Status: In Progress
  (Pierre)

ext/zip
------------
  Status: Initial implementation done. Waiting for reviews/feedbacks. 
  (Pierre)


Completed
=========

ext/bcmath
----------
  Completed:
    bcadd()
    bcsub()
    bcmul()
    bcdiv()
    bcmod()
    bcpowmod()
    bcpow()
    bcsqrt()
    bccomp()
    bcscale()

ext/bz2
-------
  TBD:
    bz2_filter.c
  Completed:
    bzread()
    bzopen()
    bzerrno()
    bzerrstr()
    bzerror()
    bzcompress()
    bzdecompress()


ext/gettext
------------
  Completed:
    textdomain()
    gettext()
    _()
    dgettext()
    dcgettext()
    bindtextdomain()
    ngettext()
    dngettext()
    dcngettext()
    bind_textdomain_codeset()

ext/gmp
-------
  Completed:
    gmp_abs()
    gmp_add()
    gmp_and()
    gmp_clrbit()
    gmp_cmp()
    gmp_com()
    gmp_divexact()
    gmp_div_q()
    gmp_div_qr()
    gmp_div_r()
    gmp_fact()
    gmp_gcd()
    gmp_gcdext()
    gmp_hamdist()
    gmp_init()
    gmp_intval()
    gmp_invert()
    gmp_jacobi()
    gmp_legendre()
    gmp_mod()
    gmp_mul()
    gmp_neg()
    gmp_nextprime()
    gmp_or()
    gmp_perfect_square()
    gmp_popcount()
    gmp_pow()
    gmp_powm()
    gmp_prob_prime()
    gmp_random()
    gmp_scan0()
    gmp_scan1()
    gmp_setbit()
    gmp_sign()
    gmp_sqrt()
    gmp_sqrtrem()
    gmp_strval()
    gmp_sub()
    gmp_xor()

ext/hash
--------
  Completed:
    hash()
    hash_file()
    hash_hmac()
    hash_hmac_file()
    hash_init()
    hash_update()
    hash_update_stream()
    hash_update_file()
    hash_final()
    hash_algos()

ext/json
--------
  Completed:
    json_encode()
    json_decode()

ext/mcrypt
------------
  Completed:
    mcrypt_ecb()
    mcrypt_cbc()
    mcrypt_cfb()
    mcrypt_ofb()
    mcrypt_get_key_size()
    mcrypt_get_block_size()
    mcrypt_get_cipher_name()
    mcrypt_create_iv()
    mcrypt_list_algorithms()
    mcrypt_list_modes()
    mcrypt_get_iv_size()
    mcrypt_encrypt()
    mcrypt_decrypt()
    mcrypt_module_open()
    mcrypt_generic_init()
    mcrypt_generic()
    mdecrypt_generic()
    mcrypt_generic_end()
    mcrypt_generic_deinit()
    mcrypt_enc_self_test()
    mcrypt_enc_is_block_algorithm_mode()
    mcrypt_enc_is_block_algorithm()
    mcrypt_enc_is_block_mode()
    mcrypt_enc_get_block_size()
    mcrypt_enc_get_key_size()
    mcrypt_enc_get_supported_key_sizes()
    mcrypt_enc_get_iv_size()
    mcrypt_enc_get_algorithms_name()
    mcrypt_enc_get_modes_name()
    mcrypt_module_self_test()
    mcrypt_module_is_block_algorithm_mode()
    mcrypt_module_is_block_algorithm()
    mcrypt_module_is_block_mode()
    mcrypt_module_get_algo_block_size()
    mcrypt_module_get_algo_key_size()
    mcrypt_module_get_supported_key_sizes()
    mcrypt_module_close()

ext/mhash
------------
  Completed:
    mhash_count()
    mhash_get_block_size()
    mhash_get_hash_name()
    mhash_keygen_count()
    mhash_get_keygen_name()
    mhash_keygen_uses_hash()
    mhash_keygen_uses_salt()
    mhash_get_keygen_salt_size()
    mhash_keygen_uses_count()
    mhash()
    mhash_keygen()
    mhash_keygen_s2k()

ext/mysqli
----------
  TBD:
    mysqli_embedded_server_start()
    mysqli_embedded_server_end()
    mysqli_disable_reads_from_master()
    mysqli_disable_rpl_parse()
    mysqli_enable_reads_from_master()
    mysqli_enable_rpl_parse()
    mysqli_master_query()
    mysqli_rpl_parse_enabled()
    mysqli_rpl_probe()
    mysqli_rpl_query_type()
    mysqli_send_query()
    mysqli_slave_query()
  Completed:
    mysqli_affected_rows()
    mysqli_autocommit()
    mysqli_change_user()
    mysqli_character_set_name()
    mysqli_close()
    mysqli_commit()
    mysqli_connect()
    mysqli_connect_errno()
    mysqli_connect_error()
    mysqli_data_seek()
    mysqli_debug()
    mysqli_dump_debug_info()
    mysqli_errno()
    mysqli_error()
    mysqli_fetch_array
    mysqli_fetch_assoc
    mysqli_fetch_field
    mysqli_fetch_field_direct
    mysqli_fetch_fields
    mysqli_fetch_lengths
    mysqli_fetch_object
    mysqli_fetch_row
    mysqli_field_count()
    mysqli_field_seek()
    mysqli_field_tell()
    mysqli_free_result()
    mysqli_get_charset()
    mysqli_get_client_info()
    mysqli_get_client_version()
    mysqli_get_host_info
    mysqli_get_proto_info()
    mysqli_get_server_info()
    mysqli_get_server_version()
    mysqli_get_warnings()
    mysqli_info()
    mysqli_init()
    mysqli_insert_id()
    mysqli_kill()
    mysqli_more_results()
    mysqli_multi_query()
    mysqli_next_result()
    mysqli_num_fields()
    mysqli_num_rows()
    mysqli_options()
    mysqli_ping()
    mysqli_prepare()
    mysqli_query()
    mysqli_real_connect()
    mysqli_real_escape_string()
    mysqli_real_query()
    mysqli_report()
    mysqli_rollback()
    mysqli_select_db()
    mysqli_set_charset()
    mysqli_set_local_infile_default()
    mysqli_set_local_infile_handler()
    mysqli_sqlstate()
    mysqli_ssl_set()
    mysqli_stat()
    mysqli_stmt_affected_rows()
    mysqli_stmt_attr_get()
    mysqli_stmt_attr_set()
    mysqli_stmt_bind_param()
    mysqli_stmt_bind_result()
    mysqli_stmt_close()
    mysqli_stmt_data_seek()
    mysqli_stmt_errno()
    mysqli_stmt_error()
    mysqli_stmt_execute()
    mysqli_stmt_fetch()
    mysqli_stmt_field_count()
    mysqli_stmt_free_result()
    mysqli_stmt_get_warnings()
    mysqli_stmt_init()
    mysqli_stmt_insert_id()
    mysqli_stmt_num_rows()
    mysqli_stmt_param_count()
    mysqli_stmt_prepare()
    mysqli_stmt_reset()
    mysqli_stmt_result_metadata()
    mysqli_stmt_send_long_data()
    mysqli_stmt_sqlstate()
    mysqli_stmt_store_result()
    mysqli_store_result()
    mysqli_thread_id()
    mysqli_thread_safe()
    mysqli_use_result()
    mysqli_warning_count

ext/reflection
--------------
  TBD:
    `grep -E 'FIXME|UTODO'`
  Completed:
    ReflectionClass::__construct()
    ReflectionClass::getConstant()
    ReflectionClass::getConstants()
    ReflectionClass::getConstructor()
    ReflectionClass::getDefaultProperties()
    ReflectionClass::getDocComment()
    ReflectionClass::getEndLine()
    ReflectionClass::getExtension()
    ReflectionClass::getExtensionName()
    ReflectionClass::getFileName()
    ReflectionClass::getInterfaceNames()
    ReflectionClass::getInterfaces()
    ReflectionClass::getMethod()
    ReflectionClass::getMethods()
    ReflectionClass::getModifiers()
    ReflectionClass::getName()
    ReflectionClass::getParentClass()
    ReflectionClass::getProperties()
    ReflectionClass::getProperty()
    ReflectionClass::getStartLine()
    ReflectionClass::getStaticProperties()
    ReflectionClass::getStaticPropertyValue()
    ReflectionClass::hasConstant()
    ReflectionClass::hasMethod()
    ReflectionClass::hasProperty()
    ReflectionClass::implementsInterface()
    ReflectionClass::isAbstract()
    ReflectionClass::isFinal()
    ReflectionClass::isInstance()
    ReflectionClass::isInstantiable()
    ReflectionClass::isInterface()
    ReflectionClass::isInternal()
    ReflectionClass::isIterateable()
    ReflectionClass::isSubclassOf()
    ReflectionClass::isUserDefined()
    ReflectionClass::newInstance()
    ReflectionClass::newInstanceArgs()
    ReflectionClass::setStaticPropertyValue()
    ReflectionClass::__toString()
    ReflectionExtension::__construct()
    ReflectionExtension::getClasses()
    ReflectionExtension::getClassNames()
    ReflectionExtension::getConstants()
    ReflectionExtension::getDependencies()
    ReflectionExtension::getFunctions()
    ReflectionExtension::getINIEntries()
    ReflectionExtension::getName()
    ReflectionExtension::getVersion()
    ReflectionExtension::__toString()
    ReflectionFunction::__construct()
    ReflectionFunction::getDocComment()
    ReflectionFunction::getEndLine()
    ReflectionFunction::getExtension()
    ReflectionFunction::getExtensionName()
    ReflectionFunction::getFileName()
    ReflectionFunction::getName()
    ReflectionFunction::getNumberOfParameters()
    ReflectionFunction::getNumberOfRequiredParameters()
    ReflectionFunction::getParameters()
    ReflectionFunction::getStartLine()
    ReflectionFunction::getStaticVariables()
    ReflectionFunction::invoke()
    ReflectionFunction::invokeArgs()
    ReflectionFunction::isDeprecated()
    ReflectionFunction::isDisabled()
    ReflectionFunction::isInternal()
    ReflectionFunction::isUserDefined()
    ReflectionFunction::returnsReference()
    ReflectionFunction::__toString()
    ReflectionMethod::__construct()
    ReflectionMethod::getDeclaringClass()
    ReflectionMethod::getModifiers()
    ReflectionMethod::getPrototype()
    ReflectionMethod::invoke()
    ReflectionMethod::invokeArgs()
    ReflectionMethod::isAbstract()
    ReflectionMethod::isConstructor()
    ReflectionMethod::isDestructor()
    ReflectionMethod::isFinal()
    ReflectionMethod::isPrivate()
    ReflectionMethod::isProtected()
    ReflectionMethod::isPublic()
    ReflectionMethod::isStatic()
    ReflectionMethod::__toString()
    ReflectionObject::__construct()
    ReflectionParameter::allowsNull()
    ReflectionParameter::__construct()
    ReflectionParameter::getClass()
    ReflectionParameter::getDeclaringClass()
    ReflectionParameter::getDeclaringFunction()
    ReflectionParameter::getDefaultValue()
    ReflectionParameter::getName()
    ReflectionParameter::getPosition()
    ReflectionParameter::isArray()
    ReflectionParameter::isDefaultValueAvailable()
    ReflectionParameter::isOptional()
    ReflectionParameter::isPassedByReference()
    ReflectionParameter::__toString()
    ReflectionProperty::__construct()
    ReflectionProperty::getDeclaringClass()
    ReflectionProperty::getDefaultValue()
    ReflectionProperty::getDocComment()
    ReflectionProperty::getModifiers()
    ReflectionProperty::getName()
    ReflectionProperty::getValue()
    ReflectionProperty::isDefault()
    ReflectionProperty::isPrivate()
    ReflectionProperty::isProtected()
    ReflectionProperty::isPublic()
    ReflectionProperty::isStatic()
    ReflectionProperty::setValue()
    ReflectionProperty::__toString()

ext/simplexml
-------------
  TBD:
    SimpleXMLElement::getDocNamespaces()
    SimpleXMLElement::getNamespaces()
  Completed:
    SimpleXMLElement::addAttribute()
    SimpleXMLElement::addChild()
    SimpleXMLElement::asXML()
    SimpleXMLElement::attributes()
    SimpleXMLElement::children()
    SimpleXMLElement::getName()
    SimpleXMLElement::registerXPathNamespace()
    SimpleXMLElement::xpath()
    simplexml_import_dom()
    simplexml_load_file()
    simplexml_load_string()

ext/soap
--------
  TBD:
    SoapServer::setObject()
  Completed:
    is_soap_fault()
    SoapClient::__call()
    SoapClient::__doRequest()
    SoapClient::__getCookies()
    SoapClient::__getFunctions()
    SoapClient::__getLastRequest()
    SoapClient::__getLastRequestHeaders()
    SoapClient::__getLastResponse()
    SoapClient::__getLastResponseHeaders()
    SoapClient::__getTypes()
    SoapClient::__setCookie()
    SoapClient::__setLocation()
    SoapClient::__setSoapHeaders()
    SoapClient::SoapClient()
    SoapFault::SoapFault()
    SoapFault::__toString()
    SoapHeader::SoapHeader()
    SoapParam::SoapParam()
    SoapServer::addFunction()
    SoapServer::getFunctions()
    SoapServer::handle()
    SoapServer::setClass()
    SoapServer::setPersistence()
    SoapServer::SoapServer()
    SoapVar::SoapVar()

ext/standard
------------

  array.c
  -------
    array_change_key_case()
    array_chunk() 
    array_combine()
    array_count_values()
    array_fill()
    array_filter()
    array_flip()
    array_key_exists()
    array_keys()
    array_map()
    array_merge()
    array_merge_recursive()
    array_multisort()
    array_product()
    array_push(), array_pop(), array_shift(), array_unshift()
    array_pad()
    array_rand()
    array_reduce()
    array_reverse()
    array_search()
    array_slice()
    array_splice()
    array_sum()
    array_values()
    array_unique()
    array_walk()
    array_walk_recursive()
    compact()
    count()
    extract()
    in_array()
    min()
    max()
    range()
    shuffle()

    end(), prev(), next(), reset(), current(), key()

    sort(), rsort()
    asort(), arsort()
    ksort(), krsort() 
    usort(), uasort(), uksort()

    array_diff(), array_udiff()
    array_diff_assoc(), array_diff_uassoc(),
    array_udiff_assoc(), array_udiff_uassoc()
    array_diff_key(), array_diff_ukey()

    array_intersect(), array_uintersect()
    array_intersect_assoc(), array_uintersect_assoc()
    array_intersect_uassoc(), array_uintersect_uassoc()
    array_intersect_key(), array_intersect_ukey()


  string.c
  --------
    addcslashes()
    addslashes()
    basename()
    bin2hex()
    chr()
    chunk_split()
    count_chars()
    dirname()
    explode()
    implode()
    levenshtein()
    localeconv()
    money_format()
    nl_langinfo()
    nl2br()
    ord()
    pathinfo()
    quotemeta()
    range()
    similar_text()
    str_pad()
    str_repeat()
    str_replace()
    stri_replace()
    str_rot13()
    str_shuffle()
    str_split()
    str_word_count()
    strcoll()
    strcspn()
    strip_tags()
    stripcslashes()
    stripslashes()
    stripos()
    stristr()
    strpbrk()
    strpos()
    strrchr()
    strripos()
    strrev()
    strrpos()
    strspn()
    strstr()
    strtok()
    strtolower()
    strtoupper()
    substr()
    substr_compare()
    substr_count()
    substr_replace()
    trim()
    ucfirst()
    ucwords()

ext/sysvmsg
-----------
  Completed:
    msg_get_queue()
    msg_send()
    msg_receive()
    msg_remove_queue()
    msg_stat_queue()
    msg_set_queue()

ext/sysvsem
-----------
  Completed:
    sem_get()
    sem_acquire()
    sem_release()
    sem_remove()

ext/sysvshm
-----------
  Completed:
    shm_attach()
    shm_remove()
    shm_detach()
    shm_put_var()
    shm_has_var()
    shm_get_var()
    shm_remove_var()

ext/tidy
--------
  TBD:
    tidy_get_body()
    tidy_get_head()
    tidy_get_html()
    tidy_get_root()
    tidy_parse_file()
    tidy_repair_file()
    tidy_repair_string()
  Completed:
    tidy_access_count()
    tidy_clean_repair()
    tidy_config_count()
    tidy_diagnose()
    tidy_error_count()
    tidy_get_config()
    tidy_get_error_buffer()
    tidy_get_html_ver()
    tidy_getopt()
    tidy_get_opt_doc()
    tidy_get_output()
    tidy_get_release()
    tidy_get_status()
    tidy_is_xhtml()
    tidy_is_xml()
    tidy_parse_string()
    tidy_warning_count()
    tidyNode::getParent()
    tidyNode::hasChildren()
    tidyNode::hasSiblings()
    tidyNode::isAsp()
    tidyNode::isComment()
    tidyNode::isHtml()
    tidyNode::isJste()
    tidyNode::isPhp()
    tidyNode::isText()

ext/xml
-------
  TBD:
    xml_parse()
    xml_parse_into_struct()
    xml_parser_create()
    xml_parser_create_ns()
    xml_parser_set_option()
  Completed:
    utf8_decode()
    utf8_encode()
    xml_error_string()
    xml_get_current_byte_index()
    xml_get_current_column_number()
    xml_get_current_line_number()
    xml_get_error_code()
    xml_parser_free()
    xml_parser_get_option()
    xml_set_character_data_handler()
    xml_set_default_handler()
    xml_set_element_handler()
    xml_set_end_namespace_decl_handler()
    xml_set_external_entity_ref_handler()
    xml_set_notation_decl_handler()
    xml_set_object()
    xml_set_processing_instruction_handler()
    xml_set_start_namespace_decl_handler()
    xml_set_unparsed_entity_decl_handler()

ext/xmlreader
-------------
  Completed:
    XMLReader::close()
    XMLReader::expand()
    XMLReader::getAttribute()
    XMLReader::getAttributeNo()
    XMLReader::getAttributeNs()
    XMLReader::getParserProperty()
    XMLReader::isValid()
    XMLReader::lookupNamespace()
    XMLReader::moveToAttribute()
    XMLReader::moveToAttributeNo()
    XMLReader::moveToAttributeNs()
    XMLReader::moveToElement()
    XMLReader::moveToFirstAttribute()
    XMLReader::moveToNextAttribute()
    XMLReader::next()
    XMLReader::open()
    XMLReader::read()
    XMLReader::readInnerXml()
    XMLReader::readOuterXml()
    XMLReader::readString()
    XMLReader::setParserProperty()
    XMLReader::setRelaxNGSchema()
    XMLReader::setRelaxNGSchemaSource()
    XMLReader::setSchema()
    XMLReader::XML()

ext/xmlwriter
-------------
  Completed:
    xmlwriter_end_attribute()
    xmlwriter_end_cdata()
    xmlwriter_end_comment()
    xmlwriter_end_document()
    xmlwriter_end_dtd()
    xmlwriter_end_dtd_attlist()
    xmlwriter_end_dtd_element()
    xmlwriter_end_dtd_entity()
    xmlwriter_end_element()
    xmlwriter_end_pi()
    xmlwriter_flush()
    xmlwriter_full_end_element()
    xmlwriter_open_memory()
    xmlwriter_open_uri()
    xmlwriter_output_memory()
    xmlwriter_set_indent()
    xmlwriter_set_indent_string()
    xmlwriter_start_attribute()
    xmlwriter_start_attribute_ns()
    xmlwriter_start_cdata()
    xmlwriter_start_comment()
    xmlwriter_start_document()
    xmlwriter_start_dtd()
    xmlwriter_start_dtd_attlist()
    xmlwriter_start_dtd_element()
    xmlwriter_start_dtd_entity()
    xmlwriter_start_element()
    xmlwriter_start_element_ns()
    xmlwriter_start_pi()
    xmlwriter_text()
    xmlwriter_write_attribute()
    xmlwriter_write_attribute_ns()
    xmlwriter_write_cdata()
    xmlwriter_write_comment()
    xmlwriter_write_dtd()
    xmlwriter_write_dtd_attlist()
    xmlwriter_write_dtd_element()
    xmlwriter_write_dtd_entity()
    xmlwriter_write_element()
    xmlwriter_write_element_ns()
    xmlwriter_write_pi()
    xmlwriter_write_raw()

ext/xsl
-------
  Completed:
    xsl_xsltprocessor_get_parameter()
    xsl_xsltprocessor_has_exslt_support()
    xsl_xsltprocessor_import_stylesheet()
    xsl_xsltprocessor_register_php_functions()
    xsl_xsltprocessor_remove_parameter()
    xsl_xsltprocessor_set_parameter()
    xsl_xsltprocessor_transform_to_doc()
    xsl_xsltprocessor_transform_to_uri()
    xsl_xsltprocessor_transform_to_xml()

ext/zlib
--------
  TBD:
    zlib_filter.c
    zlib_fopen_wrapper.c

  Completed:
    gzcompress()
    gzuncompress()
    gzdeflate()
    gzinflate()
    gzencode()
    gzdecode()
    zlib_encode()
    zlib_decode()
    zlib_get_coding_type()
    readgzfile()
    gzrewind()
    gzclose()
    gzeof()
    gzgetc()
    gzgets()
    gzgetss()
    gzread()
    gzopen()
    gzpassthru()
    gzseek()
    gztell()
    gzwrite()
    gzputs()
    gzfile()
    gzcompress()
    gzuncompress()


Zend Engine
-----------
  Status: In Progress

  TBD:
        debug_backtrace()
  Completed:
        class_exists()
        create_function()
        debug_print_backtrace()
        define()
        defined()
        each()
        error_reporting()
        extension_loaded()
        func_get_arg()
        func_get_args()
        func_num_args()
        function_exists()
        get_class()
        get_class_methods()
        get_class_vars()
        get_declared_classes()
        get_declared_interfaces()
        get_defined_constants()
        get_defined_functions()
        get_defined_vars()
        get_extension_funcs()
        get_included_files()
        get_loaded_extensions()
        get_object_vars()
        get_parent_class()
        get_resource_type()
        interface_exists()
        is_a()
        is_subclass_of()
        method_exists()
        property_exists()
        restore_error_handler()
        restore_exception_handler()
        set_error_handler()
        set_exception_handler()
        strcasecmp()
        strcmp()
        strlen()
        strncasecmp()
        strncmp()
        trigger_error()
        zend_thread_id()
        zend_version()

vim: set et ts=4 sts=4:
