Skip to content

Add Curl ext PHP stubs #4557

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 16 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 148 additions & 0 deletions ext/curl/curl.stub.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
<?php

/** @param resource $handle */
function curl_close($handle): void {}

/**
* @param resource $handle
*
* @return resource|false
*/
function curl_copy_handle($handle) {}

/** @param resource $handle */
function curl_errno($handle): int {}

/** @param resource $handle */
function curl_error($handle): string {}

/**
* @param resource $handle
*
* @return string|false
*/
function curl_escape($handle, string $string) {}

/**
* @param resource $handle
*
* @return mixed|false
*/
function curl_exec($handle) {}

/** @return CURLFile */
function curl_file_create(
string $filename,
string $mimetype = UNKNOWN,
string $postname = UNKNOWN
) {}

function curl_file_name(string $name): void {}

/**
* @param resource $handle
*
* @return mixed|mixed[]|false
*/
function curl_getinfo($handle, int $option = UNKNOWN) {}

/**
* @param resource $handle
*
* @return resource|false
*/
function curl_init($handle) {}

/**
* @param resource $multi_handle
* @param resource $handle
*/
function curl_multi_add_handle($multi_handle, $handle): int {}

/** @param resource $multi_handle */
function curl_multi_close($multi_handle): void {}

/**
* @param resource $multi_handle
*
* @return int|false
*/
function curl_multi_errno($multi_handle) {}

/** @param resource $multi_handle */
function curl_multi_exec($multi_handle, int &$still_running): int {}

/** @param resource $multi_handle */
function curl_multi_getcontent($multi_handle): ?string {}

/**
* @param resource $multi_handle
*
* @return array<string, mixed>|false
*/
function curl_multi_info_read($multi_handle, ?int &$msgs_in_queue = null) {}

/** @return resource */
function curl_multi_init() {}

/**
* @param resource $multi_handle
* @param resource $handle
*/
function curl_multi_remove_handle($multi_handle, $handle): int {}

/** @param resource $multi_handle */
function curl_multi_select($multi_handle, float $timeout = UNKNOWN): int {}

/**
* @param resource $multi_handle
* @param mixed $value
*/
function curl_multi_setopt($multi_handle, int $option, $value): bool {}

function curl_multi_strerror(int $error_number): ?string {}

/** @param resource $handle */
function curl_pause($handle, int $bitmask): int {}

/** @param resource $handle */
function curl_reset($handle): void {}

/**
* @param resource $handle
* @param array<int, mixed> $options
*/
function curl_setopt_array($handle, array $options): bool {}


/**
* @param resource $handle
* @param mixed $value
*/
function curl_setopt($handle, int $option, $value): bool {}

/** @param resource $share_handle */
function curl_share_close($share_handle): void {}

/** @param resource $share_handle */
function curl_share_errno($share_handle): int {}

/** @return resource */
function curl_share_init() {}

/** @param resource $share_handle */
function curl_share_setopt($share_handle, int $option, int $value): bool {}

function curl_share_strerror(int $error_number): ?string {}

function curl_strerror(int $error_number): ?string {}

/**
* @param resource $handle
*
* @return string|false
*/
function curl_unescape($handle, string $string) {}

/** @return array<string, mixed>|false */
function curl_version(int $age = UNKNOWN) {}
132 changes: 132 additions & 0 deletions ext/curl/curl_arginfo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
/* This is a generated file, edit the .stub.php file instead. */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0)
ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_copy_handle, 0, 0, 1)
ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_errno, 0, 1, IS_LONG, 0)
ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_error, 0, 1, IS_STRING, 0)
ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_escape, 0, 0, 2)
ZEND_ARG_INFO(0, handle)
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_curl_exec arginfo_curl_copy_handle

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_file_create, 0, 0, 1)
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, mimetype, IS_STRING, 0)
ZEND_ARG_TYPE_INFO(0, postname, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_file_name, 0, 1, IS_VOID, 0)
ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_getinfo, 0, 0, 1)
ZEND_ARG_INFO(0, handle)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_curl_init arginfo_curl_copy_handle

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_add_handle, 0, 2, IS_LONG, 0)
ZEND_ARG_INFO(0, multi_handle)
ZEND_ARG_INFO(0, handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_close, 0, 1, IS_VOID, 0)
ZEND_ARG_INFO(0, multi_handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_errno, 0, 0, 1)
ZEND_ARG_INFO(0, multi_handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_exec, 0, 2, IS_LONG, 0)
ZEND_ARG_INFO(0, multi_handle)
ZEND_ARG_TYPE_INFO(1, still_running, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_getcontent, 0, 1, IS_STRING, 1)
ZEND_ARG_INFO(0, multi_handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_info_read, 0, 0, 1)
ZEND_ARG_INFO(0, multi_handle)
ZEND_ARG_TYPE_INFO(1, msgs_in_queue, IS_LONG, 1)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_init, 0, 0, 0)
ZEND_END_ARG_INFO()

