Compare commits

...
Author SHA1 Message Date
SVN Migration 5bfa70242f This commit was manufactured by cvs2svn to create tag
'BEFORE_NEW_OPERATOR_FIX'.
1999-07-25 15:06:50 +00:00
SVN Migration b1617d8ac3 This commit was manufactured by cvs2svn to create branch 'newoperator'. 1999-07-23 14:14:43 +00:00
74 changed files with 1892 additions and 9739 deletions

No files matched your search

+22
View File
@@ -2,6 +2,28 @@ PHP 4.0 CHANGE LOG ChangeLog
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
??? ?? 1999, Version 4.0 Beta 2
- Fixed a problem with the PHP error handler that could result in a crash
on certain operating systems (Zeev)
- Apache php_flag values only recognized 'On' (case sensitive) - changed
to case insensitive (Zeev)
- Fixed a memory leak with switch statement containing return statements
(Andi & Zeev, libzend)
- Fixed a crash problem in switch statements that had a string offset
as a conditional (Andi & Zeev, libzend)
- Imported PHP3 fixes for rand() and mt_rand() (Rasmus)
- Added function entries for strip_tags() and similar_text() (Andrey)
- Fixed a bug in WDDX that would cause a crash if a number was passed in
instead of a variable name (Andrey)
- Ported strtotime() function from PHP3 (Andrey)
- Merged in gdttf stuff from php3 (Sascha)
- buildconf now checks your installation (Stig)
- XML module now built dynamically with --with-xml=shared (Stig)
- Added a check for freetype.h - fixed build on RedHat 6.0 (Zeev)
- Fixed array_walk() to work in PHP4 (Andrey)
- Ported all remaining date() format options from PHP3 (Andrey)
- $php_errormsg now works (Andrey)
- Added locale support for Perl Compatible Regexp functions (Andrey)
- Informix module ported (Danny)
- Removed --with-shared-apache (Sascha)
- Added patch for reverse lookup table in base64_decode (Sascha)
Submitted by bfranklin@dct.com
+1 -1
View File
@@ -135,7 +135,7 @@ distclean: clean distclean-recursive
-rm -f *-parser.[ch] *-scanner.c *.output
-rm -f config.status config.cache config.log
-rm -f Makefile Makefile.depend php_config.h build-defs.h
-rm -f libphp4.module stamp-h
-rm -f libphp4.module stamp-h buildconf.stamp
-rm -f regex/*.o regex/*.a regex/*.ih
-rm -f doc/checkdoc doc/funcparse doc/version.ent
-rm -f do-conf test/test.log
-4
View File
@@ -1,4 +0,0 @@
## process this file with automake to produce Makefile.am
AUTOMAKE_OPTIONS=foreign
lib_LIBRARIES=libtsrm.a
libtsrm_a_SOURCES = TSRM.c
-392
View File
@@ -1,392 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
+----------------------------------------------------------------------+
| This source file is subject to the Zend license, that is bundled |
| with this package in the file LICENSE. If you did not receive a |
| copy of the Zend license, please mail us at zend@zend.com so we can |
| send you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#include <stdio.h>
#include <stdlib.h>
#if HAVE_STDARG_H
#include <stdarg.h>
#endif
typedef struct _tsrm_tls_entry tsrm_tls_entry;
struct _tsrm_tls_entry {
void **storage;
int count;
THREAD_T thread_id;
tsrm_tls_entry *next;
};
typedef struct {
size_t size;
void (*ctor)(void *resource);
void (*dtor)(void *resource);
} tsrm_resource_type;
/* The memory manager table */
static tsrm_tls_entry **tsrm_tls_table;
static int tsrm_tls_table_size;
static ts_rsrc_id id_count;
/* The resource sizes table */
static tsrm_resource_type *resource_types_table;
static int resource_types_table_size;
static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
/* Debug support */
static int tsrm_debug(const char *format, ...);
static int tsrm_debug_status;
/* Startup TSRM (call once for the entire process) */
TSRM_FUNC int tsrm_startup(int expected_threads, int expected_resources, int debug_status)
{
tsrm_tls_table_size = expected_threads;
tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
if (!tsrm_tls_table) {
return 0;
}
id_count=0;
resource_types_table_size = expected_resources;
resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
if (!resource_types_table) {
free(tsrm_tls_table);
return 0;
}
tsmm_mutex = tsrm_mutex_alloc();
tsrm_debug_status = debug_status;
tsrm_debug("Started up TSRM, %d expected threads, %d expected resources\n", expected_threads, expected_resources);
return 1;
}
/* Shutdown TSRM (call once for the entire process) */
TSRM_FUNC void tsrm_shutdown()
{
int i;
if (tsrm_tls_table) {
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
while (p) {
int j;
next_p = p->next;
for (j=0; j<id_count; j++) {
free(p->storage[j]);
}
free(p->storage);
free(p);
p = next_p;
}
}
free(tsrm_tls_table);
}
if (resource_types_table) {
free(resource_types_table);
}
tsrm_mutex_free(tsmm_mutex);
tsrm_debug("Shutdown TSRM\n");
}
/* allocates a new thread-safe-resource id */
TSRM_FUNC ts_rsrc_id ts_allocate_id(size_t size, void (*ctor)(void *resource), void (*dtor)(void *resource))
{
ts_rsrc_id new_id;
int i;
tsrm_debug("Obtaining a new resource id, %d bytes\n", size);
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
new_id = id_count++;
tsrm_debug("Obtained resource id %d\n", new_id);
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!resource_types_table) {
return -1;
}
resource_types_table_size = id_count;
}
resource_types_table[new_id].size = size;
resource_types_table[new_id].ctor = ctor;
resource_types_table[new_id].dtor = dtor;
/* enlarge the arrays for the already active threads */
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count < id_count) {
int j;
p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
for (j=p->count; j<id_count; j++) {
p->storage[j] = (void *) malloc(resource_types_table[j].size);
if (resource_types_table[j].ctor) {
resource_types_table[j].ctor(p->storage[j]);
}
}
p->count = id_count;
}
p = p->next;
}
}
tsrm_mutex_unlock(tsmm_mutex);
tsrm_debug("Successfully allocated new resource id %d\n", new_id);
return new_id;
}
static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
{
int i;
(*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
(*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
(*thread_resources_ptr)->count = id_count;
(*thread_resources_ptr)->thread_id = thread_id;
(*thread_resources_ptr)->next = NULL;
for (i=0; i<id_count; i++) {
(*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
if (resource_types_table[i].ctor) {
resource_types_table[i].ctor((*thread_resources_ptr)->storage[i]);
}
}
}
/* fetches the requested resource for the current thread */
void *ts_resource(ts_rsrc_id id)
{
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *thread_resources;
void *resource;
tsrm_debug("Fetching resource id %d for thread %ld\n", id, (long) thread_id);
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
if (!thread_resources) {
allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
thread_resources = tsrm_tls_table[hash_value];
} else {
do {
if (thread_resources->thread_id == thread_id) {
break;
}
if (thread_resources->next) {
thread_resources = thread_resources->next;
} else {
allocate_new_resource(&thread_resources->next, thread_id);
thread_resources = thread_resources->next;
break;
}
} while (thread_resources);
}
resource = thread_resources->storage[id];
tsrm_mutex_unlock(tsmm_mutex);
tsrm_debug("Successfully fetched resource id %d for thread id %ld - %x\n", id, (long) thread_id, (long) resource);
return resource;
}
/* frees all resources allocated for the current thread */
void ts_free_thread()
{
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *thread_resources;
tsrm_tls_entry *last=NULL;
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
while (thread_resources) {
if (thread_resources->thread_id == thread_id) {
int i;
for (i=0; i<thread_resources->count; i++) {
if (resource_types_table[i].dtor) {
resource_types_table[i].dtor(thread_resources->storage[i]);
}
free(thread_resources->storage[i]);
}
free(thread_resources->storage);
if (last) {
last->next = thread_resources->next;
} else {
tsrm_tls_table[hash_value]=NULL;
}
free(thread_resources);
break;
}
if (thread_resources->next) {
last = thread_resources;
}
thread_resources = thread_resources->next;
}
tsrm_mutex_unlock(tsmm_mutex);
}
/* deallocates all occurrences of a given id */
void ts_free_id(ts_rsrc_id id)
{
}
/*
* Utility Functions
*/
/* Obtain the current thread id */
TSRM_FUNC THREAD_T tsrm_thread_id(void)
{
#ifdef WIN32
return GetCurrentThreadId();
#elif defined(PTHREADS)
return pthread_self();
#elif defined(NSAPI)
return systhread_current();
#elif defined(PI3WEB)
return PIThread_getCurrent();
#endif
}
/* Allocate a mutex */
TSRM_FUNC MUTEX_T tsrm_mutex_alloc( void )
{
MUTEX_T mutexp;
#ifdef WIN32
mutexp = CreateMutex(NULL,FALSE,NULL);
#elif defined(PTHREADS)
mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(mutexp,NULL);
#elif defined(NSAPI)
mutexp = crit_init();
#elif defined(PI3WEB)
mutexp = PIPlatform_allocLocalMutex();
#endif
#ifdef THR_DEBUG
printf("Mutex created thread: %d\n",mythreadid());
#endif
return( mutexp );
}
/* Free a mutex */
TSRM_FUNC void tsrm_mutex_free( MUTEX_T mutexp )
{
if (mutexp) {
#ifdef WIN32
CloseHandle(mutexp);
#elif defined(PTHREADS)
free(mutexp);
#elif defined(NSAPI)
crit_terminate(mutexp);
#elif defined(PI3WEB)
PISync_delete(mutexp)
#endif
}
#ifdef THR_DEBUG
printf("Mutex freed thread: %d\n",mythreadid());
#endif
}
/* Lock a mutex */
TSRM_FUNC int tsrm_mutex_lock( MUTEX_T mutexp )
{
//tsrm_debug("Mutex locked thread: %ld\n",tsrm_thread_id());
#ifdef WIN32
return WaitForSingleObject(mutexp,1000);
#elif defined(PTHREADS)
return pthread_mutex_lock(mutexp);
#elif defined(NSAPI)
return crit_enter(mutexp);
#elif defined(PI3WEB)
return PISync_lock(mutexp);
#endif
}
/* Unlock a mutex */
TSRM_FUNC int tsrm_mutex_unlock( MUTEX_T mutexp )
{
//tsrm_debug("Mutex unlocked thread: %ld\n",tsrm_thread_id());
#ifdef WIN32
return ReleaseMutex(mutexp);
#elif defined(PTHREADS)
return pthread_mutex_unlock(mutexp);
#elif defined(NSAPI)
return crit_exit(mutexp);
#elif defined(PI3WEB)
return PISync_unlock(mutexp);
#endif
}
/*
* Debug support
*/
static int tsrm_debug(const char *format, ...)
{
if (tsrm_debug_status) {
va_list args;
int size;
va_start(args, format);
size = vprintf(format, args);
va_end(args);
return size;
} else {
return 0;
}
}
void tsrm_debug_set(int status)
{
tsrm_debug_status = status;
}
-100
View File
@@ -1,100 +0,0 @@
# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=TSRM - Win32 Debug_TS
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_DEBUG"
# ADD RSC /l 0x40d /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "TSRM - Win32 Debug_TS"
# Name "TSRM - Win32 Release_TS"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\TSRM.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\TSRM.h
# End Source File
# End Group
# End Target
# End Project
-97
View File
@@ -1,97 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
+----------------------------------------------------------------------+
| This source file is subject to the Zend license, that is bundled |
| with this package in the file LICENSE. If you did not receive a |
| copy of the Zend license, please mail us at zend@zend.com so we can |
| send you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef _TSRM_H
#define _TSRM_H
#ifdef HAVE_CONFIG_H
# include "tsrm_config.h"
#endif
#if WIN32||WINNT
# include <windows.h>
#elif defined(PTHREADS)
# include <pthread.h>
#endif
typedef int ts_rsrc_id;
#if WIN32||WINNT
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#else
# define TSRM_API
#endif
/* Define TSRM_FUNC */
#ifdef __cplusplus
#define TSRM_FUNC extern "C" TSRM_API
#else
#define TSRM_FUNC TSRM_API
#endif
/* Define THREAD_T and MUTEX_T */
#if defined(WIN32)
# define THREAD_T DWORD
# define MUTEX_T void *
#elif defined(PTHREADS)
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#elif defined(NSAPI)
# define THREAD_T SYS_THREAD
# define MUTEX_T CRITICAL
#elif defined(PI3WEB)
# define THREAD_T PIThread *
# define MUTEX_T PISync *
#endif
#define THREAD_HASH_OF(thr,ts) thr%ts
/* startup/shutdown */
TSRM_FUNC int tsrm_startup(int expected_threads, int expected_resources, int debug_status);
TSRM_FUNC void tsrm_shutdown();
/* allocates a new thread-safe-resource id */
TSRM_FUNC ts_rsrc_id ts_allocate_id(size_t size, void (*ctor)(void *resource), void (*dtor)(void *resource));
/* fetches the requested resource for the current thread */
TSRM_FUNC void *ts_resource(ts_rsrc_id id);
/* frees all resources allocated for the current thread */
TSRM_FUNC void ts_free_thread();
/* deallocates all occurrences of a given id */
TSRM_FUNC void ts_free_id(ts_rsrc_id id);
/* Debug support */
TSRM_FUNC void tsrm_debug_set(int status);
/* utility functions */
TSRM_FUNC THREAD_T tsrm_thread_id(void);
TSRM_FUNC MUTEX_T tsrm_mutex_alloc(void);
TSRM_FUNC void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_FUNC int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_FUNC int tsrm_mutex_unlock(MUTEX_T mutexp);
#endif /* _TSRM_H */
-7
View File
@@ -1,7 +0,0 @@
#undef PTHREADS
#ifdef DEFINE_TSRM_VERSION
# undef PACKAGE
# undef VERSION
#endif
-24
View File
@@ -1,24 +0,0 @@
#!/bin/sh
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping ${1}aclocal.m4"
mv aclocal.m4.old aclocal.m4
else
echo "buildconf: created or modified ${1}aclocal.m4"
fi
autoheader
automake --add-missing --include-deps
mv configure configure.old 2>/dev/null
autoconf
if cmp configure.old configure > /dev/null 2>&1; then
echo "buildconf: keeping ${1}configure"
mv configure.old configure
else
echo "buildconf: created or modified ${1}configure"
fi
-24
View File
@@ -1,24 +0,0 @@
dnl $Id$
dnl
dnl Minimalistic configure.in for TSRM.
dnl
AC_INIT(TSRM.c)
AM_INIT_AUTOMAKE(TSRM, 1.0)
AM_CONFIG_HEADER(tsrm_config.h)
AC_PROG_CC
AC_PROG_CC_C_O
AC_PROG_RANLIB
AC_CHECK_LIB(pthread, pthread_create, [
AC_DEFINE(PTHREADS)
LIBS="$LIBS -lpthread"
],[
AC_MSG_ERROR(You need pthreads to build TSRM.)
])
AC_CHECK_HEADERS(stdarg.h)
AC_OUTPUT(Makefile)
+16 -1
View File
@@ -241,8 +241,23 @@ extern zend_utility_values zend_uv;
(z)->EA.is_ref = 0; \
(z)->EA.locks = 0;
#define MAKE_STD_ZVAL(zv) \
#define MAKE_STD_ZVAL(zv) \
zv = (zval *) emalloc(sizeof(zval)); \
INIT_PZVAL(zv);
#define SEPARATE_ZVAL(ppzv) \
{ \
zval *orig_ptr = *(ppzv); \
\
if (orig_ptr->refcount>1) { \
orig_ptr->refcount--; \
*(ppzv) = (zval *) emalloc(sizeof(zval)); \
**(ppzv) = *orig_ptr; \
zval_copy_ctor(*(ppzv)); \
(*(ppzv))->refcount=1; \
(*(ppzv))->EA.is_ref = 0; \
(*(ppzv))->EA.locks = 0; \
} \
}
#endif /* _ZEND_H */
+23 -3
View File
@@ -588,7 +588,6 @@ void do_free(znode *op1 CLS_DC)
&& opline->result.u.var == op1->u.var) {
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
} else {
/* This should be an object instanciation
* Find JMP_NO_CTOR, mark the preceding ASSIGN and the
* proceeding INIT_FCALL_BY_NAME as unused
@@ -833,10 +832,28 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
}
void do_return(znode *expr CLS_DC)
static void generate_free_switch_expr(zend_switch_entry *switch_entry CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_SWITCH_FREE;
opline->op1 = switch_entry->cond;
SET_UNUSED(opline->op2);
}
void do_return(znode *expr CLS_DC)
{
zend_op *opline;
#ifdef ZTS
zend_stack_apply_with_argument(&CG(switch_cond_stack), (void (*)(void *element, void *)) generate_free_switch_expr, ZEND_STACK_APPLY_TOPDOWN CLS_CC);
#else
zend_stack_apply(&CG(switch_cond_stack), (void (*)(void *element)) generate_free_switch_expr, ZEND_STACK_APPLY_TOPDOWN);
#endif
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_RETURN;
if (expr) {
opline->op1 = *expr;
@@ -1096,7 +1113,10 @@ void do_switch_end(znode *case_list CLS_DC)
CG(active_op_array)->current_brk_cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].parent;
/* emit free for the switch condition*/
do_free(&switch_entry_ptr->cond CLS_CC);
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_SWITCH_FREE;
opline->op1 = switch_entry_ptr->cond;
SET_UNUSED(opline->op2);
if (switch_entry_ptr->cond.op_type == IS_CONST) {
zval_dtor(&switch_entry_ptr->cond.u.constant);
}
+52 -51
View File
@@ -418,8 +418,8 @@ int zendlex(znode *zendlval CLS_DC);
#define ZEND_ASSIGN 36
#define ZEND_ASSIGN_REF 37
#define ZEND_ECHO 38
#define ZEND_PRINT 39
#define ZEND_ECHO 38
#define ZEND_PRINT 39
#define ZEND_JMP 40
#define ZEND_JMPZ 41
@@ -428,74 +428,75 @@ int zendlex(znode *zendlval CLS_DC);
#define ZEND_JMPZ_EX 44
#define ZEND_JMPNZ_EX 45
#define ZEND_CASE 46
#define ZEND_BRK 47
#define ZEND_CONT 48
#define ZEND_BOOL 49
#define ZEND_SWITCH_FREE 47
#define ZEND_BRK 48
#define ZEND_CONT 49
#define ZEND_BOOL 50
#define ZEND_INIT_STRING 50
#define ZEND_ADD_CHAR 51
#define ZEND_ADD_STRING 52
#define ZEND_ADD_VAR 53
#define ZEND_INIT_STRING 51
#define ZEND_ADD_CHAR 52
#define ZEND_ADD_STRING 53
#define ZEND_ADD_VAR 54
#define ZEND_BEGIN_SILENCE 54
#define ZEND_END_SILENCE 55
#define ZEND_BEGIN_SILENCE 55
#define ZEND_END_SILENCE 56
#define ZEND_INIT_FCALL_BY_NAME 56
#define ZEND_DO_FCALL 57
#define ZEND_DO_FCALL_BY_NAME 58
#define ZEND_RETURN 59
#define ZEND_INIT_FCALL_BY_NAME 57
#define ZEND_DO_FCALL 58
#define ZEND_DO_FCALL_BY_NAME 59
#define ZEND_RETURN 60
#define ZEND_RECV 60
#define ZEND_RECV_INIT 61
#define ZEND_RECV 61
#define ZEND_RECV_INIT 62
#define ZEND_SEND_VAL 62
#define ZEND_SEND_VAR 63
#define ZEND_SEND_REF 64
#define ZEND_SEND_VAL 63
#define ZEND_SEND_VAR 64
#define ZEND_SEND_REF 65
#define ZEND_NEW 65
#define ZEND_JMP_NO_CTOR 66
#define ZEND_FREE 67
#define ZEND_NEW 66
#define ZEND_JMP_NO_CTOR 67
#define ZEND_FREE 68
#define ZEND_INIT_ARRAY 68
#define ZEND_ADD_ARRAY_ELEMENT 69
#define ZEND_INIT_ARRAY 69
#define ZEND_ADD_ARRAY_ELEMENT 70
#define ZEND_INCLUDE_OR_EVAL 70
#define ZEND_INCLUDE_OR_EVAL 71
#define ZEND_UNSET_VAR 71
#define ZEND_UNSET_DIM_OBJ 72
#define ZEND_ISSET_ISEMPTY 73
#define ZEND_UNSET_VAR 72
#define ZEND_UNSET_DIM_OBJ 73
#define ZEND_ISSET_ISEMPTY 74
#define ZEND_FE_RESET 74
#define ZEND_FE_FETCH 75
#define ZEND_FE_RESET 75
#define ZEND_FE_FETCH 76
#define ZEND_EXIT 76
#define ZEND_EXIT 77
/* the following 12 opcodes are 4 groups of 3 opcodes each, and must
* remain in that order!
*/
#define ZEND_FETCH_R 77
#define ZEND_FETCH_DIM_R 78
#define ZEND_FETCH_OBJ_R 79
#define ZEND_FETCH_W 80
#define ZEND_FETCH_DIM_W 81
#define ZEND_FETCH_OBJ_W 82
#define ZEND_FETCH_RW 83
#define ZEND_FETCH_DIM_RW 84
#define ZEND_FETCH_OBJ_RW 85
#define ZEND_FETCH_IS 86
#define ZEND_FETCH_DIM_IS 87
#define ZEND_FETCH_OBJ_IS 88
#define ZEND_FETCH_R 78
#define ZEND_FETCH_DIM_R 79
#define ZEND_FETCH_OBJ_R 80
#define ZEND_FETCH_W 81
#define ZEND_FETCH_DIM_W 82
#define ZEND_FETCH_OBJ_W 83
#define ZEND_FETCH_RW 84
#define ZEND_FETCH_DIM_RW 85
#define ZEND_FETCH_OBJ_RW 86
#define ZEND_FETCH_IS 87
#define ZEND_FETCH_DIM_IS 88
#define ZEND_FETCH_OBJ_IS 89
#define ZEND_FETCH_DIM_TMP_VAR 89
#define ZEND_FETCH_CONSTANT 90
#define ZEND_FETCH_DIM_TMP_VAR 90
#define ZEND_FETCH_CONSTANT 91
#define ZEND_DECLARE_FUNCTION_OR_CLASS 91
#define ZEND_DECLARE_FUNCTION_OR_CLASS 92
#define ZEND_EXT_STMT 92
#define ZEND_EXT_FCALL_BEGIN 93
#define ZEND_EXT_FCALL_END 94
#define ZEND_EXT_NOP 95
#define ZEND_EXT_STMT 93
#define ZEND_EXT_FCALL_BEGIN 94
#define ZEND_EXT_FCALL_END 95
#define ZEND_EXT_NOP 96
/* end of block */
+38 -7
View File
@@ -1592,14 +1592,45 @@ send_by_ref:
continue;
}
break;
case ZEND_CASE:
if (opline->op1.op_type == IS_VAR) {
PZVAL_LOCK(*Ts[opline->op1.u.var].var);
case ZEND_CASE: {
int switch_expr_is_overloaded=0;
if (opline->op1.op_type==IS_VAR) {
if (Ts[opline->op1.u.var].var) {
PZVAL_LOCK(*Ts[opline->op1.u.var].var);
} else {
switch_expr_is_overloaded = 1;
if (Ts[opline->op1.u.var].EA.type==IS_STRING_OFFSET) {
Ts[opline->op1.u.var].EA.str->refcount++;
}
}
}
is_equal_function(&Ts[opline->result.u.var].tmp_var,
get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R),
get_zval_ptr(&opline->op2, Ts, &free_op2, BP_VAR_R));
FREE_OP(&opline->op2, free_op2);
if (switch_expr_is_overloaded) {
/* We only free op1 if this is a string offset,
* Since if it is a TMP_VAR, it'll be reused by
* other CASE opcodes (whereas string offsets
* are allocated at each get_zval_ptr())
*/
FREE_OP(&opline->op1, free_op1);
Ts[opline->op1.u.var].var = NULL;
}
}
break;
case ZEND_SWITCH_FREE:
switch (opline->op1.op_type) {
case IS_VAR:
get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R);
FREE_OP(&opline->op1, free_op1);
break;
case IS_TMP_VAR:
zendi_zval_dtor(Ts[opline->op1.u.var].tmp_var);
break;
}
is_equal_function(&Ts[opline->result.u.var].tmp_var,
get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R),
get_zval_ptr(&opline->op2, Ts, &free_op2, BP_VAR_R) );
FREE_OP(&opline->op2, free_op2);
break;
case ZEND_NEW: {
zval *tmp = get_zval_ptr(&opline->op1, Ts, &free_op1, BP_VAR_R);
+1 -1
View File
@@ -28,7 +28,7 @@ typedef union _temp_variable {
zval tmp_var;
zval **var;
struct {
zval **var_dummy; /* a dummy */
zval tmp_var; /* a dummy */
zval *str;
int offset;
+1 -6
View File
@@ -162,34 +162,29 @@ ZEND_API void convert_to_long_base(zval *op, int base)
case IS_BOOL:
case IS_RESOURCE:
case IS_LONG:
return;
break;
case IS_DOUBLE:
op->value.lval = (long) op->value.dval;
op->type = IS_LONG;
break;
case IS_STRING:
strval = op->value.str.val;
op->value.lval = strtol(strval, NULL, base);
op->type = IS_LONG;
STR_FREE(strval);
break;
case IS_ARRAY:
tmp = (zend_hash_num_elements(op->value.ht)?1:0);
zval_dtor(op);
op->value.lval = tmp;
op->type = IS_LONG;
break;
case IS_OBJECT:
tmp = (zend_hash_num_elements(op->value.obj.properties)?1:0);
zval_dtor(op);
op->value.lval = tmp;
op->type = IS_LONG;
break;
default:
zend_error(E_WARNING, "Cannot convert to ordinal value");
zval_dtor(op);
op->value.lval = 0;
op->type = IS_LONG;
break;
}
+38
View File
@@ -116,3 +116,41 @@ ZEND_API int zend_stack_count(zend_stack *stack)
{
return stack->top;
}
ZEND_API void zend_stack_apply(zend_stack *stack, void (*apply_function)(void *element), int type)
{
int i;
switch (type) {
case ZEND_STACK_APPLY_TOPDOWN:
for (i=stack->top-1; i>=0; i--) {
apply_function(stack->elements[i]);
}
break;
case ZEND_STACK_APPLY_BOTTOMUP:
for (i=0; i<stack->top; i++) {
apply_function(stack->elements[i]);
}
break;
}
}
ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, void (*apply_function)(void *element, void *arg), int type, void *arg)
{
int i;
switch (type) {
case ZEND_STACK_APPLY_TOPDOWN:
for (i=stack->top-1; i>=0; i--) {
apply_function(stack->elements[i], arg);
}
break;
case ZEND_STACK_APPLY_BOTTOMUP:
for (i=0; i<stack->top; i++) {
apply_function(stack->elements[i], arg);
}
break;
}
}
+4
View File
@@ -38,6 +38,10 @@ ZEND_API int zend_stack_is_empty(zend_stack *stack);
ZEND_API int zend_stack_destroy(zend_stack *stack);
ZEND_API void **zend_stack_base(zend_stack *stack);
ZEND_API int zend_stack_count(zend_stack *stack);
ZEND_API void zend_stack_apply(zend_stack *stack, void (*apply_function)(void *element), int type);
ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, void (*apply_function)(void *element, void *arg), int type, void *arg);
#define ZEND_STACK_APPLY_TOPDOWN 1
#define ZEND_STACK_APPLY_BOTTOMUP 2
#endif /* _ZEND_STACK_H */
+1 -1
View File
@@ -7,7 +7,7 @@
#undef HAVE_STRUCT_FLOCK
#undef HAVE_TM_GMTOFF
#define CONFIGURATION_FILE_PATH "php3.ini"
#define CONFIGURATION_FILE_PATH "php.ini"
#define USE_CONFIG_FILE 1
#undef HAVE_DMALLOC
+24
View File
@@ -158,3 +158,27 @@ AC_SUBST(EXT_LIBS)
AC_SUBST(EXTINFO_DEPS)
dnl AC_SUBST(EXT_INCLUDE_CODE)
dnl AC_SUBST(EXT_MODULES_PTRS)
dnl
dnl Solaris requires main code to be position independent in order
dnl to let shared objects find symbols. Weird. Ugly.
dnl
dnl Must be run after all --with-NN options that let the user
dnl choose dynamic extensions, and after the gcc test.
dnl
AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[
AC_MSG_CHECKING(whether -fPIC is required)
if test "$EXT_SHARED" != ""; then
os=`uname -sr 2>/dev/null`
case "$os" in
"SunOS 5.6"|"SunOS 5.7")
case "$CC" in
gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";;
*) CFLAGS="$CFLAGS -fpic";;
esac
AC_MSG_RESULT(yes);;
*)
AC_MSG_RESULT(no);;
esac
fi
])
+27 -4
View File
@@ -3,6 +3,8 @@
# do some version checking for the tools we use
if test "$1" = "--force"; then
shift
elif test -r buildconf.stamp ; then
:
else
echo "buildconf: checking installation..."
@@ -42,15 +44,34 @@ else
echo "buildconf: automake version $am_version (ok)"
fi
# The stuff from libtool we need is in CVS right now, so it is
# not required to run buildconf.
# libtool 1.2f or newer
lt_pversion=`libtool --version 2>/dev/null|sed -e 's/^[^0-9]*//' -e 's/ .*//'`
if test "$lt_pversion" = ""; then
echo "buildconf: libtool not found."
echo " You need libtool version 1.3 or newer installed"
echo " to build PHP from CVS."
exit 1
fi
lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
IFS=.; set $lt_version; IFS=' '
if test "$1" -gt "1" || test "$2" -ge "3" || test "$2" = "2" -a "$3" = "f"
then
echo "buildconf: libtool version $lt_pversion (ok)"
else
echo "buildconf: libtool version $lt_pversion found."
echo " You need libtool version 1.2f or newer installed"
echo " to build PHP from CVS."
exit 1
fi
touch buildconf.stamp
fi
if test "$1" = "--copy"; then
automake_flags=--copy
fi
if ! test -d libzend; then
if test ! -d libzend; then
if test -d ../libzend; then
echo "buildconf: linking ../libzend to ./libzend"
ln -s ../libzend .
@@ -60,7 +81,7 @@ if ! test -d libzend; then
exit 1
fi
fi
if ! test -d TSRM; then
if test ! -d TSRM; then
if test -d ../TSRM; then
echo "buildconf: linking ../TSRM to ./TSRM"
ln -s ../TSRM .
@@ -73,6 +94,8 @@ fi
./scripts/preconfig
libtoolize --automake $automake_flags --force
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
-997
View File
@@ -1,997 +0,0 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>.
# The master version of this file is at the FSF in /home/gd/gnu/lib.
# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
# The plan is that this can be called by configure scripts if you
# don't specify an explicit system type (host/target name).
#
# Only a few systems have been added to this list; please add others
# (but try to keep the structure clean).
#
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 8/24/94.)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
dummy=dummy-$$
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
alpha:OSF1:*:*)
if test $UNAME_RELEASE = "V4.0"; then
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
fi
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
cat <<EOF >$dummy.s
.globl main
.ent main
main:
.frame \$30,0,\$26,0
.prologue 0
.long 0x47e03d80 # implver $0
lda \$2,259
.long 0x47e20c21 # amask $2,$1
srl \$1,8,\$2
sll \$2,2,\$2
sll \$0,3,\$0
addl \$1,\$0,\$0
addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
${CC-cc} $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
;;
15)
UNAME_MACHINE="alphaev5"
;;
14)
UNAME_MACHINE="alphaev56"
;;
10)
UNAME_MACHINE="alphapca56"
;;
16)
UNAME_MACHINE="alphaev6"
;;
esac
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-cbm-sysv4
exit 0;;
amiga:NetBSD:*:*)
echo m68k-cbm-netbsd${UNAME_RELEASE}
exit 0 ;;
amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
arc64:OpenBSD:*:*)
echo mips64el-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
arc:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
hkmips:OpenBSD:*:*)
echo mips-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
pmax:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sgi:OpenBSD:*:*)
echo mips-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
wgrisc:OpenBSD:*:*)
echo mipsel-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
arm32:NetBSD:*:*)
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
else
echo pyramid-pyramid-bsd
fi
exit 0 ;;
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
i86pc:SunOS:5.*:*)
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
exit 0 ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
echo m68k-sun-sunos${UNAME_RELEASE}
;;
sun4)
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
exit 0 ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
atari*:NetBSD:*:*)
echo m68k-atari-netbsd${UNAME_RELEASE}
exit 0 ;;
atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:NetBSD:*:*)
echo m68k-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mvme68k:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mvme88k:OpenBSD:*:*)
echo m88k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
macppc:NetBSD:*:*)
echo powerpc-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit 0 ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
2020:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
#endif
#endif
exit (-1);
}
EOF
${CC-cc} $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
exit 0 ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
exit 0 ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
exit 0 ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
echo m88k-dg-dgux${UNAME_RELEASE}
else
echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
else echo i586-dg-dgux${UNAME_RELEASE}
fi
exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit 0 ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
exit 0 ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
exit 0 ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
exit 0 ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
exit 0 ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i?86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
main()
{
if (!__power_pc())
exit(1);
puts("powerpc-ibm-aix3.2.5");
exit(0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
*:AIX:*:4)
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
fi
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
IBM_REV=4.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
*:AIX:*:*)
echo rs6000-ibm-aix
exit 0 ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
exit 0 ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
exit 0 ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
exit 0 ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[34678]??:HP-UX:*:*)
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[136790] | 9000/892 )
sed 's/^ //' << EOF >$dummy.c
#include <stdlib.h>
#include <unistd.h>
int main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
#endif
long cpu = sysconf (_SC_CPU_VERSION);
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
case CPU_PA_RISC2_0:
#if defined(_SC_KERNEL_BITS)
switch (bits)
{
case 64: puts ("hppa2.0w"); break;
case 32: puts ("hppa2.0n"); break;
default: puts ("hppa2.0"); break;
} break;
#else /* !defined(_SC_KERNEL_BITS) */
puts ("hppa2.0"); break;
#endif
default: puts ("hppa1.0"); break;
}
exit (0);
}
EOF
(${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
rm -f $dummy.c $dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
3050*:HI-UX:*:*)
sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
main ()
{
long cpu = sysconf (_SC_CPU_VERSION);
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
results, however. */
if (CPU_IS_PA_RISC (cpu))
{
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
default: puts ("hppa-hitachi-hiuxwe2"); break;
}
}
else if (CPU_IS_HP_MC68K (cpu))
puts ("m68k-hitachi-hiuxwe2");
else puts ("unknown-hitachi-hiuxwe2");
exit (0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
exit 0 ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
*9??*:MPE*:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
*9??*:MPE*:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit 0 ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit 0 ;;
i?86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
exit 0 ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit 0 ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
exit 0 ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
exit 0 ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit 0 ;;
CRAY*X-MP:*:*:*)
echo xmp-cray-unicos
exit 0 ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
exit 0 ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*T3E:*:*:*)
echo t3e-cray-unicosmk${UNAME_RELEASE}
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
exit 0 ;;
F300:UNIX_System_V:*:*)
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
F301:UNIX_System_V:*:*)
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
exit 0 ;;
hp3[0-9][05]:NetBSD:*:*)
echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
if test -x /usr/bin/objformat; then
if test "elf" = "`/usr/bin/objformat`"; then
echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
exit 0
fi
fi
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit 0 ;;
*:NetBSD:*:*)
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
*:OpenBSD:*:*)
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit 0 ;;
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# # uname on the ARM produces all sorts of strangeness, and we need to
# # filter it out.
# case "$UNAME_MACHINE" in
# armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
# arm* | sa110*) UNAME_MACHINE="arm" ;;
# esac
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
ld_supported_emulations=`echo $ld_help_string \
| sed -ne '/supported emulations:/!d
s/[ ][ ]*/ /g
s/.*supported emulations: *//
s/ .*//
p'`
case "$ld_supported_emulations" in
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
elf32arm) echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
esac
if test "${UNAME_MACHINE}" = "alpha" ; then
sed 's/^ //' <<EOF >$dummy.s
.globl main
.ent main
main:
.frame \$30,0,\$26,0
.prologue 0
.long 0x47e03d80 # implver $0
lda \$2,259
.long 0x47e20c21 # amask $2,$1
srl \$1,8,\$2
sll \$2,2,\$2
sll \$0,3,\$0
addl \$1,\$0,\$0
addl \$2,\$0,\$0
ret \$31,(\$26),1
.end main
EOF
LIBC=""
${CC-cc} $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
;;
15)
UNAME_MACHINE="alphaev5"
;;
14)
UNAME_MACHINE="alphaev56"
;;
10)
UNAME_MACHINE="alphapca56"
;;
16)
UNAME_MACHINE="alphaev6"
;;
esac
objdump --private-headers $dummy | \
grep ld.so.1 > /dev/null
if test "$?" = 0 ; then
LIBC="libc1"
fi
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
elif test "${UNAME_MACHINE}" = "mips" ; then
cat >$dummy.c <<EOF
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#ifdef __MIPSEB__
printf ("%s-unknown-linux-gnu\n", argv[1]);
#endif
#ifdef __MIPSEL__
printf ("%sel-unknown-linux-gnu\n", argv[1]);
#endif
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
else
# Either a pre-BFD a.out linker (linux-gnuoldld)
# or one that does not give us useful --help.
# GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
# If ld does not provide *any* "supported emulations:"
# that means it is gnuoldld.
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
case "${UNAME_MACHINE}" in
i?86)
VENDOR=pc;
;;
*)
VENDOR=unknown;
;;
esac
# Determine whether the default compiler is a.out or elf
cat >$dummy.c <<EOF
#include <features.h>
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#ifdef __ELF__
# ifdef __GLIBC__
# if __GLIBC__ >= 2
printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
# else
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
# endif
# else
printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
# endif
#else
printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename.
i?86:DYNIX/ptx:4*:*)
echo i386-sequent-sysv4
exit 0 ;;
i?86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;;
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;;
i?86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
i?86:UnixWare:*:*)
if /bin/uname -X 2>/dev/null >/dev/null ; then
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
fi
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
exit 0 ;;
pc:*:*:*)
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp
exit 0 ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit 0 ;;
paragon:*:*:*)
echo i860-intel-osf1
exit 0 ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
exit 0 ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
exit 0 ;;
M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
m68*:LynxOS:2.*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
echo ${UNAME_MACHINE}-sni-sysv4
else
echo ns32k-sni-sysv
fi
exit 0 ;;
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
exit 0 ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
exit 0 ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit 0 ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
exit 0 ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit 0 ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit 0 ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
exit 0 ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
#endif
main ()
{
#if defined (sony)
#if defined (MIPSEB)
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
I don't know.... */
printf ("mips-sony-bsd\n"); exit (0);
#else
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
"4"
#else
""
#endif
); exit (0);
#endif
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
printf ("arm-acorn-riscix"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
printf ("m68k-hp-bsd\n"); exit (0);
#endif
#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
if (version < 4)
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
#if defined (MULTIMAX) || defined (n16)
#if defined (UMAXV)
printf ("ns32k-encore-sysv\n"); exit (0);
#else
#if defined (CMU)
printf ("ns32k-encore-mach\n"); exit (0);
#else
printf ("ns32k-encore-bsd\n"); exit (0);
#endif
#endif
#endif
#if defined (__386BSD__)
printf ("i386-pc-bsd\n"); exit (0);
#endif
#if defined (sequent)
#if defined (i386)
printf ("i386-sequent-dynix\n"); exit (0);
#endif
#if defined (ns32000)
printf ("ns32k-sequent-dynix\n"); exit (0);
#endif
#endif
#if defined (_SEQUENT_)
struct utsname un;
uname(&un);
if (strncmp(un.version, "V2", 2) == 0) {
printf ("i386-sequent-ptx2\n"); exit (0);
}
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
printf ("i386-sequent-ptx1\n"); exit (0);
}
printf ("i386-sequent-ptx\n"); exit (0);
#endif
#if defined (vax)
#if !defined (ultrix)
printf ("vax-dec-bsd\n"); exit (0);
#else
printf ("vax-dec-ultrix\n"); exit (0);
#endif
#endif
#if defined (alliant) && defined (i860)
printf ("i860-alliant-bsd\n"); exit (0);
#endif
exit (1);
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
# Apollos put the system type in the environment.
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
# Convex versions that predate uname can use getsysinfo(1)
if [ -x /usr/convex/getsysinfo ]
then
case `getsysinfo -f cpu_type` in
c1*)
echo c1-convex-bsd
exit 0 ;;
c2*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit 0 ;;
c34*)
echo c34-convex-bsd
exit 0 ;;
c38*)
echo c38-convex-bsd
exit 0 ;;
c4*)
echo c4-convex-bsd
exit 0 ;;
esac
fi
#echo '(Unable to guess system type)' 1>&2
exit 1
Vendored
-979
View File
@@ -1,979 +0,0 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support. The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
if [ x$1 = x ]
then
echo Configuration name missing. 1>&2
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
echo "or $0 ALIAS" 1>&2
echo where ALIAS is a recognized configuration type. 1>&2
exit 1
fi
# First pass through any local machine types.
case $1 in
*local*)
echo $1
exit 0
;;
*)
;;
esac
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
linux-gnu*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/.*-/-/'`
else os=; fi
;;
esac
### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work. We also
### recognize some manufacturers as not being operating systems, so we
### can provide default operating systems below.
case $os in
-sun*os*)
# Prevent following clause from handling this invalid input.
;;
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple)
os=
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
os=sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
os=-sco3.2v4
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2v[4-9]*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-clix*)
basic_machine=clipper-intergraph
;;
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-lynx*)
os=-lynxos
;;
-ptx*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
;;
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
-psos*)
os=-psos
;;
esac
# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
| hppa2.0w \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el | armv[34][lb] \
| sparc | sparclet | sparclite | sparc64 | v850)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
i[34567]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
*-*-*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
# Recognize the basic CPU types with company name.
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
| hppa2.0w-* \
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\
| mips64el-* | mips64orion-* | mips64orionel-* \
| mipstx39-* | mipstx39el-* \
| f301-* | armv*-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
alliant | fx80)
basic_machine=fx80-alliant
;;
altos | altos3068)
basic_machine=m68k-altos
;;
am29k)
basic_machine=a29k-none
os=-bsd
;;
amdahl)
basic_machine=580-amdahl
os=-sysv
;;
amiga | amiga-*)
basic_machine=m68k-cbm
;;
amigaos | amigados)
basic_machine=m68k-cbm
os=-amigaos
;;
amigaunix | amix)
basic_machine=m68k-cbm
os=-sysv4
;;
apollo68)
basic_machine=m68k-apollo
os=-sysv
;;
aux)
basic_machine=m68k-apple
os=-aux
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
;;
convex-c1)
basic_machine=c1-convex
os=-bsd
;;
convex-c2)
basic_machine=c2-convex
os=-bsd
;;
convex-c32)
basic_machine=c32-convex
os=-bsd
;;
convex-c34)
basic_machine=c34-convex
os=-bsd
;;
convex-c38)
basic_machine=c38-convex
os=-bsd
;;
cray | ymp)
basic_machine=ymp-cray
os=-unicos
;;
cray2)
basic_machine=cray2-cray
os=-unicos
;;
[ctj]90-cray)
basic_machine=c90-cray
os=-unicos
;;
crds | unos)
basic_machine=m68k-crds
;;
da30 | da30-*)
basic_machine=m68k-da30
;;
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
basic_machine=m68k-motorola
;;
delta88)
basic_machine=m88k-motorola
os=-sysv3
;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
;;
dpx2* | dpx2*-bull)
basic_machine=m68k-bull
os=-sysv3
;;
ebmon29k)
basic_machine=a29k-amd
os=-ebmon
;;
elxsi)
basic_machine=elxsi-elxsi
os=-bsd
;;
encore | umax | mmax)
basic_machine=ns32k-encore
;;
fx2800)
basic_machine=i860-alliant
;;
genix)
basic_machine=ns32k-ns
;;
gmicro)
basic_machine=tron-gmicro
os=-sysv
;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
h8300hms)
basic_machine=h8300-hitachi
os=-hms
;;
harris)
basic_machine=m88k-harris
os=-sysv3
;;
hp300-*)
basic_machine=m68k-hp
;;
hp300bsd)
basic_machine=m68k-hp
os=-bsd
;;
hp300hpux)
basic_machine=m68k-hp
os=-hpux
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hppa-next)
os=-nextstep3
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
os=-mpeix
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
os=-mpeix
;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[34567]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
i[34567]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
i[34567]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
i[34567]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
-irix*)
;;
*)
os=-irix4
;;
esac
;;
isi68 | isi)
basic_machine=m68k-isi
os=-sysv
;;
m88k-omron*)
basic_machine=m88k-omron
;;
magnum | m3230)
basic_machine=mips-mips
os=-sysv
;;
merlin)
basic_machine=ns32k-utek
os=-sysv
;;
miniframe)
basic_machine=m68000-convergent
;;
mipsel*-linux*)
basic_machine=mipsel-unknown
os=-linux-gnu
;;
mips*-linux*)
basic_machine=mips-unknown
os=-linux-gnu
;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
netwinder)
basic_machine=armv4l-corel
os=-linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
;;
news1000)
basic_machine=m68030-sony
os=-newsos
;;
news-3600 | risc-news)
basic_machine=mips-sony
os=-newsos
;;
next | m*-next )
basic_machine=m68k-next
case $os in
-nextstep* )
;;
-ns2*)
os=-nextstep2
;;
*)
os=-nextstep3
;;
esac
;;
nh3000)
basic_machine=m68k-harris
os=-cxux
;;
nh[45]000)
basic_machine=m88k-harris
os=-cxux
;;
nindy960)
basic_machine=i960-intel
os=-nindy
;;
np1)
basic_machine=np1-gould
;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
paragon)
basic_machine=i860-intel
os=-osf
;;
pbd)
basic_machine=sparc-tti
;;
pbb)
basic_machine=m68k-tti
;;
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5 | k5 | nexen)
basic_machine=i586-pc
;;
pentiumpro | p6 | k6 | 6x86)
basic_machine=i686-pc
;;
pentiumii | pentium2)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | k6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
power) basic_machine=rs6000-ibm
;;
ppc) basic_machine=powerpc-unknown
;;
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
;;
ppcle-* | powerpclittle-*)
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ps2)
basic_machine=i386-ibm
;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
sequent)
basic_machine=i386-sequent
;;
sh)
basic_machine=sh-hitachi
os=-hms
;;
sps7)
basic_machine=m68k-bull
os=-sysv2
;;
spur)
basic_machine=spur-unknown
;;
sun2)
basic_machine=m68000-sun
;;
sun2os3)
basic_machine=m68000-sun
os=-sunos3
;;
sun2os4)
basic_machine=m68000-sun
os=-sunos4
;;
sun3os3)
basic_machine=m68k-sun
os=-sunos3
;;
sun3os4)
basic_machine=m68k-sun
os=-sunos4
;;
sun4os3)
basic_machine=sparc-sun
os=-sunos3
;;
sun4os4)
basic_machine=sparc-sun
os=-sunos4
;;
sun4sol2)
basic_machine=sparc-sun
os=-solaris2
;;
sun3 | sun3-*)
basic_machine=m68k-sun
;;
sun4)
basic_machine=sparc-sun
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
symmetry)
basic_machine=i386-sequent
os=-dynix
;;
tx39)
basic_machine=mipstx39-unknown
;;
tx39el)
basic_machine=mipstx39el-unknown
;;
tower | tower-32)
basic_machine=m68k-ncr
;;
udi29k)
basic_machine=a29k-amd
os=-udi
;;
ultra3)
basic_machine=a29k-nyu
os=-sym1
;;
vaxv)
basic_machine=vax-dec
os=-sysv
;;
vms)
basic_machine=vax-dec
os=-vms
;;
vpp*|vx|vx-*)
basic_machine=f301-fujitsu
;;
vxworks960)
basic_machine=i960-wrs
os=-vxworks
;;
vxworks68)
basic_machine=m68k-wrs
os=-vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
os=-vxworks
;;
xmp)
basic_machine=xmp-cray
os=-unicos
;;
xps | xps100)
basic_machine=xps100-honeywell
;;
none)
basic_machine=none-none
os=-none
;;
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
mips)
if [ x$os = x-linux-gnu ]; then
basic_machine=mips-unknown
else
basic_machine=mips-mips
fi
;;
romp)
basic_machine=romp-ibm
;;
rs6000)
basic_machine=rs6000-ibm
;;
vax)
basic_machine=vax-dec
;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
sparc)
basic_machine=sparc-sun
;;
cydra)
basic_machine=cydra-cydrome
;;
orion)
basic_machine=orion-highlevel
;;
orion105)
basic_machine=clipper-highlevel
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
esac
# Here we canonicalize certain aliases for manufacturers.
case $basic_machine in
*-digital*)
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
;;
*-commodore*)
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
;;
*)
;;
esac
# Decode manufacturer-specific aliases for certain operating systems.
if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
-solaris)
os=-solaris2
;;
-svr4*)
os=-sysv4
;;
-unixware*)
os=-sysv4.2uw
;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
# First accept the basic system types.
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \
| -openstep* | -mpeix* | -oskit*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
-sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'`
;;
-osfrose*)
os=-osfrose
;;
-osf*)
os=-osf
;;
-utek*)
os=-bsd
;;
-dynix*)
os=-bsd
;;
-acis*)
os=-aos
;;
-ctix* | -uts*)
os=-sysv
;;
-ns2 )
os=-nextstep2
;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
;;
-sinix*)
os=-sysv4
;;
-triton*)
os=-sysv3
;;
-oss*)
os=-sysv3
;;
-svr4)
os=-sysv4
;;
-svr3)
os=-sysv3
;;
-sysvr4)
os=-sysv4
;;
# This must come after -sysvr4.
-sysv*)
;;
-xenix)
os=-xenix
;;
-none)
;;
*)
# Get rid of the `-' at the beginning of $os.
os=`echo $os | sed 's/[^-]*-//'`
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
exit 1
;;
esac
else
# Here we handle the default operating systems that come with various machines.
# The value should be what the vendor currently ships out the door with their
# machine or put another way, the most popular os provided with the machine.
# Note that if you're going to try to match "-MANUFACTURER" here (say,
# "-sun"), then you have to tell the case statement up towards the top
# that MANUFACTURER isn't an operating system. Otherwise, code above
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
case $basic_machine in
*-acorn)
os=-riscix1.2
;;
arm*-corel)
os=-linux
;;
arm*-semi)
os=-aout
;;
pdp11-*)
os=-none
;;
*-dec | vax-*)
os=-ultrix4.2
;;
m68*-apollo)
os=-domain
;;
i386-sun)
os=-sunos4.0.2
;;
m68000-sun)
os=-sunos3
# This also exists in the configure program, but was not the
# default.
# os=-sunos4
;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
sparc-* | *-sun)
os=-sunos4.1.1
;;
*-be)
os=-beos
;;
*-ibm)
os=-aix
;;
*-hp)
os=-hpux
;;
*-hitachi)
os=-hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
os=-sysv
;;
*-cbm)
os=-amigaos
;;
*-dg)
os=-dgux
;;
*-dolphin)
os=-sysv3
;;
m68k-ccur)
os=-rtu
;;
m88k-omron*)
os=-luna
;;
*-next )
os=-nextstep
;;
*-sequent)
os=-ptx
;;
*-crds)
os=-unos
;;
*-ns)
os=-genix
;;
i370-*)
os=-mvs
;;
*-next)
os=-nextstep3
;;
*-gould)
os=-sysv
;;
*-highlevel)
os=-bsd
;;
*-encore)
os=-bsd
;;
*-sgi)
os=-irix
;;
*-siemens)
os=-sysv4
;;
*-masscomp)
os=-rtu
;;
f301-fujitsu)
os=-uxpv
;;
*)
os=-none
;;
esac
fi
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
vendor=unknown
case $basic_machine in
*-unknown)
case $os in
-riscix*)
vendor=acorn
;;
-sunos*)
vendor=sun
;;
-aix*)
vendor=ibm
;;
-hpux*)
vendor=hp
;;
-mpeix*)
vendor=hp
;;
-mpeix*)
vendor=hp
;;
-hiux*)
vendor=hitachi
;;
-unos*)
vendor=crds
;;
-dgux*)
vendor=dg
;;
-luna*)
vendor=omron
;;
-genix*)
vendor=ns
;;
-mvs*)
vendor=ibm
;;
-ptx*)
vendor=sequent
;;
-vxsim* | -vxworks*)
vendor=wrs
;;
-aux*)
vendor=apple
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
esac
echo $basic_machine$os
+11 -9
View File
@@ -29,17 +29,16 @@ if test "$recurse" = "yes"; then
if test "$threadsafe" = "yes"; then
(set -x; test -d TSRM || mkdir TSRM; cd TSRM; $cwd/$srcdir/TSRM/configure --cache-file=$cachefile $@)
fi
(set -x; cd $srcdir; sh ltconfig --disable-static --enable-dlopen --cache-file=$cachefile ltmain.sh)
fi
(set -x; cd $srcdir; ./ltconfig --disable-static --enable-dlopen --cache-file=$cachefile ltmain.sh)
dnl ## Diversion 1 is the initial checking of OS features, programs,
dnl ## libraries and so on.
dnl ## In diversion 2 we check for compile-time options to the PHP
dnl ## core and how to deal with different system dependencies. This
dnl ## includes what regex library is used and whether debugging or short
dnl ## tags are enabled, and the default behaviour of php3.ini options.
dnl ## tags are enabled, and the default behaviour of php.ini options.
dnl ## This is also where an SAPI interface is selected (choosing between
dnl ## Apache module, CGI etc.)
@@ -53,8 +52,6 @@ divert(1)
dnl ## This is where the version number is changed from now on!
AM_INIT_AUTOMAKE(php, 4.0b2-dev)
PHP_VERSION=$VERSION
echo "/* automatically generated by configure */" > php_version.h.new
echo "/* edit configure.in.in to change version number */" >> php_version.h.new
@@ -86,9 +83,11 @@ if test "$YACC" != "bison -y"; then
AC_MSG_WARN(You will need bison if you want to regenerate the PHP parsers.)
else
AC_MSG_CHECKING(bison version)
set `$YACC --version| sed -e 's/^GNU Bison version //' -e 's/\./ /'`
oldIFS=$IFS; IFS=.
set `bison -V | sed -e 's/^GNU Bison version //'`
IFS=$oldIFS
if test "$1" = "1" -a "$2" -lt "25"; then
AC_MSG_WARN(You will need bison 1.25 if you want to regenerate the PHP parsers (found $1.$2).)
AC_MSG_WARN(Bison 1.25 or newer needed to regenerate parsers (found $1.$2).)
fi
AC_MSG_RESULT($1.$2 (ok))
fi
@@ -599,7 +598,7 @@ AC_SUBST(FHTTPD_TARGET)
AC_MSG_CHECKING(whether to use a configuration file)
AC_ARG_WITH(config-file-path,
[ --with-config-file-path=PATH Sets the path in which to look for php3.ini
[ --with-config-file-path=PATH Sets the path in which to look for php.ini
defaults to /usr/local/lib],
[
if test "$withval" = "yes"; then
@@ -871,6 +870,9 @@ dnl *** to supply it only when absolutely necessary
dnl If we are using gcc add -fpic to make dl() work on some platforms
dnl test -n "$GCC" && CFLAGS="$CFLAGS -fpic"
dnl add -fPIC option on Solaris if we are building dynamic extensions
PHP_SOLARIS_PIC_WEIRDNESS
AC_SUBST(CFLAGS)
AC_SUBST(PROG_SENDMAIL)
AC_SUBST(CFLAGS_SHLIB)
@@ -887,7 +889,7 @@ AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME")
PHP_OS=`uname`
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS")
AC_OUTPUT(Makefile libphp4.module
AC_OUTPUT(Makefile libphp4.module php4.spec
scripts/mkextlib regex/Makefile
@@EXT_MAKEFILES@@ build-defs.h, [
], [
+9 -9
View File
@@ -28,13 +28,13 @@
unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
function_entry reg_functions[] = {
{"ereg", php3_ereg, third_argument_force_ref },
{"ereg_replace", php3_eregreplace, NULL },
{"eregi", php3_eregi, third_argument_force_ref },
{"eregi_replace", php3_eregireplace, NULL },
{"split", php3_split, NULL},
{"join", php3_implode, NULL},
{"sql_regcase", php3_sql_regcase, NULL},
PHP_FE(ereg, third_argument_force_ref)
PHP_FE(ereg_replace, NULL)
PHP_FE(eregi, third_argument_force_ref)
PHP_FE(eregi_replace, NULL)
PHP_FE(split, NULL)
PHP_FALIAS(join, implode, NULL)
PHP_FE(sql_regcase, NULL)
{NULL, NULL, NULL}
};
@@ -491,7 +491,7 @@ static void _php3_eregreplace(INTERNAL_FUNCTION_PARAMETERS, int icase)
/* {{{ proto string ereg_replace(string pattern, string string [, array registers])
Replace regular expression */
PHP_FUNCTION(eregreplace)
PHP_FUNCTION(ereg_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
@@ -499,7 +499,7 @@ PHP_FUNCTION(eregreplace)
/* {{{ proto string eregi_replace(string pattern, string string [, array registers])
Case insensitive replace regular expression */
PHP_FUNCTION(eregireplace)
PHP_FUNCTION(eregi_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
+2 -2
View File
@@ -40,8 +40,8 @@ char *_php3_regreplace(const char *pattern, const char *replace, const char *str
PHP_FUNCTION(ereg);
PHP_FUNCTION(eregi);
PHP_FUNCTION(eregireplace);
PHP_FUNCTION(eregreplace);
PHP_FUNCTION(eregi_replace);
PHP_FUNCTION(ereg_replace);
PHP_FUNCTION(split);
PHPAPI PHP_FUNCTION(sql_regcase);
+3
View File
@@ -4,3 +4,6 @@
/* Define if you have the gd version 1.3 library (-lgd). */
#define HAVE_LIBGD13 0
#undef FREETYPE_4BIT_ANTIALIAS_HACK
#undef HAVE_LIBFREETYPE
#undef HAVE_LIBTTF
+72 -14
View File
@@ -7,7 +7,7 @@ AC_ARG_WITH(gd,
no)
AC_MSG_RESULT(no) ;;
yes)
GD_LIBS="-lgd"
AC_ADD_LIBRARY(gd)
AC_DEFINE(HAVE_LIBGD)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
@@ -15,12 +15,19 @@ AC_ARG_WITH(gd,
;;
*)
dnl A whole whack of possible places where this might be
test -f $withval/include/gd1.3/gd.h && GD_INCLUDE="-I$withval/include/gd1.3"
test -f $withval/include/gd/gd.h && GD_INCLUDE="-I$withval/include/gd"
test -f $withval/include/gd.h && GD_INCLUDE="-I$withval/include"
test -f $withval/gd1.3/gd.h && GD_INCLUDE="-I$withval/gd1.3"
test -f $withval/gd/gd.h && GD_INCLUDE="-I$withval/gd"
test -f $withval/gd.h && GD_INCLUDE="-I$withval"
test -f $withval/include/gd1.3/gd.h && GD_INCLUDE="$withval/include/gd1.3"
test -f $withval/include/gd/gd.h && GD_INCLUDE="$withval/include/gd"
test -f $withval/include/gd.h && GD_INCLUDE="$withval/include"
test -f $withval/gd1.3/gd.h && GD_INCLUDE="$withval/gd1.3"
test -f $withval/gd/gd.h && GD_INCLUDE="$withval/gd"
test -f $withval/gd.h && GD_INCLUDE="$withval"
test -f $withval/lib/libgd.so && GD_LIB="$withval/lib"
test -f $withval/lib/gd/libgd.so && GD_LIB="$withval/lib/gd"
test -f $withval/lib/gd1.3/libgd.so && GD_LIB="$withval/lib/gd1.3"
test -f $withval/libgd.so && GD_LIB="$withval"
test -f $withval/gd/libgd.so && GD_LIB="$withval/gd"
test -f $withval/gd1.3/libgd.so && GD_LIB="$withval/gd1.3"
test -f $withval/lib/libgd.a && GD_LIB="$withval/lib"
test -f $withval/lib/gd/libgd.a && GD_LIB="$withval/lib/gd"
@@ -30,13 +37,13 @@ dnl A whole whack of possible places where this might be
test -f $withval/gd1.3/libgd.a && GD_LIB="$withval/gd1.3"
if test -n "$GD_INCLUDE" && test -n "$GD_LIB" ; then
GD_LIBS="-L$GD_LIB -lgd"
AC_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB)
AC_DEFINE(HAVE_LIBGD)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
ac_cv_lib_gd_gdImageLine=yes
else
AC_MSG_ERROR(Unable to find libgd.a anywhere under $withval)
AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $withval])
fi ;;
esac
],[
@@ -44,11 +51,62 @@ dnl A whole whack of possible places where this might be
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
])
if test "$ac_cv_lib_gd_gdImageLine" = "yes"; then
if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then
GD_INCLUDE="-I/usr/pkg/include/gd"
CHECK_TTF="yes"
AC_ARG_WITH(ttf,
[ --with-ttf[=DIR] Include Freetype support],[
if test $withval = "no" ; then
CHECK_TTF=""
else
CHECK_TTF="$withval"
fi
])
AC_MSG_CHECKING(whether to include ttf support)
if test -n "$CHECK_TTF" ; then
for i in /usr /usr/local "$CHECK_TTF" ; do
if test -f "$i/include/truetype.h" ; then
FREETYPE_DIR="$i"
fi
if test -f "$i/include/freetype.h" ; then
TTF_DIR="$i"
fi
done
if test -n "$FREETYPE_DIR" ; then
AC_DEFINE(HAVE_LIBFREETYPE)
AC_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE_DIR/lib)
AC_ADD_INCLUDE($FREETYPE_DIR/include)
AC_MSG_RESULT(yes)
else
if test -n "$TTF_DIR" ; then
AC_DEFINE(HAVE_LIBTTF)
AC_ADD_LIBRARY_WITH_PATH(ttf, $TTF_DIR/lib)
AC_ADD_INCLUDE($TTF_DIR/include)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
fi
else
AC_MSG_RESULT(no)
fi
AC_CHECK_LIB(ttf, TT_Open_Face)
if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then
GD_INCLUDE="/usr/pkg/include/gd"
fi
AC_MSG_CHECKING(whether to enable 4bit antialias hack with FreeType2)
AC_ARG_ENABLE(freetype-4bit-antialias-hack,
[ --enable-freetype-4bit-antialias-hack For the crazy with FreeType2.],[
if test "$enableval" = "yes" ; then
AC_DEFINE(FREETYPE_4BIT_ANTIALIAS_HACK, 1)
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
],[
AC_MSG_RESULT(no)
])
PHP_EXTENSION(gd)
EXTRA_LIBS="$EXTRA_LIBS $GD_LIBS"
INCLUDES="$INCLUDES $GD_INCLUDE"
AC_ADD_INCLUDE($GD_INCLUDE)
fi
+58 -33
View File
@@ -49,7 +49,7 @@
#include <gdfontmb.h> /* 3 Medium bold font */
#include <gdfontl.h> /* 4 Large font */
#include <gdfontg.h> /* 5 Giant font */
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
# include "gdttf.h"
#endif
@@ -57,7 +57,7 @@
#define M_PI 3.14159265358979323846
#endif
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
static void php3_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int);
#endif
@@ -118,7 +118,7 @@ function_entry gd_functions[] = {
{"imagesx", php3_imagesxfn, NULL},
{"imagesy", php3_imagesyfn, NULL},
{"imagedashedline", php3_imagedashedline, NULL},
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
{"imagettfbbox", php3_imagettfbbox, NULL},
{"imagettftext", php3_imagettftext, NULL},
#endif
@@ -175,7 +175,7 @@ void php3_info_gd(ZEND_MODULE_INFO_FUNC_ARGS)
#else
php3_printf("Version 1.2");
#endif
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
php3_printf(" with FreeType support");
#endif
}
@@ -340,7 +340,8 @@ PHP_FUNCTION(imageloadfont) {
/* {{{ proto int imagecreate(int x_size, int y_size)
Create a new image */
PHP_FUNCTION(imagecreate) {
PHP_FUNCTION(imagecreate)
{
pval *x_size, *y_size;
int ind;
gdImagePtr im;
@@ -362,7 +363,8 @@ PHP_FUNCTION(imagecreate) {
/* {{{ proto int imagecreatefromgif(string filename)
Create a new image from file or URL */
PHP_FUNCTION(imagecreatefromgif ) {
PHP_FUNCTION(imagecreatefromgif )
{
pval *file;
int ind;
gdImagePtr im;
@@ -404,7 +406,8 @@ PHP_FUNCTION(imagecreatefromgif ) {
/* {{{ proto int imagedestroy(int im)
Destroy an image */
PHP_FUNCTION(imagedestroy) {
PHP_FUNCTION(imagedestroy)
{
pval *imgind;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &imgind) == FAILURE) {
@@ -421,7 +424,8 @@ PHP_FUNCTION(imagedestroy) {
/* {{{ proto int imagecolorallocate(int im, int red, int green, int blue)
Allocate a color for an image */
PHP_FUNCTION(imagecolorallocate) {
PHP_FUNCTION(imagecolorallocate)
{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -457,7 +461,8 @@ PHP_FUNCTION(imagecolorallocate) {
/* im, x, y */
/* {{{ proto int imagecolorat(int im, int x, int y)
Get the index of the color of a pixel */
PHP_FUNCTION(imagecolorat) {
PHP_FUNCTION(imagecolorat)
{
pval *imgind, *x, *y;
int ind, ind_type;
gdImagePtr im;
@@ -493,7 +498,8 @@ PHP_FUNCTION(imagecolorat) {
/* {{{ proto int imagecolorclosest(int im, int red, int green, int blue)
Get the index of the closest color to the specified color */
PHP_FUNCTION(imagecolorclosest) {
PHP_FUNCTION(imagecolorclosest)
{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -528,7 +534,8 @@ PHP_FUNCTION(imagecolorclosest) {
/* {{{ proto int imagecolordeallocate(int im, int index)
De-allocate a color for an image */
PHP_FUNCTION(imagecolordeallocate) {
PHP_FUNCTION(imagecolordeallocate)
{
pval *imgind, *index;
int ind, ind_type, col;
gdImagePtr im;
@@ -562,7 +569,8 @@ PHP_FUNCTION(imagecolordeallocate) {
/* {{{ proto int imagecolorresolve(int im, int red, int green, int blue)
Get the index of the specified color or its closest possible alternative */
PHP_FUNCTION(imagecolorresolve) {
PHP_FUNCTION(imagecolorresolve)
{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -597,7 +605,8 @@ PHP_FUNCTION(imagecolorresolve) {
/* {{{ proto int imagecolorexact(int im, int red, int green, int blue)
Get the index of the specified color */
PHP_FUNCTION(imagecolorexact) {
PHP_FUNCTION(imagecolorexact)
{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -632,7 +641,8 @@ PHP_FUNCTION(imagecolorexact) {
/* {{{ proto int imagecolorset(int im, int col, int red, int green, int blue)
Set the color for the specified palette index */
PHP_FUNCTION(imagecolorset) {
PHP_FUNCTION(imagecolorset)
{
pval *imgind, *color, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -674,7 +684,8 @@ PHP_FUNCTION(imagecolorset) {
/* {{{ proto array imagecolorsforindex(int im, int col)
Get the colors for an index */
PHP_FUNCTION(imagecolorsforindex) {
PHP_FUNCTION(imagecolorsforindex)
{
pval *imgind, *index;
int col, ind, ind_type;
gdImagePtr im;
@@ -712,7 +723,8 @@ PHP_FUNCTION(imagecolorsforindex) {
/* {{{ proto int imagegif(int im, string filename)
Output image to browser or file */
PHP_FUNCTION(imagegif ) {
PHP_FUNCTION(imagegif )
{
pval *imgind, *file;
gdImagePtr im;
char *fn=NULL;
@@ -791,7 +803,8 @@ PHP_FUNCTION(imagegif ) {
/* {{{ proto int imagesetpixel(int im, int x, int y, int col)
Set a single pixel */
PHP_FUNCTION(imagesetpixel) {
PHP_FUNCTION(imagesetpixel)
{
pval *imarg, *xarg, *yarg, *colarg;
gdImagePtr im;
int col, y, x;
@@ -828,7 +841,8 @@ PHP_FUNCTION(imagesetpixel) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imageline(int im, int x1, int y1, int x2, int y2, int col)
Draw a line */
PHP_FUNCTION(imageline) {
PHP_FUNCTION(imageline)
{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -867,7 +881,8 @@ PHP_FUNCTION(imageline) {
/* {{{ proto int imagedashedline(int im, int x1, int y1, int x2, int y2, int col)
Draw a dashed line */
PHP_FUNCTION(imagedashedline) {
PHP_FUNCTION(imagedashedline)
{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -906,7 +921,8 @@ PHP_FUNCTION(imagedashedline) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imagerectangle(int im, int x1, int y1, int x2, int y2, int col)
Draw a rectangle */
PHP_FUNCTION(imagerectangle) {
PHP_FUNCTION(imagerectangle)
{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -946,7 +962,8 @@ PHP_FUNCTION(imagerectangle) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col)
Draw a filled rectangle */
PHP_FUNCTION(imagefilledrectangle) {
PHP_FUNCTION(imagefilledrectangle)
{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -985,7 +1002,8 @@ PHP_FUNCTION(imagefilledrectangle) {
/* {{{ proto int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col)
Draw a partial ellipse */
PHP_FUNCTION(imagearc) {
PHP_FUNCTION(imagearc)
{
pval *COL, *E, *ST, *H, *W, *CY, *CX, *IM;
gdImagePtr im;
int col, e, st, h, w, cy, cx;
@@ -1036,7 +1054,8 @@ PHP_FUNCTION(imagearc) {
/* im, x, y, border, col */
/* {{{ proto int imagefilltoborder(int im, int x, int y, int border, int col)
Flood fill to specific color */
PHP_FUNCTION(imagefilltoborder) {
PHP_FUNCTION(imagefilltoborder)
{
pval *IM, *X, *Y, *BORDER, *COL;
gdImagePtr im;
int col, border, y, x;
@@ -1074,7 +1093,8 @@ PHP_FUNCTION(imagefilltoborder) {
/* im, x, y, col */
/* {{{ proto int imagefill(int im, int x, int y, int col)
Flood fill */
PHP_FUNCTION(imagefill) {
PHP_FUNCTION(imagefill)
{
pval *IM, *X, *Y, *COL;
gdImagePtr im;
int col, y, x;
@@ -1109,7 +1129,8 @@ PHP_FUNCTION(imagefill) {
/* {{{ proto int imagecolorstotal(int im)
Find out the number of colors in an image's palette */
PHP_FUNCTION(imagecolorstotal) {
PHP_FUNCTION(imagecolorstotal)
{
pval *IM;
gdImagePtr im;
int ind_type;
@@ -1133,7 +1154,8 @@ PHP_FUNCTION(imagecolorstotal) {
/* im, col */
/* {{{ proto int imagecolortransparent(int im [, int col])
Define a color as transparent */
PHP_FUNCTION(imagecolortransparent) {
PHP_FUNCTION(imagecolortransparent)
{
pval *IM, *COL = NULL;
gdImagePtr im;
int col;
@@ -1175,7 +1197,8 @@ PHP_FUNCTION(imagecolortransparent) {
/* im, interlace */
/* {{{ proto int imageinterlace(int im [, int interlace])
Enable or disable interlace */
PHP_FUNCTION(imageinterlace) {
PHP_FUNCTION(imageinterlace)
{
pval *IM, *INT = NULL;
gdImagePtr im;
int interlace;
@@ -1218,7 +1241,7 @@ PHP_FUNCTION(imageinterlace) {
arg = 1 filled polygon */
/* im, points, num_points, col */
static void _php3_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled) {
pval *IM, *POINTS, *NPOINTS, *COL, *var;
pval *IM, *POINTS, *NPOINTS, *COL, **var;
gdImagePtr im;
gdPoint points[PolyMaxPoints];
int npoints, col, nelem, i;
@@ -1279,12 +1302,14 @@ static void _php3_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled) {
for (i = 0; i < npoints; i++) {
if (_php3_hash_index_find(POINTS->value.ht, (i * 2), (void **)&var) == SUCCESS) {
convert_to_long(var);
points[i].x = var->value.lval;
SEPARATE_ZVAL(var);
convert_to_long(*var);
points[i].x = (*var)->value.lval;
}
if (_php3_hash_index_find(POINTS->value.ht, (i * 2) + 1, (void **)&var) == SUCCESS) {
convert_to_long(var);
points[i].y = var->value.lval;
SEPARATE_ZVAL(var);
convert_to_long(*var);
points[i].y = (*var)->value.lval;
}
}
@@ -1671,7 +1696,7 @@ PHP_FUNCTION(imagesyfn)
}
/* }}} */
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
#define TTFTEXT_DRAW 0
#define TTFTEXT_BBOX 1
+3 -3
View File
@@ -38,11 +38,11 @@
/* This just seems unessacary */
#if (WIN32|WINNT)
#define HAVE_LIBTTF 1
#define ENABLE_GD_TTF
#else
#include "php_config.h"
#endif
#if HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
#include "gdcache.h"
@@ -198,4 +198,4 @@ main(char *argv[], int argc)
#endif
#endif /* HAVE_LIBTTF */
#endif /* ENABLE_GD_TTF */
+18 -2
View File
@@ -9,7 +9,7 @@
#else
#include "php_config.h"
#endif
#if HAVE_LIBTTF
#if HAVE_LIBTTF|HAVE_LIBFREETYPE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -17,7 +17,11 @@
#include <gd.h>
#include "gdttf.h"
#include "gdcache.h"
#if HAVE_LIBFREETYPE
#include <truetype.h>
#else
#include <freetype.h>
#endif
/* number of fonts cached before least recently used is replaced */
#define FONTCACHESIZE 6
@@ -31,7 +35,11 @@
#define BITMAPCACHESIZE 8
/* number of antialias color lookups cached */
#if FREETYPE_4BIT_ANTIALIAS_HACK
#define TWEENCOLORCACHESIZE 128
#else
#define TWEENCOLORCACHESIZE 32
#endif
/* ptsize below which anti-aliasing is ineffective */
#define MINANTIALIASPTSIZE 0
@@ -40,7 +48,11 @@
#define RESOLUTION 72
/* Number of colors used for anti-aliasing */
#if FREETYPE_4BIT_ANTIALIAS_HACK
#define NUMCOLORS 16
#else
#define NUMCOLORS 4
#endif
/* Line separation as a factor of font height.
No space between if LINESPACE = 1.00
@@ -379,7 +391,11 @@ fontFetch ( char **error, void *key )
a->cos_a = cos(a->angle);
a->engine = b->engine;
if ((err = TT_Open_Face(*b->engine, a->fontname, &a->face))) {
#if HAVE_LIBFREETYPE
if (err == 0x008) { /* The FT2 oldapi is missing this code */
#else
if (err == TT_Err_Could_Not_Open_File) {
#endif
*error = "Could not find/open font";
}
else {
@@ -852,7 +868,7 @@ gdttf(gdImage *im, int *brect, int fg, char *fontname,
return (char *)NULL;
}
#endif /* HAVE_LIBTTF */
#endif /* HAVE_LIBTTF|HAVE_LIBFREETYPE */
/*
* Local variables:
+6 -1
View File
@@ -34,6 +34,11 @@
#ifndef _PHP3_GD_H
#define _PHP3_GD_H
#if defined(HAVE_LIBTTF) && defined(HAVE_FREETYPE_H)
#define ENABLE_GD_TTF
#endif
#if COMPILE_DL
#undef HAVE_LIBGD
#define HAVE_LIBGD 1
@@ -89,7 +94,7 @@ PHP_FUNCTION(imagesyfn);
void php3_free_gd_font(gdFontPtr);
void _php3_gdimagecharup(gdImagePtr, gdFontPtr, int, int, int, int);
PHP_FUNCTION(imagedashedline);
#ifdef HAVE_LIBTTF
#ifdef ENABLE_GD_TTF
PHP_FUNCTION(imagettfbbox);
PHP_FUNCTION(imagettftext);
#endif
+17 -22
View File
@@ -1159,7 +1159,7 @@ $ifdef HAVE_IFX_IUS;
$endif;
) {
int bid;
int bid = 0;
if(fieldtype==SQLTEXT) {
bid=php3_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,list);
locator=php3_intifx_get_blobloc(bid,list);
@@ -1243,9 +1243,6 @@ EXEC SQL BEGIN DECLARE SECTION;
long sqlerrd[6];
int e;
$ifdef HAVE_IFX_IUS;
fixed binary 'blob' ifx_lo_t *slocator;
$endif;
EXEC SQL END DECLARE SECTION;
@@ -1643,7 +1640,7 @@ $ifdef HAVE_IFX_IUS;
$endif;
) {
int bid;
int bid = 0;
if(fieldtype==SQLTEXT) {
bid=php3_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,list);
locator=php3_intifx_get_blobloc(bid,list);
@@ -3143,7 +3140,7 @@ EXEC SQL END DECLARE SECTION;
int type;
int i, locind;
int i;
IFXLS_FETCH();
@@ -3777,7 +3774,7 @@ static char* php3_intifx_create_tmpfile(long bid) {
if ((blobdir = getenv("php3_blobdir")) == NULL)
blobdir=".";
sprintf(filename,"blb%d",bid);
sprintf(filename,"blb%d",(int)bid);
blobfile=tempnam(blobdir,filename);
free(blobdir);
retval=emalloc(strlen(blobfile)+1);
@@ -4257,17 +4254,17 @@ PHP_FUNCTION(ifxus_create_slob) {
mode=pmode->value.lval;
create_mode=0;
if(mode&1!=0)
if((mode&1) !=0)
create_mode|=LO_RDONLY;
if(mode&2!=0)
if((mode&2) !=0)
create_mode|=LO_WRONLY;
if(mode&4!=0)
if((mode&4) !=0)
create_mode|=LO_APPEND;
if(mode&8!=0)
if((mode&8) !=0)
create_mode|=LO_RDWR;
if(mode&16!=0)
if((mode&16) !=0)
create_mode|=LO_BUFFER;
if(mode&32!=0)
if((mode&32) !=0)
create_mode|=LO_NOBUFFER;
@@ -4467,7 +4464,6 @@ static long php3_intifxus_close_slob(long bid, HashTable *list) {
opens an slob-object */
PHP_FUNCTION(ifxus_open_slob) {
pval *pbid,*pmode;
long id;
long mode,create_mode;
if (ARG_COUNT(ht)!=2 || getParameters(ht, 1, &pbid,&pmode)==FAILURE) {
@@ -4478,17 +4474,17 @@ PHP_FUNCTION(ifxus_open_slob) {
mode=pmode->value.lval;
create_mode=0;
if(mode&1!=0)
if((mode&1) !=0)
create_mode|=LO_RDONLY;
if(mode&2!=0)
if((mode&2) !=0)
create_mode|=LO_WRONLY;
if(mode&4!=0)
if((mode&4) !=0)
create_mode|=LO_APPEND;
if(mode&8!=0)
if((mode&8) !=0)
create_mode|=LO_RDWR;
if(mode&16!=0)
if((mode&16) !=0)
create_mode|=LO_BUFFER;
if(mode&32!=0)
if((mode&32) !=0)
create_mode|=LO_NOBUFFER;
RETURN_LONG(php3_intifxus_open_slob(pbid->value.lval,create_mode,list));
@@ -4550,7 +4546,6 @@ static long php3_intifxus_open_slob(long bid, long create_mode, HashTable *list)
*/
static long php3_intifxus_new_slob(HashTable *list) {
IFX_IDRES *Ifx_slob;
int errcode;
Ifx_slob=emalloc(sizeof(IFX_IDRES));
@@ -4578,7 +4573,7 @@ static long php3_intifxus_new_slob(HashTable *list) {
*/
static ifx_lo_t *php3_intifxus_get_slobloc(long bid, HashTable *list) {
IFX_IDRES *Ifx_slob;
int errcode, type;
int type;
Ifx_slob = (IFX_IDRES *) php3_list_find(bid,&type);
if (type!=IFXG(le_idresult) || Ifx_slob->type!=TYPE_SLOB) {
-26
View File
@@ -1,26 +0,0 @@
dnl $Id$
dnl config.m4 for extension pcre
dnl By default we'll compile and link against the bundled PCRE library
dnl if DIR is supplied, we'll use that for linking
AC_MSG_CHECKING(whether to include PCRE support)
AC_ARG_WITH(pcre-regex,
[ --without-pcre-regex Don't include Perl Compatible Regular Expressions support],[
if test "$withval" = "yes"; then
EXTRA_LIBS="-L$abs_builddir/ext/pcre/pcrelib -lpcre $EXTRA_LIBS"
PCRE_SUBDIR="pcrelib"
AC_DEFINE(HAVE_PCRE, 1)
AC_MSG_RESULT(yes)
PHP_EXTENSION(pcre)
else
AC_MSG_RESULT(no)
fi
],[
EXTRA_LIBS="-L$abs_builddir/ext/pcre/pcrelib -lpcre $EXTRA_LIBS"
PCRE_SUBDIR="pcrelib"
AC_DEFINE(HAVE_PCRE, 1)
AC_MSG_RESULT(yes)
PHP_EXTENSION(pcre)
])
AC_SUBST(PCRE_SUBDIR)
+2 -1
View File
@@ -7,7 +7,8 @@ libphpext_standard_a_SOURCES=\
html.c image.c info.c link.c mail.c math.c md5.c microtime.c \
pack.c pageinfo.c rand.c reg.c soundex.c string.c \
syslog.c type.c uniqid.c url.c iptc.c var.c quot_print.c \
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
parsedate.y
#number.o: number.c
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@
+217 -205
View File
@@ -58,213 +58,223 @@ int user_shutdown_function_executor(pval *user_shutdown_function_name);
void php3_call_shutdown_functions(void);
function_entry basic_functions[] = {
{"intval", int_value, NULL},
{"doubleval", double_value, NULL},
{"strval", string_value, NULL},
PHP_FE(define, NULL)
PHP_FE(defined, NULL)
PHP_FE(bin2hex, NULL)
{"short_tags", php3_toggle_short_open_tag, NULL},
{"sleep", php3_sleep, NULL},
{"usleep", php3_usleep, NULL},
{"ksort", php3_key_sort, first_arg_force_ref},
{"asort", php3_asort, first_arg_force_ref},
{"arsort", php3_arsort, first_arg_force_ref},
{"sort", php3_sort, first_arg_force_ref},
{"rsort", php3_rsort, first_arg_force_ref},
{"usort", php3_user_sort, first_arg_force_ref},
{"uasort", php3_auser_sort, first_arg_force_ref},
{"uksort", php3_user_key_sort, first_arg_force_ref},
{"array_walk", php3_array_walk, first_arg_force_ref},
{"sizeof", php3_count, first_arg_allow_ref},
{"count", php3_count, first_arg_allow_ref},
{"time", php3_time, NULL},
{"mktime", php3_mktime, NULL},
{"gmmktime", php3_gmmktime, NULL},
PHP_FE(intval, NULL)
PHP_FE(doubleval, NULL)
PHP_FE(strval, NULL)
PHP_FE(define, NULL)
PHP_FE(defined, NULL)
PHP_FE(bin2hex, NULL)
PHP_FE(toggle_short_open_tag, NULL)
PHP_FE(sleep, NULL)
PHP_FE(usleep, NULL)
PHP_FE(ksort, first_arg_force_ref)
PHP_FE(asort, first_arg_force_ref)
PHP_FE(arsort, first_arg_force_ref)
PHP_FE(sort, first_arg_force_ref)
PHP_FE(rsort, first_arg_force_ref)
PHP_FE(usort, first_arg_force_ref)
PHP_FE(uasort, first_arg_force_ref)
PHP_FE(uksort, first_arg_force_ref)
PHP_FE(array_walk, first_arg_force_ref)
PHP_FALIAS(sizeof, count, first_arg_force_ref)
PHP_FE(count, first_arg_force_ref)
PHP_FE(end, first_arg_force_ref)
PHP_FE(prev, first_arg_force_ref)
PHP_FE(next, first_arg_force_ref)
PHP_FE(reset, first_arg_force_ref)
PHP_FE(current, first_arg_force_ref)
PHP_FE(key, first_arg_force_ref)
PHP_FE(each, first_arg_force_ref)
PHP_FALIAS(pos, current, first_arg_force_ref)
PHP_FE(time, NULL)
PHP_FE(mktime, NULL)
PHP_FE(gmmktime, NULL)
#if HAVE_STRFTIME
{"strftime", php3_strftime, NULL},
PHP_FE(strftime, NULL)
#endif
{"date", php3_date, NULL},
{"gmdate", php3_gmdate, NULL},
{"getdate", php3_getdate, NULL},
{"checkdate", php3_checkdate, NULL},
{"chr", php3_chr, NULL},
{"ord", php3_ord, NULL},
{"flush", php3_flush, NULL},
{"end", array_end, first_arg_force_ref},
{"prev", array_prev, first_arg_force_ref},
{"next", array_next, first_arg_force_ref},
{"reset", array_reset, first_arg_force_ref},
{"current", array_current, first_arg_force_ref},
{"key", array_current_key, first_arg_force_ref},
{"each", array_each, first_arg_force_ref},
{"gettype", php3_gettype, NULL},
{"settype", php3_settype, first_arg_force_ref},
{"min", php3_min, NULL},
{"max", php3_max, NULL},
PHP_FE(strtotime, NULL)
PHP_FE(date, NULL)
PHP_FE(gmdate, NULL)
PHP_FE(getdate, NULL)
PHP_FE(checkdate, NULL)
{"addslashes", php3_addslashes, NULL},
{"chop", php3_chop, NULL},
{"str_replace", php3_str_replace, NULL},
{"chunk_split", php3_chunk_split, NULL},
{"trim", php3_trim, NULL},
{"ltrim", php3_ltrim, NULL},
{"rtrim", php3_chop, NULL},
{"pos", array_current, first_arg_force_ref},
PHP_FE(flush, NULL)
PHP_FE(gettype, NULL)
PHP_FE(settype, first_arg_force_ref)
PHP_FE(min, NULL)
PHP_FE(max, NULL)
{"getimagesize", php3_getimagesize, NULL},
{"htmlspecialchars", php3_htmlspecialchars, NULL},
{"htmlentities", php3_htmlentities, NULL},
{"md5", php3_md5, NULL},
PHP_FE(getimagesize, NULL)
PHP_FE(htmlspecialchars, NULL)
PHP_FE(htmlentities, NULL)
PHP_FE(md5, NULL)
{"iptcparse", php3_iptcparse, NULL},
{"iptcembed", php3_iptcembed, NULL},
{"parse_url", php3_parse_url, NULL},
PHP_FE(iptcparse, NULL)
PHP_FE(iptcembed, NULL)
PHP_FE(phpinfo, NULL)
PHP_FE(phpversion, NULL)
PHP_FE(phpcredits, NULL)
PHP_FE(strlen, NULL)
PHP_FE(strcmp, NULL)
PHP_FE(strspn, NULL)
PHP_FE(strcspn, NULL)
PHP_FE(strcasecmp, NULL)
PHP_FE(strtok, NULL)
PHP_FE(strtoupper, NULL)
PHP_FE(strtolower, NULL)
PHP_FE(strpos, NULL)
PHP_FE(strrpos, NULL)
PHP_FE(strrev, NULL)
PHP_FE(hebrev, NULL)
PHP_FE(hebrevc, NULL)
PHP_FE(nl2br, NULL)
PHP_FE(basename, NULL)
PHP_FE(dirname, NULL)
PHP_FE(stripslashes, NULL)
PHP_FE(strstr, NULL)
PHP_FE(stristr, NULL)
PHP_FE(strrchr, NULL)
PHP_FE(substr, NULL)
PHP_FE(quotemeta, NULL)
PHP_FE(ucfirst, NULL)
PHP_FE(ucwords, NULL)
PHP_FE(strtr, NULL)
PHP_FE(addslashes, NULL)
PHP_FE(chop, NULL)
PHP_FE(str_replace, NULL)
PHP_FE(chunk_split, NULL)
PHP_FE(trim, NULL)
PHP_FE(ltrim, NULL)
PHP_FE(strip_tags, NULL)
PHP_FE(similar_text, NULL)
PHP_FE(explode, NULL)
PHP_FE(implode, NULL)
PHP_FE(setlocale, NULL)
PHP_FE(soundex, NULL)
PHP_FE(chr, NULL)
PHP_FE(ord, NULL)
PHP_FE(parse_str, NULL)
PHP_FALIAS(rtrim, chop, NULL)
PHP_FALIAS(strchr, strstr, NULL)
PHP_NAMED_FE(sprintf, php3_user_sprintf, NULL)
PHP_NAMED_FE(printf, php3_user_printf, NULL)
PHP_FE(parse_url, NULL)
PHP_FE(urlencode, NULL)
PHP_FE(urldecode, NULL)
PHP_FE(rawurlencode, NULL)
PHP_FE(rawurldecode, NULL)
PHP_FE(exec, second_and_third_args_force_ref)
PHP_FE(system, second_arg_force_ref)
PHP_FE(escapeshellcmd, NULL)
PHP_FE(passthru, second_arg_force_ref)
PHP_FE(shell_exec, NULL)
{"parse_str", php3_parsestr, NULL},
PHP_FE(phpinfo, NULL)
PHP_FE(phpversion, NULL)
PHP_FE(phpcredits, NULL)
{"strlen", php3_strlen, NULL},
{"strcmp", php3_strcmp, NULL},
{"strspn", php3_strspn, NULL},
{"strcspn", php3_strcspn, NULL},
{"strcasecmp", php3_strcasecmp, NULL},
{"strtok", php3_strtok, NULL},
{"strtoupper", php3_strtoupper, NULL},
{"strtolower", php3_strtolower, NULL},
{"strchr", php3_strstr, NULL},
{"strpos", php3_strpos, NULL},
{"strrpos", php3_strrpos, NULL},
{"strrev", php3_strrev, NULL},
{"hebrev", php3_hebrev, NULL},
PHP_FE(hebrevc, NULL)
PHP_FE(nl2br, NULL)
{"basename", php3_basename, NULL},
{"dirname", php3_dirname, NULL},
{"stripslashes", php3_stripslashes, NULL},
{"strstr", php3_strstr, NULL},
{"stristr", php3_stristr, NULL},
{"strrchr", php3_strrchr, NULL},
{"substr", php3_substr, NULL},
{"quotemeta", php3_quotemeta, NULL},
{"urlencode", php3_urlencode, NULL},
{"urldecode", php3_urldecode, NULL},
{"rawurlencode", php3_rawurlencode, NULL},
{"rawurldecode", php3_rawurldecode, NULL},
{"ucfirst", php3_ucfirst, NULL},
{"ucwords", php3_ucwords, NULL},
{"strtr", php3_strtr, NULL},
{"sprintf", php3_user_sprintf, NULL},
{"printf", php3_user_printf, NULL},
{"setlocale", php3_setlocale, NULL},
{"exec", php3_exec, second_and_third_args_force_ref},
{"system", php3_system, second_arg_force_ref},
{"escapeshellcmd", php3_escapeshellcmd, NULL},
{"passthru", php3_passthru, second_arg_force_ref},
PHP_FE(shell_exec, NULL)
{"soundex", soundex, NULL},
{"rand", php3_rand, NULL},
{"srand", php3_srand, NULL},
{"getrandmax", php3_getrandmax, NULL},
{"mt_rand", php3_mt_rand, NULL},
{"mt_srand", php3_mt_srand, NULL},
{"mt_getrandmax", php3_mt_getrandmax, NULL},
{"gethostbyaddr", php3_gethostbyaddr, NULL},
{"gethostbyname", php3_gethostbyname, NULL},
{"gethostbynamel", php3_gethostbynamel, NULL},
PHP_FE(rand, NULL)
PHP_FE(srand, NULL)
PHP_FE(getrandmax, NULL)
PHP_FE(mt_rand, NULL)
PHP_FE(mt_srand, NULL)
PHP_FE(mt_getrandmax, NULL)
PHP_FE(gethostbyaddr, NULL)
PHP_FE(gethostbyname, NULL)
PHP_FE(gethostbynamel, NULL)
#if !(WIN32|WINNT)||HAVE_BINDLIB
{"checkdnsrr", php3_checkdnsrr, NULL},
{"getmxrr", php3_getmxrr, second_and_third_args_force_ref},
PHP_FE(checkdnsrr, NULL)
PHP_FE(getmxrr, second_and_third_args_force_ref)
#endif
{"explode", php3_explode, NULL},
{"implode", php3_implode, NULL},
{"getenv", php3_getenv, NULL},
{"error_reporting", php3_error_reporting, NULL},
{"clearstatcache", php3_clearstatcache, NULL},
{"unlink", php3_unlink, NULL},
PHP_FE(error_reporting, NULL)
{"getmyuid", php3_getmyuid, NULL},
{"getmypid", php3_getmypid, NULL},
PHP_FE(getmyuid, NULL)
PHP_FE(getmypid, NULL)
PHP_FE(getmyinode, NULL)
PHP_FE(getlastmod, NULL)
/*getmyiid is here for forward compatibility with 3.1
See pageinfo.c in 3.1 for more information*/
{"getmyiid", php3_getmypid, NULL},
{"getmyinode", php3_getmyinode, NULL},
{"getlastmod", php3_getlastmod, NULL},
/* {"getmyiid", php3_getmypid, NULL}, */
{"base64_decode", php3_base64_decode, NULL},
{"base64_encode", php3_base64_encode, NULL},
PHP_FE(base64_decode, NULL)
PHP_FE(base64_encode, NULL)
{"abs", php3_abs, NULL},
{"ceil", php3_ceil, NULL},
{"floor", php3_floor, NULL},
{"round", php3_round, NULL},
{"sin", php3_sin, NULL},
{"cos", php3_cos, NULL},
{"tan", php3_tan, NULL},
{"asin", php3_asin, NULL},
{"acos", php3_acos, NULL},
{"atan", php3_atan, NULL},
{"atan2", php3_atan2, NULL},
{"pi", php3_pi, NULL},
{"pow", php3_pow, NULL},
{"exp", php3_exp, NULL},
{"log", php3_log, NULL},
{"log10", php3_log10, NULL},
{"sqrt", php3_sqrt, NULL},
{"deg2rad", php3_deg2rad, NULL},
{"rad2deg", php3_rad2deg, NULL},
{"bindec", php3_bindec, NULL},
{"hexdec", php3_hexdec, NULL},
{"octdec", php3_octdec, NULL},
{"decbin", php3_decbin, NULL},
{"decoct", php3_decoct, NULL},
{"dechex", php3_dechex, NULL},
{"base_convert",php3_base_convert, NULL},
{"number_format", php3_number_format, NULL},
PHP_FE(abs, NULL)
PHP_FE(ceil, NULL)
PHP_FE(floor, NULL)
PHP_FE(round, NULL)
PHP_FE(sin, NULL)
PHP_FE(cos, NULL)
PHP_FE(tan, NULL)
PHP_FE(asin, NULL)
PHP_FE(acos, NULL)
PHP_FE(atan, NULL)
PHP_FE(atan2, NULL)
PHP_FE(pi, NULL)
PHP_FE(pow, NULL)
PHP_FE(exp, NULL)
PHP_FE(log, NULL)
PHP_FE(log10, NULL)
PHP_FE(sqrt, NULL)
PHP_FE(deg2rad, NULL)
PHP_FE(rad2deg, NULL)
PHP_FE(bindec, NULL)
PHP_FE(hexdec, NULL)
PHP_FE(octdec, NULL)
PHP_FE(decbin, NULL)
PHP_FE(decoct, NULL)
PHP_FE(dechex, NULL)
PHP_FE(base_convert, NULL)
PHP_FE(number_format, NULL)
PHP_FE(getenv, NULL)
#ifdef HAVE_PUTENV
{"putenv", php3_putenv, NULL},
PHP_FE(putenv, NULL)
#endif
{"microtime", php3_microtime, NULL},
{"uniqid", php3_uniqid, NULL},
{"linkinfo", php3_linkinfo, NULL},
{"readlink", php3_readlink, NULL},
{"symlink", php3_symlink, NULL},
{"link", php3_link, NULL},
{"quoted_printable_decode", php3_quoted_printable_decode, NULL},
{"convert_cyr_string", php3_convert_cyr_string, NULL},
{"get_current_user", php3_get_current_user, NULL},
{"set_time_limit", php3_set_time_limit, NULL},
{"get_cfg_var", php3_get_cfg_var, NULL},
{"magic_quotes_runtime", php3_set_magic_quotes_runtime, NULL},
{"set_magic_quotes_runtime", php3_set_magic_quotes_runtime, NULL},
{"get_magic_quotes_gpc", php3_get_magic_quotes_gpc, NULL},
{"get_magic_quotes_runtime", php3_get_magic_quotes_runtime, NULL},
{"is_long", php3_is_long, first_arg_allow_ref},
{"is_int", php3_is_long, first_arg_allow_ref},
{"is_integer", php3_is_long, first_arg_allow_ref},
{"is_float", php3_is_double, first_arg_allow_ref},
{"is_double", php3_is_double, first_arg_allow_ref},
{"is_real", php3_is_double, first_arg_allow_ref},
{"is_string", php3_is_string, first_arg_allow_ref},
{"is_array", php3_is_array, first_arg_allow_ref},
{"is_object", php3_is_object, first_arg_allow_ref},
{"leak", php3_leak, NULL},
{"error_log", php3_error_log, NULL},
{"call_user_func", php3_call_user_func, NULL},
{"call_user_method", php3_call_user_method, NULL},
PHP_FE(microtime, NULL)
PHP_FE(getrusage, NULL)
PHP_FE(uniqid, NULL)
PHP_FE(quoted_printable_decode, NULL)
PHP_FE(convert_cyr_string, NULL)
PHP_FE(get_current_user, NULL)
PHP_FE(set_time_limit, NULL)
PHP_FE(get_cfg_var, NULL)
PHP_FALIAS(magic_quotes_runtime, set_magic_quotes_runtime, NULL)
PHP_FE(set_magic_quotes_runtime, NULL)
PHP_FE(get_magic_quotes_gpc, NULL)
PHP_FE(get_magic_quotes_runtime, NULL)
PHP_FE(is_long, first_arg_allow_ref)
PHP_FALIAS(is_int, is_long, first_arg_allow_ref)
PHP_FALIAS(is_integer, is_long, first_arg_allow_ref)
PHP_FALIAS(is_float, is_double, first_arg_allow_ref)
PHP_FE(is_double, first_arg_allow_ref)
PHP_FALIAS(is_real, is_double, first_arg_allow_ref)
PHP_FE(is_string, first_arg_allow_ref)
PHP_FE(is_array, first_arg_allow_ref)
PHP_FE(is_object, first_arg_allow_ref)
PHP_FE(var_dump, NULL)
PHP_FE(serialize, first_arg_allow_ref)
PHP_FE(unserialize, first_arg_allow_ref)
PHP_FE(leak, NULL)
PHP_FE(error_log, NULL)
PHP_FE(call_user_func, NULL)
PHP_FE(call_user_method, NULL)
PHP_FE(var_dump, NULL)
PHP_FE(serialize, first_arg_allow_ref)
PHP_FE(unserialize, first_arg_allow_ref)
PHP_FE(register_shutdown_function, NULL)
@@ -282,9 +292,11 @@ function_entry basic_functions[] = {
PHP_FE(ini_restore, NULL)
PHP_FE(print_r, NULL)
{"setcookie", php3_SetCookie, NULL},
{"header", php3_Header, NULL},
PHP_FE(headers_sent, NULL)
PHP_FE(setcookie, NULL)
PHP_FE(Header, NULL)
PHP_FE(headers_sent, NULL)
PHP_FE(function_exists, NULL)
PHP_FE(in_array, NULL)
PHP_FE(extract, NULL)
@@ -559,7 +571,7 @@ PHP_FUNCTION(toggle_short_open_tag)
* Basic Functions *
*******************/
void int_value(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(intval)
{
pval *num, *arg_base;
int base;
@@ -587,7 +599,7 @@ void int_value(INTERNAL_FUNCTION_PARAMETERS)
}
void double_value(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(doubleval)
{
pval *num;
@@ -599,7 +611,7 @@ void double_value(INTERNAL_FUNCTION_PARAMETERS)
}
void string_value(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(strval)
{
pval *num;
@@ -636,7 +648,7 @@ static int array_key_compare(const void *a, const void *b)
}
PHP_FUNCTION(key_sort)
PHP_FUNCTION(ksort)
{
pval *array;
HashTable *target_hash;
@@ -853,7 +865,7 @@ static int array_user_compare(const void *a, const void *b)
}
PHP_FUNCTION(user_sort)
PHP_FUNCTION(usort)
{
pval *array;
pval *old_compare_func;
@@ -879,7 +891,7 @@ PHP_FUNCTION(user_sort)
RETURN_TRUE;
}
PHP_FUNCTION(auser_sort)
PHP_FUNCTION(uasort)
{
pval *array;
pval *old_compare_func;
@@ -953,7 +965,7 @@ static int array_user_key_compare(const void *a, const void *b)
}
PHP_FUNCTION(user_key_sort)
PHP_FUNCTION(uksort)
{
pval *array;
pval *old_compare_func;
@@ -980,7 +992,7 @@ PHP_FUNCTION(user_key_sort)
}
void array_end(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(end)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1005,7 +1017,7 @@ void array_end(INTERNAL_FUNCTION_PARAMETERS)
}
void array_prev(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(prev)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1028,7 +1040,7 @@ void array_prev(INTERNAL_FUNCTION_PARAMETERS)
}
void array_next(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(next)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1051,7 +1063,7 @@ void array_next(INTERNAL_FUNCTION_PARAMETERS)
}
void array_each(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(each)
{
pval *array,*entry,**entry_ptr, *tmp;
char *string_key;
@@ -1103,7 +1115,7 @@ void array_each(INTERNAL_FUNCTION_PARAMETERS)
}
void array_reset(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(reset)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1126,7 +1138,7 @@ void array_reset(INTERNAL_FUNCTION_PARAMETERS)
INIT_PZVAL(return_value);
}
void array_current(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(current)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1147,7 +1159,7 @@ void array_current(INTERNAL_FUNCTION_PARAMETERS)
}
void array_current_key(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(key)
{
pval *array;
char *string_key;
+14 -14
View File
@@ -43,30 +43,30 @@ extern int php3_minit_basic(INIT_FUNC_ARGS);
extern int php3_mshutdown_basic(SHUTDOWN_FUNC_ARGS);
extern int php3_rinit_basic(INIT_FUNC_ARGS);
extern int php3_rshutdown_basic(SHUTDOWN_FUNC_ARGS);
void int_value(INTERNAL_FUNCTION_PARAMETERS);
void double_value(INTERNAL_FUNCTION_PARAMETERS);
void string_value(INTERNAL_FUNCTION_PARAMETERS);
PHP_FUNCTION(intval);
PHP_FUNCTION(doubleval);
PHP_FUNCTION(strval);
PHP_FUNCTION(toggle_short_open_tag);
PHP_FUNCTION(sleep);
PHP_FUNCTION(usleep);
PHP_FUNCTION(key_sort);
PHP_FUNCTION(ksort);
PHP_FUNCTION(asort);
PHP_FUNCTION(arsort);
PHP_FUNCTION(sort);
PHP_FUNCTION(rsort);
PHP_FUNCTION(user_sort);
PHP_FUNCTION(auser_sort);
PHP_FUNCTION(user_key_sort);
PHP_FUNCTION(usort);
PHP_FUNCTION(uasort);
PHP_FUNCTION(uksort);
PHP_FUNCTION(array_walk);
PHP_FUNCTION(count);
PHP_FUNCTION(flush);
void array_end(INTERNAL_FUNCTION_PARAMETERS);
void array_prev(INTERNAL_FUNCTION_PARAMETERS);
void array_next(INTERNAL_FUNCTION_PARAMETERS);
void array_each(INTERNAL_FUNCTION_PARAMETERS);
void array_reset(INTERNAL_FUNCTION_PARAMETERS);
void array_current(INTERNAL_FUNCTION_PARAMETERS);
void array_current_key(INTERNAL_FUNCTION_PARAMETERS);
PHP_FUNCTION(end);
PHP_FUNCTION(prev);
PHP_FUNCTION(next);
PHP_FUNCTION(each);
PHP_FUNCTION(reset);
PHP_FUNCTION(current);
PHP_FUNCTION(key);
PHP_FUNCTION(gettype);
PHP_FUNCTION(settype);
PHP_FUNCTION(min);
+1 -1
View File
@@ -30,7 +30,7 @@ static pval *found_browser_entry;
#endif
function_entry browscap_functions[] = {
{"get_browser", php3_get_browser, NULL},
PHP_FE(get_browser, NULL)
{NULL, NULL, NULL}
};
+1 -1
View File
@@ -49,7 +49,7 @@ extern char *crypt(char *__key,char *__salt);
#include "php3_crypt.h"
function_entry crypt_functions[] = {
{"crypt", php3_crypt, NULL},
PHP_FE(crypt, NULL)
{NULL, NULL, NULL}
};
+31
View File
@@ -29,6 +29,9 @@
#include "php_globals.h"
#include <time.h>
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#include <stdio.h>
char *mon_full_names[] =
@@ -62,6 +65,8 @@ static int phpday_tab[2][12] =
#define isleap(year) (((year%4) == 0 && (year%100)!=0) || (year%400)==0)
extern PHPAPI time_t parsedate(char *p, struct timeval *now);
PHP_FUNCTION(time)
{
return_value->value.lval = (long) time(NULL);
@@ -550,6 +555,32 @@ PHP_FUNCTION(strftime)
RETURN_FALSE;
}
#endif
/* {{{ proto int strtotime(string time, int now) */
PHP_FUNCTION(strtotime)
{
pval *timep, *nowp;
int ac;
struct timeval tv;
ac = ARG_COUNT(ht);
if (ac < 1 || ac > 2 || getParameters(ht, ac, &timep, &nowp)==FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string(timep);
if (ac == 2) {
convert_to_long(nowp);
tv.tv_sec = nowp->value.lval;
tv.tv_usec = 0;
RETURN_LONG(parsedate(timep->value.str.val, &tv));
} else {
RETURN_LONG(parsedate(timep->value.str.val, NULL));
}
}
/* }}} */
/*
* Local variables:
* tab-width: 4
+1
View File
@@ -44,6 +44,7 @@ PHP_FUNCTION(checkdate);
#if HAVE_STRFTIME
PHP_FUNCTION(strftime);
#endif
PHP_FUNCTION(strtotime);
extern char *php3_std_date(time_t t);
void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm);
+5 -5
View File
@@ -45,11 +45,11 @@ static int le_dirp;
static zend_class_entry *dir_class_entry_ptr;
static zend_function_entry php_dir_functions[] = {
PHP_FE(opendir, NULL)
PHP_FE(closedir, NULL)
PHP_FE(chdir, NULL)
PHP_FE(rewinddir, NULL)
PHP_FE(readdir, NULL)
PHP_FE(opendir, NULL)
PHP_FE(closedir, NULL)
PHP_FE(chdir, NULL)
PHP_FE(rewinddir, NULL)
PHP_FE(readdir, NULL)
PHP_FALIAS(dir, getdir, NULL)
{NULL, NULL, NULL}
};
+1
View File
@@ -105,6 +105,7 @@ void php3_dl(pval *file,int type,pval *return_value)
#if MSVC5
php3_error(E_ERROR,"Unable to load dynamic library '%s'<br>\n%s",libpath,php3_win_err());
#else
printf("dlerror = %s\n", dlerror());
php3_error(E_ERROR,"Unable to load dynamic library '%s' - %s",libpath,dlerror());
#endif
RETURN_FALSE;
+2 -2
View File
@@ -196,7 +196,7 @@ function_entry php3_file_functions[] = {
PHP_FE(fseek, NULL)
PHP_FE(ftell, NULL)
PHP_FE(fwrite, NULL)
{"fputs", php3_fwrite, NULL},
PHP_FALIAS(fputs, fwrite, NULL)
PHP_FE(mkdir, NULL)
PHP_FE(rename, NULL)
PHP_FE(copy, NULL)
@@ -1027,7 +1027,7 @@ PHP_FUNCTION(fwrite)
/*
wrapper for setvbuf()
*/
void php3_set_file_buffer(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(set_file_buffer)
{
pval *arg1, *arg2;
FILE *fp;
+30 -29
View File
@@ -442,39 +442,40 @@ FileFunction(php3_fileatime,5)
FileFunction(php3_filemtime,6)
FileFunction(php3_filectime,7)
FileFunction(php3_filetype, 8)
FileFunction(php3_iswritable, 9)
FileFunction(php3_isreadable,10)
FileFunction(php3_isexec,11)
FileFunction(php3_isfile,12)
FileFunction(php3_isdir,13)
FileFunction(php3_islink,14)
FileFunction(php3_fileexists,15)
FileFunction(php3_is_writable, 9)
FileFunction(php3_is_readable,10)
FileFunction(php3_is_executable,11)
FileFunction(php3_is_file,12)
FileFunction(php3_is_dir,13)
FileFunction(php3_is_link,14)
FileFunction(php3_file_exists,15)
FileFunction(php3_lstat,16)
FileFunction(php3_stat,17)
function_entry php3_filestat_functions[] = {
{"fileatime", php3_fileatime, NULL},
{"filectime", php3_filectime, NULL},
{"filegroup", php3_filegroup, NULL},
{"fileinode", php3_fileinode, NULL},
{"filemtime", php3_filemtime, NULL},
{"fileowner", php3_fileowner, NULL},
{"fileperms", php3_fileperms, NULL},
{"filesize", php3_filesize, NULL},
{"filetype", php3_filetype, NULL},
{"file_exists", php3_fileexists, NULL},
{"is_writeable",php3_iswritable, NULL},
{"is_readable", php3_isreadable, NULL},
{"is_executable",php3_isexec, NULL},
{"is_file", php3_isfile, NULL},
{"is_dir", php3_isdir, NULL},
{"is_link", php3_islink, NULL},
{"stat", php3_stat, NULL},
{"lstat", php3_lstat, NULL},
{"chown", php3_chown, NULL},
{"chgrp", php3_chgrp, NULL},
{"chmod", php3_chmod, NULL},
{"touch", php3_touch, NULL},
PHP_FE(fileatime, NULL)
PHP_FE(filectime, NULL)
PHP_FE(filegroup, NULL)
PHP_FE(fileinode, NULL)
PHP_FE(filemtime, NULL)
PHP_FE(fileowner, NULL)
PHP_FE(fileperms, NULL)
PHP_FE(filesize, NULL)
PHP_FE(filetype, NULL)
PHP_FE(file_exists, NULL)
PHP_FE(is_writable, NULL)
PHP_FE(is_readable, NULL)
PHP_FE(is_executable, NULL)
PHP_FE(is_file, NULL)
PHP_FE(is_dir, NULL)
PHP_FE(is_link, NULL)
PHP_FE(stat, NULL)
PHP_FE(lstat, NULL)
PHP_FE(chown, NULL)
PHP_FE(chgrp, NULL)
PHP_FE(chmod, NULL)
PHP_FE(touch, NULL)
PHP_FE(clearstatcache, NULL)
{NULL, NULL, NULL}
};
+3 -3
View File
@@ -83,8 +83,8 @@ extern int le_fp;
static unsigned char third_and_fourth_args_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
function_entry fsock_functions[] = {
PHP_FE(fsockopen, third_and_fourth_args_force_ref)
PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
PHP_FE(fsockopen, third_and_fourth_args_force_ref)
PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
{NULL, NULL, NULL}
};
@@ -248,7 +248,7 @@ static void _php3_fsockopen(INTERNAL_FUNCTION_PARAMETERS, int persistent) {
switch(arg_count) {
case 5:
convert_to_double(args[4]);
conv = args[4]->value.dval * 1000000.0;
conv = (unsigned long) (args[4]->value.dval * 1000000.0);
timeout.tv_sec = conv / 1000000;
timeout.tv_usec = conv % 1000000;
/* fall-through */
+2 -2
View File
@@ -418,8 +418,8 @@ CookieList *php3_PopCookieList(void)
return (ret);
}
/* php3_SetCookie(name,value,expires,path,domain,secure) */
PHP_FUNCTION(SetCookie)
/* php3_setcookie(name,value,expires,path,domain,secure) */
PHP_FUNCTION(setcookie)
{
char *cookie;
int len=sizeof("Set-Cookie: ");
+1 -1
View File
@@ -54,7 +54,7 @@ extern php3_module_entry php3_header_module_entry;
extern int php3_init_head(INIT_FUNC_ARGS);
PHP_FUNCTION(Header);
PHP_FUNCTION(SetCookie);
PHP_FUNCTION(setcookie);
PHP_FUNCTION(headers_sent);
void php4i_add_header_information(char *header_information, uint header_length);
+5 -5
View File
@@ -183,11 +183,11 @@ PHP_FUNCTION(unlink)
/* }}} */
function_entry link_functions[] = {
{"readlink", php3_readlink, NULL},
{"linkinfo", php3_linkinfo, NULL},
{"symlink", php3_symlink, NULL},
{"link", php3_link, NULL},
{"unlink", php3_unlink, NULL},
PHP_FE(readlink, NULL)
PHP_FE(linkinfo, NULL)
PHP_FE(symlink, NULL)
PHP_FE(link, NULL)
PHP_FE(unlink, NULL)
{NULL, NULL, NULL}
};
+1 -1
View File
@@ -40,7 +40,7 @@
#endif
function_entry mail_functions[] = {
{"mail", php3_mail, NULL},
PHP_FE(mail, NULL)
{NULL, NULL, NULL}
};
+1
View File
@@ -33,5 +33,6 @@
#define _MICROTIME_H
PHP_FUNCTION(microtime);
PHP_FUNCTION(getrusage);
#endif /* _MICROTIME_H */
+2 -2
View File
@@ -51,8 +51,8 @@
#endif
function_entry pack_functions[] = {
{"pack", php3_pack, NULL},
{"unpack", php3_unpack, NULL},
PHP_FE(pack, NULL)
PHP_FE(unpack, NULL)
{NULL, NULL, NULL}
};
+919
View File
@@ -0,0 +1,919 @@
%{
/* $Revision$
**
** Originally written by Steven M. Bellovin <smb@research.att.com> while
** at the University of North Carolina at Chapel Hill. Later tweaked by
** a couple of people on Usenet. Completely overhauled by Rich $alz
** <rsalz@osf.org> and Jim Berets <jberets@bbn.com> in August, 1990.
** Further revised (removed obsolete constructs and cleaned up timezone
** names) in August, 1991, by Rich. Paul Eggert <eggert@twinsun.com>
** helped in September, 1992.
**
** This grammar has six shift/reduce conflicts.
**
** This code is in the public domain and has no copyright.
*/
/* SUPPRESS 530 *//* Empty body for statement */
/* SUPPRESS 593 on yyerrlab *//* Label was not used */
/* SUPPRESS 593 on yynewstate *//* Label was not used */
/* SUPPRESS 595 on yypvt *//* Automatic variable may be used before set */
#ifdef WIN32
# include "config.w32.h"
#else
# include "php_config.h"
#endif
#if WIN32||WINNT
#include <malloc.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#ifdef WIN32
# include "win32/time.h"
#endif
#include <ctype.h>
#if defined(_HPUX_SOURCE)
#include <alloca.h>
#endif
#if WIN32||WINNT
#include <time.h>
#else
# if !defined(HAVE_TM_ZONE) && !defined(_TIMEZONE)
extern time_t timezone;
# endif
#endif
#define yylhs date_yylhs
#define yylen date_yylen
#define yydefred date_yydefred
#define yydgoto date_yydgoto
#define yysindex date_yysindex
#define yyrindex date_yyrindex
#define yygindex date_yygindex
#define yytable date_yytable
#define yycheck date_yycheck
#define yyparse date_parse
#define yylex date_lex
#define yyerror date_error
static int date_lex(void);
/* See the LeapYears table in Convert. */
#define EPOCH 1970
#define END_OF_TIME 2038
/* Constants for general time calculations. */
#define DST_OFFSET 1
#define SECSPERDAY (24L * 60L * 60L)
/* Readability for TABLE stuff. */
#define HOUR(x) (x * 60)
#define LPAREN '('
#define RPAREN ')'
#define IS7BIT(x) ((unsigned int)(x) < 0200)
/*
** Get the number of elements in a fixed-size array, or a pointer just
** past the end of it.
*/
#define SIZEOF(array) ((int)(sizeof array / sizeof array[0]))
#define ENDOF(array) (&array[SIZEOF(array)])
#define CTYPE(isXXXXX, c) ((isascii((c)) && isXXXXX((c))))
typedef struct _TIMEINFO {
time_t time;
long usec;
long tzone;
} TIMEINFO;
typedef char const *STRING;
typedef char * const CSTRING;
/*
** An entry in the lexical lookup table.
*/
typedef struct _TABLE {
STRING name;
int type;
time_t value;
} TABLE;
/*
** Daylight-savings mode: on, off, or not yet known.
*/
typedef enum _DSTMODE {
DSTon, DSToff, DSTmaybe
} DSTMODE;
/*
** Meridian: am, pm, or 24-hour style.
*/
typedef enum _MERIDIAN {
MERam, MERpm, MER24
} MERIDIAN;
/*
** Global variables. We could get rid of most of them by using a yacc
** union, but this is more efficient. (This routine predates the
** yacc %union construct.)
*/
static char *yyInput;
static DSTMODE yyDSTmode;
static int yyHaveDate;
static int yyHaveRel;
static int yyHaveTime;
static time_t yyTimezone;
static time_t yyDay;
static time_t yyHour;
static time_t yyMinutes;
static time_t yyMonth;
static time_t yySeconds;
static time_t yyYear;
static MERIDIAN yyMeridian;
static time_t yyRelMonth;
static time_t yyRelSeconds;
extern struct tm *localtime();
static void date_error();
%}
%expect 6
%union {
time_t Number;
enum _MERIDIAN Meridian;
}
%token tDAY tDAYZONE tMERIDIAN tMONTH tMONTH_UNIT tSEC_UNIT tSNUMBER
%token tUNUMBER tZONE
%type <Number> tDAYZONE tMONTH tMONTH_UNIT tSEC_UNIT
%type <Number> tSNUMBER tUNUMBER tZONE numzone zone
%type <Meridian> tMERIDIAN o_merid
%%
spec : /* NULL */
| spec item
;
item : time {
yyHaveTime++;
#if defined(lint)
/* I am compulsive about lint natterings... */
if (yyHaveTime == -1) {
YYERROR;
}
#endif /* defined(lint) */
}
| time zone {
yyHaveTime++;
yyTimezone = $2;
}
| date {
yyHaveDate++;
}
| rel {
yyHaveRel = 1;
}
;
time : tUNUMBER o_merid {
if ($1 < 100) {
yyHour = $1;
yyMinutes = 0;
}
else {
yyHour = $1 / 100;
yyMinutes = $1 % 100;
}
yySeconds = 0;
yyMeridian = $2;
}
| tUNUMBER ':' tUNUMBER o_merid {
yyHour = $1;
yyMinutes = $3;
yySeconds = 0;
yyMeridian = $4;
}
| tUNUMBER ':' tUNUMBER numzone {
yyHour = $1;
yyMinutes = $3;
yyTimezone = $4;
yyMeridian = MER24;
yyDSTmode = DSToff;
}
| tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
yyHour = $1;
yyMinutes = $3;
yySeconds = $5;
yyMeridian = $6;
}
| tUNUMBER ':' tUNUMBER ':' tUNUMBER numzone {
yyHour = $1;
yyMinutes = $3;
yySeconds = $5;
yyTimezone = $6;
yyMeridian = MER24;
yyDSTmode = DSToff;
}
;
zone : tZONE {
$$ = $1;
yyDSTmode = DSToff;
}
| tDAYZONE {
$$ = $1;
yyDSTmode = DSTon;
}
| tZONE numzone {
/* Only allow "GMT+300" and "GMT-0800" */
if ($1 != 0) {
YYABORT;
}
$$ = $2;
yyDSTmode = DSToff;
}
| numzone {
$$ = $1;
yyDSTmode = DSToff;
}
;
numzone : tSNUMBER {
int i;
/* Unix and GMT and numeric timezones -- a little confusing. */
if ($1 < 0) {
/* Don't work with negative modulus. */
$1 = -$1;
if ($1 > 9999 || (i = $1 % 100) >= 60) {
YYABORT;
}
$$ = ($1 / 100) * 60 + i;
}
else {
if ($1 > 9999 || (i = $1 % 100) >= 60) {
YYABORT;
}
$$ = -(($1 / 100) * 60 + i);
}
}
;
date : tUNUMBER '/' tUNUMBER {
yyMonth = $1;
yyDay = $3;
}
| tUNUMBER '/' tUNUMBER '/' tUNUMBER {
if ($1 > 100) {
/* assume YYYY/MM/DD format, so need not to add 1900 */
yyYear = $1;
yyMonth = $3;
yyDay = $5;
}
else {
/* assume MM/DD/YY* format */
yyMonth = $1;
yyDay = $3;
if ($5 > 100) {
/* assume year is YYYY format, so need not to add 1900 */
yyYear = $5;
} else {
/* assume year is YY format, so need to add 1900 */
yyYear = $5 + 1900;
}
}
}
| tMONTH tUNUMBER {
yyMonth = $1;
yyDay = $2;
}
| tMONTH tUNUMBER ',' tUNUMBER {
yyMonth = $1;
yyDay = $2;
if ($4 > 100) {
/* assume year is YYYY format, so need not to add 1900 */
yyYear = $4;
} else {
/* assume year is YY format, so need to add 1900 */
yyYear = $4 + 1900;
}
}
| tUNUMBER tMONTH {
yyDay = $1;
yyMonth = $2;
}
| tUNUMBER tMONTH tUNUMBER {
yyDay = $1;
yyMonth = $2;
if ($3 > 100) {
/* assume year is YYYY format, so need not to add 1900 */
yyYear = $3;
} else {
/* assume year is YY format, so need to add 1900 */
yyYear = $3 + 1900;
}
}
| tDAY ',' tUNUMBER tMONTH tUNUMBER {
yyDay = $3;
yyMonth = $4;
if ($5 > 100) {
/* assume year is YYYY format, so need not to add 1900 */
yyYear = $5;
} else {
/* assume year is YY format, so need to add 1900 */
yyYear = $5 + 1900;
}
}
;
rel : tSNUMBER tSEC_UNIT {
yyRelSeconds += $1 * $2;
}
| tUNUMBER tSEC_UNIT {
yyRelSeconds += $1 * $2;
}
| tSNUMBER tMONTH_UNIT {
yyRelMonth += $1 * $2;
}
| tUNUMBER tMONTH_UNIT {
yyRelMonth += $1 * $2;
}
;
o_merid : /* NULL */ {
$$ = MER24;
}
| tMERIDIAN {
$$ = $1;
}
;
%%
/* Month and day table. */
static TABLE MonthDayTable[] = {
{ "january", tMONTH, 1 },
{ "february", tMONTH, 2 },
{ "march", tMONTH, 3 },
{ "april", tMONTH, 4 },
{ "may", tMONTH, 5 },
{ "june", tMONTH, 6 },
{ "july", tMONTH, 7 },
{ "august", tMONTH, 8 },
{ "september", tMONTH, 9 },
{ "october", tMONTH, 10 },
{ "november", tMONTH, 11 },
{ "december", tMONTH, 12 },
/* The value of the day isn't used... */
{ "sunday", tDAY, 0 },
{ "monday", tDAY, 0 },
{ "tuesday", tDAY, 0 },
{ "wednesday", tDAY, 0 },
{ "thursday", tDAY, 0 },
{ "friday", tDAY, 0 },
{ "saturday", tDAY, 0 },
};
/* Time units table. */
static TABLE UnitsTable[] = {
{ "year", tMONTH_UNIT, 12 },
{ "month", tMONTH_UNIT, 1 },
{ "week", tSEC_UNIT, 7 * 24 * 60 * 60 },
{ "day", tSEC_UNIT, 1 * 24 * 60 * 60 },
{ "hour", tSEC_UNIT, 60 * 60 },
{ "minute", tSEC_UNIT, 60 },
{ "min", tSEC_UNIT, 60 },
{ "second", tSEC_UNIT, 1 },
{ "sec", tSEC_UNIT, 1 },
};
/* Timezone table. */
static TABLE TimezoneTable[] = {
{ "gmt", tZONE, HOUR( 0) }, /* Greenwich Mean */
{ "ut", tZONE, HOUR( 0) }, /* Universal */
{ "utc", tZONE, HOUR( 0) }, /* Universal Coordinated */
{ "cut", tZONE, HOUR( 0) }, /* Coordinated Universal */
{ "z", tZONE, HOUR( 0) }, /* Greenwich Mean */
{ "wet", tZONE, HOUR( 0) }, /* Western European */
{ "bst", tDAYZONE, HOUR( 0) }, /* British Summer */
{ "nst", tZONE, HOUR(3)+30 }, /* Newfoundland Standard */
{ "ndt", tDAYZONE, HOUR(3)+30 }, /* Newfoundland Daylight */
{ "ast", tZONE, HOUR( 4) }, /* Atlantic Standard */
{ "adt", tDAYZONE, HOUR( 4) }, /* Atlantic Daylight */
{ "est", tZONE, HOUR( 5) }, /* Eastern Standard */
{ "edt", tDAYZONE, HOUR( 5) }, /* Eastern Daylight */
{ "cst", tZONE, HOUR( 6) }, /* Central Standard */
{ "cdt", tDAYZONE, HOUR( 6) }, /* Central Daylight */
{ "mst", tZONE, HOUR( 7) }, /* Mountain Standard */
{ "mdt", tDAYZONE, HOUR( 7) }, /* Mountain Daylight */
{ "pst", tZONE, HOUR( 8) }, /* Pacific Standard */
{ "pdt", tDAYZONE, HOUR( 8) }, /* Pacific Daylight */
{ "yst", tZONE, HOUR( 9) }, /* Yukon Standard */
{ "ydt", tDAYZONE, HOUR( 9) }, /* Yukon Daylight */
{ "akst", tZONE, HOUR( 9) }, /* Alaska Standard */
{ "akdt", tDAYZONE, HOUR( 9) }, /* Alaska Daylight */
{ "hst", tZONE, HOUR(10) }, /* Hawaii Standard */
{ "hast", tZONE, HOUR(10) }, /* Hawaii-Aleutian Standard */
{ "hadt", tDAYZONE, HOUR(10) }, /* Hawaii-Aleutian Daylight */
{ "ces", tDAYZONE, -HOUR(1) }, /* Central European Summer */
{ "cest", tDAYZONE, -HOUR(1) }, /* Central European Summer */
{ "mez", tZONE, -HOUR(1) }, /* Middle European */
{ "mezt", tDAYZONE, -HOUR(1) }, /* Middle European Summer */
{ "cet", tZONE, -HOUR(1) }, /* Central European */
{ "met", tZONE, -HOUR(1) }, /* Middle European */
{ "eet", tZONE, -HOUR(2) }, /* Eastern Europe */
{ "msk", tZONE, -HOUR(3) }, /* Moscow Winter */
{ "msd", tDAYZONE, -HOUR(3) }, /* Moscow Summer */
{ "wast", tZONE, -HOUR(8) }, /* West Australian Standard */
{ "wadt", tDAYZONE, -HOUR(8) }, /* West Australian Daylight */
{ "hkt", tZONE, -HOUR(8) }, /* Hong Kong */
{ "cct", tZONE, -HOUR(8) }, /* China Coast */
{ "jst", tZONE, -HOUR(9) }, /* Japan Standard */
{ "kst", tZONE, -HOUR(9) }, /* Korean Standard */
{ "kdt", tZONE, -HOUR(9) }, /* Korean Daylight */
{ "cast", tZONE, -(HOUR(9)+30) }, /* Central Australian Standard */
{ "cadt", tDAYZONE, -(HOUR(9)+30) }, /* Central Australian Daylight */
{ "east", tZONE, -HOUR(10) }, /* Eastern Australian Standard */
{ "eadt", tDAYZONE, -HOUR(10) }, /* Eastern Australian Daylight */
{ "nzst", tZONE, -HOUR(12) }, /* New Zealand Standard */
{ "nzdt", tDAYZONE, -HOUR(12) }, /* New Zealand Daylight */
/* For completeness we include the following entries. */
#if 0
/* Duplicate names. Either they conflict with a zone listed above
* (which is either more likely to be seen or just been in circulation
* longer), or they conflict with another zone in this section and
* we could not reasonably choose one over the other. */
{ "fst", tZONE, HOUR( 2) }, /* Fernando De Noronha Standard */
{ "fdt", tDAYZONE, HOUR( 2) }, /* Fernando De Noronha Daylight */
{ "bst", tZONE, HOUR( 3) }, /* Brazil Standard */
{ "est", tZONE, HOUR( 3) }, /* Eastern Standard (Brazil) */
{ "edt", tDAYZONE, HOUR( 3) }, /* Eastern Daylight (Brazil) */
{ "wst", tZONE, HOUR( 4) }, /* Western Standard (Brazil) */
{ "wdt", tDAYZONE, HOUR( 4) }, /* Western Daylight (Brazil) */
{ "cst", tZONE, HOUR( 5) }, /* Chile Standard */
{ "cdt", tDAYZONE, HOUR( 5) }, /* Chile Daylight */
{ "ast", tZONE, HOUR( 5) }, /* Acre Standard */
{ "adt", tDAYZONE, HOUR( 5) }, /* Acre Daylight */
{ "cst", tZONE, HOUR( 5) }, /* Cuba Standard */
{ "cdt", tDAYZONE, HOUR( 5) }, /* Cuba Daylight */
{ "est", tZONE, HOUR( 6) }, /* Easter Island Standard */
{ "edt", tDAYZONE, HOUR( 6) }, /* Easter Island Daylight */
{ "sst", tZONE, HOUR(11) }, /* Samoa Standard */
{ "ist", tZONE, -HOUR(2) }, /* Israel Standard */
{ "idt", tDAYZONE, -HOUR(2) }, /* Israel Daylight */
{ "idt", tDAYZONE, -(HOUR(3)+30) }, /* Iran Daylight */
{ "ist", tZONE, -(HOUR(3)+30) }, /* Iran Standard */
{ "cst", tZONE, -HOUR(8) }, /* China Standard */
{ "cdt", tDAYZONE, -HOUR(8) }, /* China Daylight */
{ "sst", tZONE, -HOUR(8) }, /* Singapore Standard */
/* Dubious (e.g., not in Olson's TIMEZONE package) or obsolete. */
{ "gst", tZONE, HOUR( 3) }, /* Greenland Standard */
{ "wat", tZONE, -HOUR(1) }, /* West Africa */
{ "at", tZONE, HOUR( 2) }, /* Azores */
{ "gst", tZONE, -HOUR(10) }, /* Guam Standard */
{ "nft", tZONE, HOUR(3)+30 }, /* Newfoundland */
{ "idlw", tZONE, HOUR(12) }, /* International Date Line West */
{ "mewt", tZONE, -HOUR(1) }, /* Middle European Winter */
{ "mest", tDAYZONE, -HOUR(1) }, /* Middle European Summer */
{ "swt", tZONE, -HOUR(1) }, /* Swedish Winter */
{ "sst", tDAYZONE, -HOUR(1) }, /* Swedish Summer */
{ "fwt", tZONE, -HOUR(1) }, /* French Winter */
{ "fst", tDAYZONE, -HOUR(1) }, /* French Summer */
{ "bt", tZONE, -HOUR(3) }, /* Baghdad */
{ "it", tZONE, -(HOUR(3)+30) }, /* Iran */
{ "zp4", tZONE, -HOUR(4) }, /* USSR Zone 3 */
{ "zp5", tZONE, -HOUR(5) }, /* USSR Zone 4 */
{ "ist", tZONE, -(HOUR(5)+30) }, /* Indian Standard */
{ "zp6", tZONE, -HOUR(6) }, /* USSR Zone 5 */
{ "nst", tZONE, -HOUR(7) }, /* North Sumatra */
{ "sst", tZONE, -HOUR(7) }, /* South Sumatra */
{ "jt", tZONE, -(HOUR(7)+30) }, /* Java (3pm in Cronusland!) */
{ "nzt", tZONE, -HOUR(12) }, /* New Zealand */
{ "idle", tZONE, -HOUR(12) }, /* International Date Line East */
{ "cat", tZONE, HOUR(10) }, /* -- expired 1967 */
{ "nt", tZONE, HOUR(11) }, /* -- expired 1967 */
{ "ahst", tZONE, HOUR(10) }, /* -- expired 1983 */
{ "hdt", tDAYZONE, HOUR(10) }, /* -- expired 1986 */
#endif /* 0 */
};
/* ARGSUSED */
static void
date_error(s)
char *s;
{
/* NOTREACHED */
}
int GetTimeInfo(TIMEINFO *Now)
{
static time_t NextHour;
static long LastTzone;
struct tm *tm;
int secondsUntilNextHour;
#if defined(HAVE_GETTIMEOFDAY)
struct timeval tv;
#endif /* defined(HAVE_GETTIMEOFDAY) */
#if !defined(HAVE_TM_GMTOFF)
struct tm local;
struct tm gmt;
#endif /* !defined(HAVE_TM_GMTOFF) */
/* Get the basic time. */
#if defined(HAVE_GETTIMEOFDAY)
if (gettimeofday(&tv, (struct timezone *)NULL) == -1)
return -1;
Now->time = tv.tv_sec;
Now->usec = tv.tv_usec;
#else
/* Can't check for -1 since that might be a time, I guess. */
(void)time(&Now->time);
Now->usec = 0;
#endif /* defined(HAVE_GETTIMEOFDAY) */
/* Now get the timezone if the last time < HH:00:00 <= now for some HH. */
if (NextHour <= Now->time) {
if ((tm = localtime(&Now->time)) == NULL)
return -1;
secondsUntilNextHour = 60 * (60 - tm->tm_min) - tm->tm_sec;
#if !defined(HAVE_TM_GMTOFF)
/* To get the timezone, compare localtime with GMT. */
local = *tm;
if ((tm = gmtime(&Now->time)) == NULL)
return -1;
gmt = *tm;
/* Assume we are never more than 24 hours away. */
LastTzone = gmt.tm_yday - local.tm_yday;
if (LastTzone > 1)
LastTzone = -24;
else if (LastTzone < -1)
LastTzone = 24;
else
LastTzone *= 24;
/* Scale in the hours and minutes; ignore seconds. */
LastTzone += gmt.tm_hour - local.tm_hour;
LastTzone *= 60;
LastTzone += gmt.tm_min - local.tm_min;
#else
LastTzone = (0 - tm->tm_gmtoff) / 60;
#endif /* defined(HAVE_TM_GMTOFF) */
NextHour = Now->time + secondsUntilNextHour;
}
Now->tzone = LastTzone;
return 0;
}
static time_t
ToSeconds(Hours, Minutes, Seconds, Meridian)
time_t Hours;
time_t Minutes;
time_t Seconds;
MERIDIAN Meridian;
{
if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 61)
return -1;
if (Meridian == MER24) {
if (Hours < 0 || Hours > 23)
return -1;
}
else {
if (Hours < 1 || Hours > 12)
return -1;
if (Hours == 12)
Hours = 0;
if (Meridian == MERpm)
Hours += 12;
}
return (Hours * 60L + Minutes) * 60L + Seconds;
}
static time_t
Convert(Month, Day, Year, Hours, Minutes, Seconds, Meridian, dst)
time_t Month;
time_t Day;
time_t Year;
time_t Hours;
time_t Minutes;
time_t Seconds;
MERIDIAN Meridian;
DSTMODE dst;
{
static int DaysNormal[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
static int DaysLeap[13] = {
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
static int LeapYears[] = {
1972, 1976, 1980, 1984, 1988, 1992, 1996,
2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036
};
int *yp;
int *mp;
time_t Julian;
int i;
time_t tod;
/* Year should not be passed as a relative value, but absolute one.
so this should not happen, but just ensure it */
if (Year < 0)
Year = -Year;
if (Year < 100)
Year += 1900;
if (Year < EPOCH)
Year += 100;
for (mp = DaysNormal, yp = LeapYears; yp < ENDOF(LeapYears); yp++)
if (Year == *yp) {
mp = DaysLeap;
break;
}
if (Year < EPOCH || Year > END_OF_TIME
|| Month < 1 || Month > 12
/* NOSTRICT *//* conversion from long may lose accuracy */
|| Day < 1 || Day > mp[(int)Month])
return -1;
Julian = Day - 1 + (Year - EPOCH) * 365;
for (yp = LeapYears; yp < ENDOF(LeapYears); yp++, Julian++)
if (Year <= *yp)
break;
for (i = 1; i < Month; i++)
Julian += *++mp;
Julian *= SECSPERDAY;
Julian += yyTimezone * 60L;
if ((tod = ToSeconds(Hours, Minutes, Seconds, Meridian)) < 0)
return -1;
Julian += tod;
tod = Julian;
if (dst == DSTon || (dst == DSTmaybe && localtime(&tod)->tm_isdst))
Julian -= DST_OFFSET * 60 * 60;
return Julian;
}
static time_t
DSTcorrect(Start, Future)
time_t Start;
time_t Future;
{
time_t StartDay;
time_t FutureDay;
StartDay = (localtime(&Start)->tm_hour + 1) % 24;
FutureDay = (localtime(&Future)->tm_hour + 1) % 24;
return (Future - Start) + (StartDay - FutureDay) * DST_OFFSET * 60 * 60;
}
static time_t
RelativeMonth(Start, RelMonth)
time_t Start;
time_t RelMonth;
{
struct tm *tm;
time_t Month;
time_t Year;
tm = localtime(&Start);
Month = 12 * tm->tm_year + tm->tm_mon + RelMonth;
Year = Month / 12;
Year += 1900;
Month = Month % 12 + 1;
return DSTcorrect(Start,
Convert(Month, (time_t)tm->tm_mday, Year,
(time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
MER24, DSTmaybe));
}
static int LookupWord(char *buff, int length)
{
char *p;
STRING q;
TABLE *tp;
int c;
p = buff;
c = p[0];
/* See if we have an abbreviation for a month. */
if (length == 3 || (length == 4 && p[3] == '.'))
for (tp = MonthDayTable; tp < ENDOF(MonthDayTable); tp++) {
q = tp->name;
if (c == q[0] && p[1] == q[1] && p[2] == q[2]) {
yylval.Number = tp->value;
return tp->type;
}
}
else
for (tp = MonthDayTable; tp < ENDOF(MonthDayTable); tp++)
if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
yylval.Number = tp->value;
return tp->type;
}
/* Try for a timezone. */
for (tp = TimezoneTable; tp < ENDOF(TimezoneTable); tp++)
if (c == tp->name[0] && p[1] == tp->name[1]
&& strcmp(p, tp->name) == 0) {
yylval.Number = tp->value;
return tp->type;
}
/* Try the units table. */
for (tp = UnitsTable; tp < ENDOF(UnitsTable); tp++)
if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
yylval.Number = tp->value;
return tp->type;
}
/* Strip off any plural and try the units table again. */
if (--length > 0 && p[length] == 's') {
p[length] = '\0';
for (tp = UnitsTable; tp < ENDOF(UnitsTable); tp++)
if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
p[length] = 's';
yylval.Number = tp->value;
return tp->type;
}
p[length] = 's';
}
length++;
/* Drop out any periods. */
for (p = buff, q = (STRING)buff; *q; q++)
if (*q != '.')
*p++ = *q;
*p = '\0';
/* Try the meridians. */
if (buff[1] == 'm' && buff[2] == '\0') {
if (buff[0] == 'a') {
yylval.Meridian = MERam;
return tMERIDIAN;
}
if (buff[0] == 'p') {
yylval.Meridian = MERpm;
return tMERIDIAN;
}
}
/* If we saw any periods, try the timezones again. */
if (p - buff != length) {
c = buff[0];
for (p = buff, tp = TimezoneTable; tp < ENDOF(TimezoneTable); tp++)
if (c == tp->name[0] && p[1] == tp->name[1]
&& strcmp(p, tp->name) == 0) {
yylval.Number = tp->value;
return tp->type;
}
}
/* Unknown word -- assume GMT timezone. */
yylval.Number = 0;
return tZONE;
}
static int date_lex(void)
{
char c;
char *p;
char buff[20];
int sign;
int i;
int nesting;
for ( ; ; ) {
/* Get first character after the whitespace. */
for ( ; ; ) {
while (CTYPE(isspace, (int)*yyInput))
yyInput++;
c = *yyInput;
/* Ignore RFC 822 comments, typically time zone names. */
if (c != LPAREN)
break;
for (nesting = 1; (c = *++yyInput) != RPAREN || --nesting; )
if (c == LPAREN)
nesting++;
else if (!IS7BIT(c) || c == '\0' || c == '\r'
|| (c == '\\' && ((c = *++yyInput) == '\0' || !IS7BIT(c))))
/* Lexical error: bad comment. */
return '?';
yyInput++;
}
/* A number? */
if (CTYPE(isdigit, (int)c) || c == '-' || c == '+') {
if (c == '-' || c == '+') {
sign = c == '-' ? -1 : 1;
yyInput++;
if (!CTYPE(isdigit, (int)*yyInput))
/* Skip the plus or minus sign. */
continue;
}
else
sign = 0;
for (i = 0; (c = *yyInput++) != '\0' && CTYPE(isdigit, (int)c); )
i = 10 * i + c - '0';
yyInput--;
yylval.Number = sign < 0 ? -i : i;
return sign ? tSNUMBER : tUNUMBER;
}
/* A word? */
if (CTYPE(isalpha, (int)c)) {
for (p = buff; (c = *yyInput++) == '.' || CTYPE(isalpha, (int)c); )
if (p < &buff[sizeof buff - 1])
*p++ = CTYPE(isupper, (int)c) ? tolower(c) : c;
*p = '\0';
yyInput--;
return LookupWord(buff, p - buff);
}
return *yyInput++;
}
}
time_t parsedate(char *p, TIMEINFO *now)
{
extern int date_parse();
struct tm *tm;
TIMEINFO ti;
time_t Start;
yyInput = p;
if (now == NULL) {
now = &ti;
(void)GetTimeInfo(&ti);
}
tm = localtime(&now->time);
yyYear = tm->tm_year + 1900;
yyMonth = tm->tm_mon + 1;
yyDay = tm->tm_mday;
#ifdef HAVE_TM_GMTOFF
yyTimezone = tm->tm_gmtoff/60;
#else
yyTimezone = timezone/60;
#endif
yyDSTmode = DSTmaybe;
yyHour = 0;
yyMinutes = 0;
yySeconds = 0;
yyMeridian = MER24;
yyRelSeconds = 0;
yyRelMonth = 0;
yyHaveDate = 0;
yyHaveRel = 0;
yyHaveTime = 0;
if (date_parse() || yyHaveTime > 1 || yyHaveDate > 1)
return -1;
if (yyHaveDate || yyHaveTime) {
Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
yyMeridian, yyDSTmode);
if (Start < 0)
return -1;
}
else {
Start = now->time;
if (!yyHaveRel)
Start -= (tm->tm_hour * 60L + tm->tm_min) * 60L + tm->tm_sec;
}
Start += yyRelSeconds;
if (yyRelMonth)
Start += RelativeMonth(Start, yyRelMonth);
/* Have to do *something* with a legitimate -1 so it's distinguishable
* from the error return value. (Alternately could set errno on error.) */
return Start == -1 ? 0 : Start;
}
+8 -7
View File
@@ -44,19 +44,20 @@ PHP_FUNCTION(fileowner);
PHP_FUNCTION(fileperms);
PHP_FUNCTION(filesize);
PHP_FUNCTION(filetype);
PHP_FUNCTION(iswritable);
PHP_FUNCTION(isreadable);
PHP_FUNCTION(isexec);
PHP_FUNCTION(isfile);
PHP_FUNCTION(isdir);
PHP_FUNCTION(islink);
PHP_FUNCTION(fileexists);
PHP_FUNCTION(is_writable);
PHP_FUNCTION(is_readable);
PHP_FUNCTION(is_executable);
PHP_FUNCTION(is_file);
PHP_FUNCTION(is_dir);
PHP_FUNCTION(is_link);
PHP_FUNCTION(file_exists);
PHP_FUNCTION(stat);
PHP_FUNCTION(lstat);
PHP_FUNCTION(chown);
PHP_FUNCTION(chgrp);
PHP_FUNCTION(chmod);
PHP_FUNCTION(touch);
PHP_FUNCTION(clearstatcache);
extern php3_module_entry php3_filestat_module_entry;
#define php3_filestat_module_ptr &php3_filestat_module_entry
+3 -2
View File
@@ -49,7 +49,7 @@ PHP_FUNCTION(str_replace);
PHP_FUNCTION(chop);
PHP_FUNCTION(trim);
PHP_FUNCTION(ltrim);
void soundex(INTERNAL_FUNCTION_PARAMETERS);
PHP_FUNCTION(soundex);
PHP_FUNCTION(explode);
PHP_FUNCTION(implode);
@@ -80,9 +80,10 @@ PHP_FUNCTION(nl2br);
PHP_FUNCTION(setlocale);
PHP_FUNCTION(stristr);
PHP_FUNCTION(chunk_split);
PHP_FUNCTION(parsestr);
PHP_FUNCTION(parse_str);
PHP_FUNCTION(bin2hex);
PHP_FUNCTION(similar_text);
PHP_FUNCTION(strip_tags);
extern PHPAPI char *_php3_strtoupper(char *s);
extern PHPAPI char *_php3_strtolower(char *s);
+46 -4
View File
@@ -201,6 +201,8 @@ static inline uint32 randomMT(void)
#define PHP_RAND_MAX RAND_MAX
#endif
/* {{{ proto void srand(int seed)
Seeds random number generator */
PHP_FUNCTION(srand)
{
pval *arg;
@@ -219,7 +221,10 @@ PHP_FUNCTION(srand)
#endif
#endif
}
/* }}} */
/* {{{ proto void mt_srand(int seed)
Seeds Mersenne Twister random number generator */
PHP_FUNCTION(mt_srand)
{
pval *arg;
@@ -229,7 +234,10 @@ PHP_FUNCTION(mt_srand)
convert_to_long(arg);
seedMT(arg->value.lval);
}
/* }}} */
/* {{{ proto int rand([int min, int max])
Returns a random number */
PHP_FUNCTION(rand)
{
pval *p_min=NULL, *p_max=NULL;
@@ -262,13 +270,40 @@ PHP_FUNCTION(rand)
return_value->value.lval = rand();
#endif
#endif
/*
* A bit of tricky math here. We want to avoid using a modulus because
* that simply tosses the high-order bits and might skew the distribution
* of random values over the range. Instead we map the range directly.
*
* We need to map the range from 0...M evenly to the range a...b
* Let n = the random number and n' = the mapped random number
*
* Then we have: n' = a + n(b-a)/M
*
* We have a problem here in that only n==M will get mapped to b which
# means the chances of getting b is much much less than getting any of
# the other values in the range. We can fix this by increasing our range
# artifically and using:
#
# n' = a + n(b-a+1)/M
*
# Now we only have a problem if n==M which would cause us to produce a
# number of b+1 which would be bad. So we bump M up by one to make sure
# this will never happen, and the final algorithm looks like this:
#
# n' = a + n(b-a+1)/(M+1)
*
* -RL
*/
if (p_min && p_max) { /* implement range */
return_value->value.lval = p_min->value.lval +
(int)((double)p_max->value.lval * return_value->value.lval/(PHP_RAND_MAX+(double)p_min->value.lval));
(int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(PHP_RAND_MAX+1.0));
}
}
/* }}} */
/* {{{ proto int mt_rand([int min, int max])
Returns a random number from Mersenne Twister */
PHP_FUNCTION(mt_rand)
{
pval *p_min=NULL, *p_max=NULL;
@@ -304,16 +339,23 @@ PHP_FUNCTION(mt_rand)
if (p_min && p_max) { /* implement range */
return_value->value.lval = p_min->value.lval +
(int)((double)p_max->value.lval * return_value->value.lval/(PHP_RAND_MAX+(double)p_min->value.lval));
(int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(PHP_RAND_MAX+1.0));
}
}
/* }}} */
/* {{{ proto int getrandmax(void)
Returns the maximum value a random number can have */
PHP_FUNCTION(getrandmax)
{
return_value->type = IS_LONG;
return_value->value.lval = PHP_RAND_MAX;
}
/* }}} */
/* {{{ proto int mt_getrandmax(void)
Returns the maximum value a random number from Mersenne Twister can have */
PHP_FUNCTION(mt_getrandmax)
{
return_value->type = IS_LONG;
@@ -323,7 +365,7 @@ PHP_FUNCTION(mt_getrandmax)
*/
return_value->value.lval = 2147483647; /* 2^^31 */
}
/* }}} */
/*
* Local variables:
* tab-width: 4
+9 -9
View File
@@ -28,13 +28,13 @@
unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
function_entry reg_functions[] = {
{"ereg", php3_ereg, third_argument_force_ref },
{"ereg_replace", php3_eregreplace, NULL },
{"eregi", php3_eregi, third_argument_force_ref },
{"eregi_replace", php3_eregireplace, NULL },
{"split", php3_split, NULL},
{"join", php3_implode, NULL},
{"sql_regcase", php3_sql_regcase, NULL},
PHP_FE(ereg, third_argument_force_ref)
PHP_FE(ereg_replace, NULL)
PHP_FE(eregi, third_argument_force_ref)
PHP_FE(eregi_replace, NULL)
PHP_FE(split, NULL)
PHP_FALIAS(join, implode, NULL)
PHP_FE(sql_regcase, NULL)
{NULL, NULL, NULL}
};
@@ -491,7 +491,7 @@ static void _php3_eregreplace(INTERNAL_FUNCTION_PARAMETERS, int icase)
/* {{{ proto string ereg_replace(string pattern, string string [, array registers])
Replace regular expression */
PHP_FUNCTION(eregreplace)
PHP_FUNCTION(ereg_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
@@ -499,7 +499,7 @@ PHP_FUNCTION(eregreplace)
/* {{{ proto string eregi_replace(string pattern, string string [, array registers])
Case insensitive replace regular expression */
PHP_FUNCTION(eregireplace)
PHP_FUNCTION(eregi_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
+2 -2
View File
@@ -40,8 +40,8 @@ char *_php3_regreplace(const char *pattern, const char *replace, const char *str
PHP_FUNCTION(ereg);
PHP_FUNCTION(eregi);
PHP_FUNCTION(eregireplace);
PHP_FUNCTION(eregreplace);
PHP_FUNCTION(eregi_replace);
PHP_FUNCTION(ereg_replace);
PHP_FUNCTION(split);
PHPAPI PHP_FUNCTION(sql_regcase);
+1 -1
View File
@@ -26,7 +26,7 @@
/* Simple soundex algorithm as described by Knuth in TAOCP, vol 3 */
/* {{{ proto string soundex(string str)
Calculate the soundex key of a string */
void soundex(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(soundex)
{
char l, u;
char *somestring;
+2 -2
View File
@@ -1712,9 +1712,9 @@ PHP_FUNCTION(setlocale)
}
/* }}} */
/* {{{ proto void parsestr(string encoded_string)
/* {{{ proto void parse_str(string encoded_string)
Parses GET/POST/COOKIE data and sets global variables. */
PHP_FUNCTION(parsestr)
PHP_FUNCTION(parse_str)
{
pval *arg;
char *res = NULL;
+4 -4
View File
@@ -257,10 +257,10 @@ PHP_FUNCTION(syslog)
function_entry syslog_functions[] = {
{"openlog", php3_openlog, NULL},
{"syslog", php3_syslog, NULL},
{"closelog", php3_closelog, NULL},
{"define_syslog_variables", php3_define_syslog_variables, NULL},
PHP_FE(openlog, NULL)
PHP_FE(syslog, NULL)
PHP_FE(closelog, NULL)
PHP_FE(define_syslog_variables, NULL)
{NULL, NULL, NULL}
};
+2
View File
@@ -696,6 +696,7 @@ PHP_FUNCTION(wddx_serialize_vars)
_php_wddx_add_chunk(packet, WDDX_STRUCT_S);
for (i=0; i<argc; i++) {
convert_to_string(args[i]);
_php_wddx_add_var(packet, args[i]);
}
@@ -815,6 +816,7 @@ PHP_FUNCTION(wddx_add_vars)
}
for (i=1; i<argc; i++) {
convert_to_string(args[i]);
_php_wddx_add_var(packet, args[i]);
}
+1 -1
View File
@@ -3,7 +3,7 @@
phplibdir=$(libdir)/php
SRC=xml.c
INCLUDES=@INCLUDES@ @XML_INCLUDE@ -I@top_srcdir@ -I@top_srcdir@/libzend
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_xml.a
phplib_LTLIBRARIES=libphpext_xml.la
libphpext_xml_a_SOURCES=$(SRC)
+10 -7
View File
@@ -3,7 +3,10 @@
AC_MSG_CHECKING(for XML support)
AC_ARG_WITH(xml,
[ --with-xml Include XML support],[
[ --with-xml[=DIR] Include XML support. Will look for expat
in DIR if specified. Set DIR to "shared" to
build as a dl, or "shared,DIR" to build as a dl
and still specify DIR.],[
case $withval in
shared)
shared=yes
@@ -24,19 +27,20 @@ AC_ARG_WITH(xml,
AC_MSG_RESULT([yes (static)])
fi
if test "$withval" = "yes"; then
test -d /usr/include/xmltok && XML_INCLUDE="-I/usr/include/xmltok"
test -d /usr/include/xml && XML_INCLUDE="-I/usr/include/xml"
test -d /usr/local/include/xml && XML_INCLUDE="-I/usr/local/include/xml"
test -d /usr/include/xmltok && XML_INCLUDE="/usr/include/xmltok"
test -d /usr/include/xml && XML_INCLUDE="/usr/include/xml"
test -d /usr/local/include/xml && XML_INCLUDE="/usr/local/include/xml"
AC_CHECK_LIB(expat, main, XML_LIBS="-lexpat", XML_LIBS="-lxmlparse -lxmltok")
else
XML_LIBS="-L$withval/lib -lexpat"
if test -d $withval/include/xml; then
XML_INCLUDE="-I$withval/include/xml"
XML_INCLUDE="$withval/include/xml"
else
XML_INCLUDE="-I$withval/include"
XML_INCLUDE="$withval/include"
fi
fi
AC_DEFINE(HAVE_LIBEXPAT, 1)
AC_ADD_INCLUDE($XML_INCLUDE)
PHP_EXTENSION(xml, $shared)
if test "$shared" != "yes"; then
EXTRA_LIBS="$EXTRA_LIBS $XML_LIBS"
@@ -48,4 +52,3 @@ AC_ARG_WITH(xml,
AC_MSG_RESULT(no)
])
AC_SUBST(XML_LIBS)
AC_SUBST(XML_INCLUDE)
-2822
View File
File diff suppressed because it is too large. Load diff
-3779
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -204,7 +204,7 @@
/* Define if you have the setlocale function. */
#define HAVE_SETLOCALE 1
#define HAVE_LOCALE_H
#define HAVE_LOCALE_H 1
/* Define if you have the setvbuf function. */
#ifndef HAVE_BINDLIB
+12 -4
View File
@@ -359,6 +359,9 @@ PHPAPI void php3_error(int type, const char *format,...)
error_filename = zend_get_compiled_filename();
error_lineno = CG(zend_lineno);
if (!error_filename) {
error_filename = zend_get_executed_filename(ELS_C);
}
}
break;
case E_ERROR:
@@ -372,6 +375,10 @@ PHPAPI void php3_error(int type, const char *format,...)
error_lineno = 0;
break;
}
if (!error_filename) {
error_filename = "Unknown";
}
if (EG(error_reporting) & type || (type & E_CORE)) {
char *error_type_str;
@@ -501,7 +508,7 @@ static void php3_unset_timeout()
}
void php3_set_time_limit(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(set_time_limit)
{
pval *new_timeout;
PLS_FETCH();
@@ -768,11 +775,10 @@ int php_module_startup(sapi_module_struct *sf)
sapi_globals_struct *sapi_globals = ts_resource(sapi_globals_id);
#endif
#if (WIN32|WINNT) && !(USE_SAPI)
WORD wVersionRequested;
WORD wVersionRequested = MAKEWORD(2, 0);
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 0);
#endif
ELS_FETCH();
SG(server_context) = NULL;
SG(request_info).request_method = NULL;
@@ -782,6 +788,8 @@ int php_module_startup(sapi_module_struct *sf)
return SUCCESS;
}
EG(error_reporting) = E_ALL & ~E_NOTICE;
sapi_module = *sf;
zend_output_startup();
+3 -1
View File
@@ -1 +1,3 @@
#define PHP_VERSION "4.0B1"
/* automatically generated by configure */
/* edit configure.in.in to change version number */
#define PHP_VERSION "4.0b2-dev"
+1 -1
View File
@@ -425,7 +425,7 @@ CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, c
{
char bool_val[2];
if (!strcmp(arg2, "On")) {
if (!strcasecmp(arg2, "On")) {
bool_val[0] = '1';
} else {
bool_val[0] = '0';
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

+48
View File
@@ -0,0 +1,48 @@
%define version @VERSION@
%define so_version 4
%define release 1
Name: php
Summary: PHP: Hypertext Preprocessor
Group: Development/Languages
Version: %{version}
Release: %{release}
Copyright: The PHP license (see "LICENSE" file included in distribution)
Source: http://www.php.net/version4/downloads/php-%{version}.tar.gz
Icon: php4.gif
URL: http://www.php.net/
Packager: PHP Group <group@php.net>
BuildRoot: /var/tmp/php-%{version}
%description
PHP is an HTML-embedded scripting language. Much of its syntax is
borrowed from C, Java and Perl with a couple of unique PHP-specific
features thrown in. The goal of the language is to allow web
developers to write dynamically generated pages quickly.
%prep
%setup
%build
set -x
./buildconf
./configure --prefix=/usr --with-apxs \
--enable-track-vars --disable-debug \
--with-xml=shared \
# figure out configure options options based on what packages are installed
# to override, use the OVERRIDE_OPTIONS environment variable. To add
# extra options, use the OPTIONS environment variable.
#test rpm -q MySQL-devel >&/dev/null && OPTIONS="$OPTIONS --with-mysql=shared"
#test rpm -q solid-devel >&/dev/null && OPTIONS="$OPTIONS --with-solid=shared,/home/solid"
#test rpm -q postgresql-devel >&/dev/null && OPTIONS="$OPTIONS --with-pgsql=shared"
test rpm -q expat >&/dev/null && OPTIONS="$OPTIONS --with-xml=shared"
if test "x$OVERRIDE_OPTIONS" = "x"; then
./configure --prefix=/usr --with-apxs=$APXS $OPTIONS
else
./configure $OVERRIDE_OPTIONS
fi
+24
View File
@@ -363,6 +363,10 @@ SOURCE=.\ext\standard\pageinfo.c
# End Source File
# Begin Source File
SOURCE=.\ext\standard\parsedate.c
# End Source File
# Begin Source File
SOURCE=.\ext\pcre\php_pcre.c
# End Source File
# Begin Source File
@@ -738,6 +742,26 @@ BuildCmds= \
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\ext\standard\parsedate.y
!IF "$(CFG)" == "php4dll - Win32 Debug"
# Begin Custom Build
InputPath=.\ext\standard\parsedate.y
"ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
cd ext\standard
bison --output=parsedate.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" parsedate.y
# End Custom Build
!ELSEIF "$(CFG)" == "php4dll - Win32 Release"
!ENDIF
# End Source File
# End Group
# Begin Group "Scanners"
+28
View File
@@ -371,6 +371,10 @@ SOURCE=.\ext\standard\pageinfo.c
# End Source File
# Begin Source File
SOURCE=.\ext\standard\parsedate.c
# End Source File
# Begin Source File
SOURCE=.\ext\pcre\php_pcre.c
# End Source File
# Begin Source File
@@ -754,6 +758,26 @@ BuildCmds= \
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\ext\standard\parsedate.y
!IF "$(CFG)" == "php4dllts - Win32 Debug_TS"
# Begin Custom Build
InputPath=.\ext\standard\parsedate.y
"ext\standard\parsedate.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
cd ext\standard
bison --output=parsedate.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" parsedate.y
# End Custom Build
!ELSEIF "$(CFG)" == "php4dllts - Win32 Release_TS"
!ENDIF
# End Source File
# End Group
# Begin Group "Scanners"
@@ -792,6 +816,10 @@ InputPath=".\configuration-scanner.l"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\ChangeLog
# End Source File
# Begin Source File
SOURCE=.\LICENSE
# End Source File
# Begin Source File
+1
View File
@@ -14,3 +14,4 @@ for dir in $extensions; do
done
(set -x; $top_srcdir/scripts/armerge $outfile $ext_libs)
exit 0