diff options
| author | Marcus Boerger <helly@php.net> | 2008-03-22 18:53:08 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2008-03-22 18:53:08 +0000 |
| commit | 978886a3a8b99d654a92c79cfc4e9d9fb7d8fb42 (patch) | |
| tree | c92c4b732225a7e6b6b8bce53330e2241084d463 /Zend | |
| parent | 708cbe15d16056917383a1a78f293de08a37b898 (diff) | |
| download | php-git-978886a3a8b99d654a92c79cfc4e9d9fb7d8fb42.tar.gz | |
- Make multibyte a tad bit less crappy
Diffstat (limited to 'Zend')
| -rw-r--r-- | Zend/zend_language_scanner.l | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 436e6e5566..a8ee9e796e 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -723,7 +723,7 @@ ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, si /* TODO: support widechars */ - for (n = 0; n < sizeof(buf) && (c = zend_stream_getc(yyin TSRMLS_CC)) != EOF && c != '\n'; ++n) { + for (n = 0; n < len && (c = zend_stream_getc(yyin TSRMLS_CC)) != EOF && c != '\n'; ++n) { buf[n] = (char)c; } if (c == '\n') { @@ -731,8 +731,8 @@ ZEND_API int zend_multibyte_yyinput(zend_file_handle *file_handle, char *buf, si } SCNG(script_org_size) = n; - SCNG(script_org) = (char*)emalloc(SCNG(script_org_size)+1); - memcpy(SCNG(script_org)+SCNG(script_org_size)-n, buf, n); + SCNG(script_org) = (char*)emalloc(SCNG(script_org_size) + 1); + memcpy(SCNG(script_org), buf, n); return n; } @@ -749,29 +749,18 @@ ZEND_API int zend_multibyte_read_script(TSRMLS_D) SCNG(script_org) = NULL; SCNG(script_org_size) = 0; - for (;;) { - n = zend_stream_read(yyin, buf, sizeof(buf) TSRMLS_CC); - if (n <= 0) { - break; - } - + for (; (n = zend_stream_read(yyin, buf, sizeof(buf) TSRMLS_CC)) > 0; ) { SCNG(script_org_size) += n; - if (SCNG(script_org)) { - SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size)+1); - } else { - SCNG(script_org) = (char*)emalloc(SCNG(script_org_size)+1); - } - memcpy(SCNG(script_org)+SCNG(script_org_size)-n, buf, n); + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size)); + memcpy(SCNG(script_org) + SCNG(script_org_size) - n, buf, n); } if (n < 0) { return -1; } - if (!SCNG(script_org)) { - SCNG(script_org) = emalloc(SCNG(script_org_size)+1); - } - *(SCNG(script_org)+SCNG(script_org_size)) = (char)NULL; + SCNG(script_org) = (char*)erealloc(SCNG(script_org), SCNG(script_org_size) + 1); + *(SCNG(script_org)+SCNG(script_org_size)) = '\0'; return 0; } |
