+#ifndef STR_FREE
+# define STR_FREE(STR) \
+ { \
+ if (STR) { \
+ efree(STR); \
+ } \
+ }
+#endif
+#ifndef STR_SET
+# define STR_SET(STR, SET) \
+ { \
+ STR_FREE(STR); \
+ STR = SET; \
+ }
+#endif
+#ifndef TSRMLS_D
+# define TSRMLS_D
+# define TSRMLS_DC
+# define TSRMLS_CC
+# define TSRMLS_C
+#endif
+#ifdef PHP_ATTRIBUTE_FORMAT
+# define PHPSTR_ATTRIBUTE_FORMAT(f, a, b) PHP_ATTRIBUTE_FORMAT(f, a, b)
+#else
+# define PHPSTR_ATTRIBUTE_FORMAT(f, a, b)
+#endif
+#ifndef pemalloc
+# define pemalloc(s,p) malloc(s)
+# define pefree(x,p) free(x)
+# define perealloc(x,s,p) realloc(x,s)
+# define perealloc_recoverable perealloc
+# define ecalloc calloc
+static inline void *estrndup(void *p, size_t s)
+{
+ char *r = (char *) malloc(s+1);
+ if (r) memcpy((void *) r, p, s), r[s] = '\0';
+ return (void *) r;
+}
+#endif
+
+#if defined(PHP_WIN32)
+# if defined(PHPSTR_EXPORTS)
+# define PHPSTR_API __declspec(dllexport)
+# elif defined(COMPILE_DL_PHPSTR)
+# define PHPSTR_API __declspec(dllimport)
+# else
+# define PHPSTR_API
+# endif