JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fdb works, added fault-tollerent read_wole_file
authorJason Woofenden <jason183@herkamire.com>
Tue, 5 Jun 2007 08:17:10 +0000 (04:17 -0400)
committerJason Woofenden <jason183@herkamire.com>
Tue, 5 Jun 2007 08:17:10 +0000 (04:17 -0400)
fdb.php
file.php

diff --git a/fdb.php b/fdb.php
index 4e28972..9eab198 100644 (file)
--- a/fdb.php
+++ b/fdb.php
@@ -23,7 +23,8 @@
 # very simple database.
 
 # Keys are truncated to 32 bytes, made lowercase, and all characters that are
-# not alpha/numeric are replaced with underscores.
+# not alpha/numeric are replaced with underscores. Periods and hyphens are only
+# replaced if they are at the begining.
 
 # Data can be either a string or an array.
 
@@ -31,6 +32,8 @@
 # fdb_set_dir() passing the path to that directory.
 
 
+require_once('code/wfpl/file.php');
+
 # call this to set what directory is used to store the files
 function fdb_set_dir($dir) {
        $GLOBALS['fdb_dir'] = $dir;
@@ -59,13 +62,19 @@ function int_at($string, $index) {
 }
 
 # remove the first 4 bytes of the string, and return them as an int
-function pop_int($&string) {
-       $int = from_raw_int(substring($string, 0 4));
+function pop_int(&$string) {
+       $int = from_raw_int(substr($string, 0, 4));
        $string = substr($string, 4);
        return $int;
 }
 
 
+function fdb_fix_key($key) {
+       $key = ereg_replace('[^a-z0-9.-]', '_', strtolower($key));
+       $key = ereg_replace('^[-.]', '_', strtolower($key));
+       return substr($key, 0, 32);
+}
+
 
 function fdb_get_raw($key) {
        $key = fdb_fix_key($key);
@@ -80,14 +89,14 @@ function fdb_set_raw($key, $data) {
 # like fdb_get() except it returns an array even when there's just one element
 function fdb_geta($key) {
        $key = fdb_fix_key($key);
-       $data = fd_get_raw($key);
+       $data = fdb_get_raw($key);
        if($data === false) {
                return false;
        }
        $header_count = pop_int($data);
        $out = array();
        while($header_count--) {
-               $size = int_at($data);
+               $size = pop_int($data);
                $out[] = substr($data, 0, $size);
                $data = substr($data, $size);
        }
@@ -104,6 +113,9 @@ function fdb_geta($key) {
 # array in this case too)
 function fdb_get($key) {
        $ret = fdb_geta($key);
+       if($ret == false) {
+               return false;
+       }
        if(count($ret) == 1) {
                return $ret[0];
        } else {
@@ -112,7 +124,7 @@ function fdb_get($key) {
 }
 
 # data can be a string or array
-function fdb_put($key, $data) {
+function fdb_set($key, $data) {
        $key = fdb_fix_key($key);
        if(!is_array($data)) {
                $data = array($data);
@@ -122,7 +134,7 @@ function fdb_put($key, $data) {
                $out .= to_raw_int(strlen($dat));
                $out .= $dat;
        }
-       return $out;
+       fdb_set_raw($key, $out);
 }
 
 ?>
index 3660397..9d9965e 100644 (file)
--- a/file.php
+++ b/file.php
@@ -41,4 +41,11 @@ function write_whole_file($name, $data) {
        fclose($fd);
 }
 
+function read_whole_file_or_false($name) {
+       if(!file_exists($name)) {
+               return false;
+       }
+       return read_whole_file($name);
+}
+
 ?>