-
Notifications
You must be signed in to change notification settings - Fork 7.9k
sapi/*: move duplicate "--define" code to library #8241
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
Closed
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
/* | ||
+----------------------------------------------------------------------+ | ||
| Copyright (c) The PHP Group | | ||
+----------------------------------------------------------------------+ | ||
| This source file is subject to version 3.01 of the PHP license, | | ||
| that is bundled with this package in the file LICENSE, and is | | ||
| available through the world-wide-web at the following url: | | ||
| https://www.php.net/license/3_01.txt | | ||
| If you did not receive a copy of the PHP license and are unable to | | ||
| obtain it through the world-wide-web, please send a note to | | ||
| license@php.net so we can mail you a copy immediately. | | ||
+----------------------------------------------------------------------+ | ||
| Authors: Max Kellermann <max.kellermann@ionos.com> | | ||
+----------------------------------------------------------------------+ | ||
*/ | ||
|
||
#include "php_ini_builder.h" | ||
|
||
#include <ctype.h> | ||
#include <string.h> | ||
|
||
PHPAPI void php_ini_builder_prepend(struct php_ini_builder *b, const char *src, size_t length) | ||
{ | ||
php_ini_builder_realloc(b, length); | ||
if (b->length > 0) | ||
memmove(b->value + length, b->value, b->length); | ||
memcpy(b->value, src, length); | ||
b->length += length; | ||
} | ||
|
||
PHPAPI void php_ini_builder_unquoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length) | ||
{ | ||
php_ini_builder_realloc(b, name_length + 1 + value_length + 1); | ||
|
||
memcpy(b->value + b->length, name, name_length); | ||
b->length += name_length; | ||
|
||
b->value[b->length++] = '='; | ||
|
||
memcpy(b->value + b->length, value, value_length); | ||
b->length += value_length; | ||
|
||
b->value[b->length++] = '\n'; | ||
} | ||
|
||
PHPAPI void php_ini_builder_quoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length) | ||
{ | ||
php_ini_builder_realloc(b, name_length + 2 + value_length + 2); | ||
|
||
memcpy(b->value + b->length, name, name_length); | ||
b->length += name_length; | ||
|
||
b->value[b->length++] = '='; | ||
b->value[b->length++] = '"'; | ||
|
||
memcpy(b->value + b->length, value, value_length); | ||
b->length += value_length; | ||
|
||
b->value[b->length++] = '"'; | ||
b->value[b->length++] = '\n'; | ||
} | ||
|
||
PHPAPI void php_ini_builder_define(struct php_ini_builder *b, const char *arg) | ||
{ | ||
const size_t len = strlen(arg); | ||
const char *val = strchr(arg, '='); | ||
|
||
if (val != NULL) { | ||
val++; | ||
if (!isalnum(*val) && *val != '"' && *val != '\'' && *val != '\0') { | ||
php_ini_builder_quoted(b, arg, val - arg - 1, val, arg + len - val); | ||
} else { | ||
php_ini_builder_realloc(b, len + strlen("\n")); | ||
memcpy(b->value + b->length, arg, len); | ||
b->length += len; | ||
b->value[b->length++] = '\n'; | ||
} | ||
} else { | ||
php_ini_builder_unquoted(b, arg, len, "1", 1); | ||
} | ||
} | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/* | ||
+----------------------------------------------------------------------+ | ||
| Copyright (c) The PHP Group | | ||
+----------------------------------------------------------------------+ | ||
| This source file is subject to version 3.01 of the PHP license, | | ||
| that is bundled with this package in the file LICENSE, and is | | ||
| available through the world-wide-web at the following url: | | ||
| https://www.php.net/license/3_01.txt | | ||
| If you did not receive a copy of the PHP license and are unable to | | ||
| obtain it through the world-wide-web, please send a note to | | ||
| license@php.net so we can mail you a copy immediately. | | ||
+----------------------------------------------------------------------+ | ||
| Authors: Max Kellermann <max.kellermann@ionos.com> | | ||
+----------------------------------------------------------------------+ | ||
*/ | ||
|
||
#ifndef PHP_INI_BUILDER_H | ||
#define PHP_INI_BUILDER_H | ||
|
||
#include "php.h" | ||
|
||
/** | ||
* A class which helps with constructing INI entries from the command | ||
* line. | ||
*/ | ||
struct php_ini_builder { | ||
char *value; | ||
size_t length; | ||
}; | ||
|
||
BEGIN_EXTERN_C() | ||
|
||
static inline void php_ini_builder_init(struct php_ini_builder *b) | ||
{ | ||
b->value = NULL; | ||
b->length = 0; | ||
} | ||
|
||
static inline void php_ini_builder_deinit(struct php_ini_builder *b) | ||
{ | ||
free(b->value); | ||
} | ||
|
||
/** | ||
* Null-terminate the buffer and return it. | ||
*/ | ||
static inline char *php_ini_builder_finish(struct php_ini_builder *b) | ||
{ | ||
if (b->value != NULL) { | ||
/* null-terminate the string */ | ||
b->value[b->length] = '\0'; | ||
} | ||
|
||
return b->value; | ||
} | ||
|
||
/** | ||
* Make room for more data. | ||
* | ||
* @param delta the number of bytes to be appended | ||
*/ | ||
static inline void php_ini_builder_realloc(struct php_ini_builder *b, size_t delta) | ||
{ | ||
/* reserve enough space for the null terminator */ | ||
b->value = realloc(b->value, b->length + delta + 1); | ||
} | ||
|
||
/** | ||
* Prepend a string. | ||
* | ||
* @param src the source string | ||
* @param length the size of the source string | ||
*/ | ||
PHPAPI void php_ini_builder_prepend(struct php_ini_builder *b, const char *src, size_t length); | ||
|
||
#define php_ini_builder_prepend_literal(b, l) php_ini_builder_prepend(b, l, strlen(l)) | ||
|
||
/** | ||
* Append an unquoted name/value pair. | ||
*/ | ||
PHPAPI void php_ini_builder_unquoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length); | ||
|
||
/** | ||
* Append a quoted name/value pair. | ||
*/ | ||
PHPAPI void php_ini_builder_quoted(struct php_ini_builder *b, const char *name, size_t name_length, const char *value, size_t value_length); | ||
|
||
/** | ||
* Parse an INI entry from the command-line option "--define". | ||
*/ | ||
PHPAPI void php_ini_builder_define(struct php_ini_builder *b, const char *arg); | ||
|
||
END_EXTERN_C() | ||
|
||
#endif |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe use explicit
{}
for the if block?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AFAIK we don't have any guidelines on this. I'm fine with making braces mandatory for new code but I think the risks of not adding braces are largely overblown.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think it's a risk, just confusing IMHO (at least I get confused)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The argument is usually somebody might extend the block in the
if
and forget that braces are missing.if (foo()) bar(); + baz();
Or
bar()
might be a macro containing multiple statements but we usedo {} while (0)
in our macros to prevent that.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@iluuu1994 just FYI we actually have guidelines on this:
php-src/CODING_STANDARDS.md
Lines 243 to 258 in 31692a1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bukka Ah, good to know.