diff --git a/ext/fribidi/config.m4 b/ext/fribidi/config.m4
index f0cee962ffc..7e48b71d171 100644
--- a/ext/fribidi/config.m4
+++ b/ext/fribidi/config.m4
@@ -36,10 +36,10 @@ dnl $PHP_FRIBIDI will be "yes"
dnl check for glib header files
- AC_MSG_CHECKING([for glibconfig.h in "usr/lib/glib/include/"])
- if test -f /usr/lib/glib/include/glibconfig.h ; then
+ AC_MSG_CHECKING([for glib header files])
+ if test -f `which glib-config` ; then
AC_MSG_RESULT([found])
- GLIB_INCDIR=/usr/lib/glib/include/
+ GLIB_INCDIR=`glib-config --cflags`
else
AC_MSG_RESULT([missing])
fi
@@ -67,7 +67,7 @@ dnl $PHP_FRIBIDI will be "yes"
AC_MSG_RESULT([yes])
PHP_ADD_INCLUDE("$FRIBIDI_INCDIR")
- PHP_ADD_INCLUDE("$GLIB_INCDIR")
+ PHP_EVAL_INCLINE("$GLIB_INCDIR")
PHP_ADD_LIBRARY_WITH_PATH(fribidi,"$FRIBIDI_LIBDIR", FRIBIDI_SHARED_LIBADD)
AC_DEFINE(HAVE_FRIBIDI, 1, [ ])
diff --git a/ext/fribidi/fribidi.c b/ext/fribidi/fribidi.c
index 92c43f47d64..122e54f4e89 100755
--- a/ext/fribidi/fribidi.c
+++ b/ext/fribidi/fribidi.c
@@ -134,8 +134,8 @@ PHP_FUNCTION(fribidi_log2vis)
FriBidiCharType base_dir;
- guint16 *position_L_to_V_list;
- guint16 *position_V_to_L_list;
+ FriBidiStrIndex *position_L_to_V_list;
+ FriBidiStrIndex *position_V_to_L_list;
guint8 *embedding_level_list;
/* get parameters from input */
@@ -162,8 +162,8 @@ PHP_FUNCTION(fribidi_log2vis)
u_logical_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len);
u_visual_str = (FriBidiChar*) emalloc(sizeof(FriBidiChar)*alloc_len);
- position_L_to_V_list = (guint16*) emalloc(sizeof(guint16)*alloc_len);
- position_V_to_L_list = (guint16*) emalloc(sizeof(guint16)*alloc_len);
+ position_L_to_V_list = (FriBidiStrIndex*) emalloc(sizeof(FriBidiStrIndex)*alloc_len);
+ position_V_to_L_list = (FriBidiStrIndex*) emalloc(sizeof(FriBidiStrIndex)*alloc_len);
embedding_level_list = (guint8*) emalloc(sizeof(guint8)*alloc_len);
outString = (guchar*)emalloc(sizeof(guchar)*alloc_len);
@@ -174,25 +174,32 @@ PHP_FUNCTION(fribidi_log2vis)
switch(Z_LVAL_PP(parameter3)) {
case FRIBIDI_CHARSET_UTF8:
- utf8_len=fribidi_utf8_to_unicode(inString, u_logical_str);
+ utf8_len=fribidi_utf8_to_unicode(inString, len, u_logical_str);
break;
case FRIBIDI_CHARSET_ISO8859_6:
- fribidi_iso8859_6_to_unicode(inString, u_logical_str);
+ fribidi_iso8859_6_to_unicode(inString, len, u_logical_str);
break;
case FRIBIDI_CHARSET_ISO8859_8:
- fribidi_iso8859_8_to_unicode(inString, u_logical_str);
+ fribidi_iso8859_8_to_unicode(inString, len, u_logical_str);
break;
case FRIBIDI_CHARSET_CP1255:
- fribidi_cp1255_to_unicode(inString, u_logical_str);
+ fribidi_cp1255_to_unicode(inString, len, u_logical_str);
break;
case FRIBIDI_CHARSET_CP1256:
- fribidi_cp1256_to_unicode(inString, u_logical_str);
+ fribidi_cp1256_to_unicode(inString, len, u_logical_str);
break;
case FRIBIDI_CHARSET_ISIRI_3342:
- fribidi_isiri_3342_to_unicode(inString, u_logical_str);
+ fribidi_isiri_3342_to_unicode(inString, len, u_logical_str);
break;
default:
- zend_error(E_ERROR,"unknown character set %d
", Z_LVAL_PP(parameter3));
+ php_error_docref(NULL TSRMLS_CC, E_ERROR, "Unknown charset");
+ efree(u_logical_str);
+ efree(u_visual_str);
+ efree(position_L_to_V_list);
+ efree(position_V_to_L_list);
+ efree(embedding_level_list);
+ efree(outString);
+ RETURN_FALSE;
}
diff --git a/ext/fribidi/php_fribidi.h b/ext/fribidi/php_fribidi.h
index 4024b417a06..757a1d6d68e 100644
--- a/ext/fribidi/php_fribidi.h
+++ b/ext/fribidi/php_fribidi.h
@@ -23,6 +23,7 @@
#include "fribidi.h"
#include "../standard/info.h"
+#include
extern zend_module_entry fribidi_module_entry;
#define phpext_fribidi_ptr &fribidi_module_entry