summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/snmp/config.h.stub2
-rw-r--r--ext/snmp/config.m414
-rw-r--r--ext/snmp/snmp.c4
-rw-r--r--ext/standard/base64.c5
-rw-r--r--ext/standard/datetime.c19
-rw-r--r--ext/standard/file.c3
6 files changed, 34 insertions, 13 deletions
diff --git a/ext/snmp/config.h.stub b/ext/snmp/config.h.stub
index e400f18f01..2e837eac70 100644
--- a/ext/snmp/config.h.stub
+++ b/ext/snmp/config.h.stub
@@ -1,2 +1,4 @@
/* Define if you want the SNMP interface */
#define HAVE_SNMP 0
+
+#undef UCD_SNMP_HACK
diff --git a/ext/snmp/config.m4 b/ext/snmp/config.m4
index 07473fd9c8..c39d77908e 100644
--- a/ext/snmp/config.m4
+++ b/ext/snmp/config.m4
@@ -23,6 +23,20 @@ AC_ARG_WITH(snmp,
PHP_EXTENSION(snmp)
AC_ADD_LIBRARY_WITH_PATH(snmp, $SNMP_LIBDIR)
AC_ADD_INCLUDE($SNMP_INCDIR)
+ AC_CHECK_LIB(kstat, kstat_read, [AC_ADD_LIBRARY(kstat)])
+ else
+ AC_MSG_RESULT(no)
+ fi
+],[
+ AC_MSG_RESULT(no)
+])
+
+AC_MSG_CHECKING(whether to enable UCD SNMP hack)
+AC_ARG_ENABLE(ucd-snmp-hack,
+[ --enable-ucd-snmp-hack Enable UCD SNMP hack],[
+ if test "$enableval" = "yes" ; then
+ AC_DEFINE(UCD_SNMP_HACK, 1)
+ AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 7f11bb8413..13fce26a43 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -175,7 +175,11 @@ void _php3_snmp(INTERNAL_FUNCTION_PARAMETERS, int st) {
* in (at least) ucd-snmp 3.6.1 which frees
* memory it did not allocate
*/
+#ifdef UCD_SNMP_HACK
session.community = (u_char *) strdup(a2->value.str.val);
+#else
+ session.community = (u_char *) a2->value.str.val;
+#endif
session.community_len = a2->value.str.len;
session.retries = retries;
session.timeout = timeout;
diff --git a/ext/standard/base64.c b/ext/standard/base64.c
index 69bdb9d4fa..878b7244fc 100644
--- a/ext/standard/base64.c
+++ b/ext/standard/base64.c
@@ -92,10 +92,7 @@ unsigned char *_php3_base64_decode(const unsigned char *string, int length, int
while ((ch = *current++) != '\0') {
if (ch == base64_pad) break;
ch = (int)strchr(base64_table, ch);
- if (ch == 0) {
- efree(result);
- return NULL;
- }
+ if (ch == 0) continue;
ch -= (int)base64_table;
switch(i % 4) {
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index 1a0cfeca77..addc80b634 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -79,12 +79,12 @@ PHP_FUNCTION(time)
void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
{
- pval *arguments[6];
+ pval *arguments[7];
struct tm ta, *tn;
time_t t;
int i, gmadjust=0,arg_count = ARG_COUNT(ht);
- if (arg_count > 6 || getParametersArray(ht, arg_count, arguments) == FAILURE) {
+ if (arg_count > 7 || getParametersArray(ht, arg_count, arguments) == FAILURE) {
WRONG_PARAM_COUNT;
}
/* convert supplied arguments to longs */
@@ -92,14 +92,15 @@ void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
convert_to_long(arguments[i]);
}
t=time(NULL);
-#if HAVE_TZSET
+#ifdef HAVE_TZSET
tzset();
#endif
tn = localtime(&t);
memcpy(&ta,tn,sizeof(struct tm));
- ta.tm_isdst = -1;
+ ta.tm_isdst = arg_count > 6 ? arguments[6]->value.lval : gm ? 0 : -1;
switch(arg_count) {
+ case 7:
case 6:
ta.tm_year = arguments[5]->value.lval - ((arguments[5]->value.lval > 1000) ? 1900 : 0);
/* fall-through */
@@ -125,15 +126,15 @@ void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm)
if (gm) {
#if HAVE_TM_GMTOFF
- gmadjust=(tn->tm_gmtoff)/3600;
+ gmadjust=tn->tm_gmtoff;
#else
- gmadjust=timezone/3600;
+ gmadjust=timezone;
#endif
+ ta.tm_hour += gmadjust / 3600;
+ ta.tm_min += gmadjust % 3600;
}
- ta.tm_hour+=gmadjust;
- return_value->value.lval = mktime(&ta);
- return_value->type = IS_LONG;
+ RETURN_LONG(mktime(&ta));
}
PHP_FUNCTION(mktime)
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 7501bd0eea..911324556d 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -535,6 +535,9 @@ PHP_FUNCTION(tempnam)
t = tempnam(d,p);
efree(d);
+ if(!t) {
+ RETURN_FALSE;
+ }
RETURN_STRING(t,1);
}
/* }}} */