????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.15.34.228 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/self/root/home/b8009/php-5.6.22/ext/dba/libcdb/ |
Upload File : |
/* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2016 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ */ /* $Id: 2b0c194e65d990aef32405edbeb3b344a9a7ae5f $ */ /* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include <sys/types.h> #include <sys/stat.h> #ifndef PHP_WIN32 #include <sys/mman.h> #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #include <string.h> #include <errno.h> #include "cdb.h" #ifndef EPROTO # define EPROTO -15 /* cdb 0.75's default for PROTOless systems */ #endif /* {{{ cdb_match */ static int cdb_match(struct cdb *c, char *key, unsigned int len, uint32 pos TSRMLS_DC) { char buf[32]; unsigned int n; while (len > 0) { n = sizeof(buf); if (n > len) n = len; if (cdb_read(c, buf, n, pos TSRMLS_CC) == -1) return -1; if (memcmp(buf, key, n)) return 0; pos += n; key += n; len -= n; } return 1; } /* }}} */ /* {{{ cdb_hash */ uint32 cdb_hash(char *buf, unsigned int len) { uint32 h; const unsigned char * b = (unsigned char *)buf; h = CDB_HASHSTART; while (len--) { h = ( h + (h << 5)) ^ (*b++); } return h; } /* }}} */ /* {{{ cdb_free */ void cdb_free(struct cdb *c TSRMLS_DC) { } /* }}} */ /* {{{ cdb_findstart */ void cdb_findstart(struct cdb *c TSRMLS_DC) { c->loop = 0; } /* }}} */ /* {{{ cdb_init */ void cdb_init(struct cdb *c, php_stream *fp TSRMLS_DC) { cdb_free(c TSRMLS_CC); cdb_findstart(c TSRMLS_CC); c->fp = fp; } /* }}} */ /* {{{ cdb_read */ int cdb_read(struct cdb *c, char *buf, unsigned int len, uint32 pos TSRMLS_DC) { if (php_stream_seek(c->fp, pos, SEEK_SET) == -1) { errno = EPROTO; return -1; } while (len > 0) { int r; do { r = php_stream_read(c->fp, buf, len); } while ((r == -1) && (errno == EINTR)); if (r == -1) return -1; if (r == 0) { errno = EPROTO; return -1; } buf += r; len -= r; } return 0; } /* }}} */ /* {{{ cdb_findnext */ int cdb_findnext(struct cdb *c, char *key, unsigned int len TSRMLS_DC) { char buf[8]; uint32 pos; uint32 u; if (!c->loop) { u = cdb_hash(key, len); if (cdb_read(c, buf, 8, (u << 3) & 2047 TSRMLS_CC) == -1) return -1; uint32_unpack(buf + 4,&c->hslots); if (!c->hslots) return 0; uint32_unpack(buf, &c->hpos); c->khash = u; u >>= 8; u %= c->hslots; u <<= 3; c->kpos = c->hpos + u; } while (c->loop < c->hslots) { if (cdb_read(c, buf, 8, c->kpos TSRMLS_CC) == -1) return -1; uint32_unpack(buf + 4, &pos); if (!pos) return 0; c->loop += 1; c->kpos += 8; if (c->kpos == c->hpos + (c->hslots << 3)) c->kpos = c->hpos; uint32_unpack(buf, &u); if (u == c->khash) { if (cdb_read(c, buf, 8, pos TSRMLS_CC) == -1) return -1; uint32_unpack(buf, &u); if (u == len) switch(cdb_match(c, key, len, pos + 8 TSRMLS_CC)) { case -1: return -1; case 1: uint32_unpack(buf + 4, &c->dlen); c->dpos = pos + 8 + len; return 1; } } } return 0; } /* }}} */ /* {{{ cdb_find */ int cdb_find(struct cdb *c, char *key, unsigned int len TSRMLS_DC) { cdb_findstart(c TSRMLS_CC); return cdb_findnext(c, key, len TSRMLS_CC); } /* }}} */ /* {{{ cdb_version */ char *cdb_version() { return "0.75, $Id: 2b0c194e65d990aef32405edbeb3b344a9a7ae5f $"; } /* }}} */