#define arginfo_curl_multi_remove_handle arginfo_curl_multi_add_handle

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_select, 0, 1, IS_LONG, 0)
ZEND_ARG_INFO(0, multi_handle)
ZEND_ARG_TYPE_INFO(0, timeout, IS_DOUBLE, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_setopt, 0, 3, _IS_BOOL, 0)
ZEND_ARG_INFO(0, multi_handle)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_strerror, 0, 1, IS_STRING, 1)
ZEND_ARG_TYPE_INFO(0, error_number, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_pause, 0, 2, IS_LONG, 0)
ZEND_ARG_INFO(0, handle)
ZEND_ARG_TYPE_INFO(0, bitmask, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_curl_reset arginfo_curl_close

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_setopt_array, 0, 2, _IS_BOOL, 0)
ZEND_ARG_INFO(0, handle)
ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_setopt, 0, 3, _IS_BOOL, 0)
ZEND_ARG_INFO(0, handle)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_close, 0, 1, IS_VOID, 0)
ZEND_ARG_INFO(0, share_handle)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_errno, 0, 1, IS_LONG, 0)
ZEND_ARG_INFO(0, share_handle)
ZEND_END_ARG_INFO()

#define arginfo_curl_share_init arginfo_curl_multi_init

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_share_setopt, 0, 3, _IS_BOOL, 0)
ZEND_ARG_INFO(0, share_handle)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_curl_share_strerror arginfo_curl_multi_strerror

#define arginfo_curl_strerror arginfo_curl_multi_strerror

#define arginfo_curl_unescape arginfo_curl_escape

ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_version, 0, 0, 0)
ZEND_ARG_TYPE_INFO(0, age, IS_LONG, 0)
ZEND_END_ARG_INFO()
18 changes: 4 additions & 14 deletions ext/curl/curl_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "Zend/zend_exceptions.h"
#include "Zend/zend_interfaces.h"
#include "php_curl.h"
#include "curl_arginfo.h"
#if HAVE_CURL

PHP_CURL_API zend_class_entry *curl_CURLFile_class;
Expand Down Expand Up @@ -131,24 +132,13 @@ ZEND_METHOD(CURLFile, setPostFilename)
}
/* }}} */

ZEND_BEGIN_ARG_INFO_EX(arginfo_curlfile_create, 0, 0, 1)
ZEND_ARG_INFO(0, filename)
ZEND_ARG_INFO(0, mimetype)
ZEND_ARG_INFO(0, postname)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO(arginfo_curlfile_name, 0)
ZEND_ARG_INFO(0, name)
ZEND_END_ARG_INFO()


static const zend_function_entry curlfile_funcs[] = {
PHP_ME(CURLFile, __construct, arginfo_curlfile_create, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, __construct, arginfo_curl_file_create, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, getFilename, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, getMimeType, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, setMimeType, arginfo_curlfile_name, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, setMimeType, arginfo_curl_file_name, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, getPostFilename, NULL, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, setPostFilename, arginfo_curlfile_name, ZEND_ACC_PUBLIC)
PHP_ME(CURLFile, setPostFilename, arginfo_curl_file_name, ZEND_ACC_PUBLIC)
PHP_FE_END
};

Expand Down
Loading