Changeset

3841:f5afa0dc3aff

net.dns: Removed dependency on util.ztact by moving ztact.get/set in.
author Waqas Hussain <waqas20@gmail.com>
date Thu, 09 Dec 2010 23:22:21 +0500
parents 3840:abcbce5e4240
children 3842:74381c7731bf
files net/dns.lua
diffstat 1 files changed, 43 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/net/dns.lua	Thu Dec 09 22:17:28 2010 +0500
+++ b/net/dns.lua	Thu Dec 09 23:22:21 2010 +0500
@@ -2,8 +2,6 @@
 -- This file is included with Prosody IM. It has modifications,
 -- which are hereby placed in the public domain.
 
--- public domain 20080404 lua@ztact.com
-
 
 -- todo: quick (default) header generation
 -- todo: nxdomain, error handling
@@ -15,7 +13,6 @@
 
 
 local socket = require "socket";
-local ztact = require "util.ztact";
 local timer = require "util.timer";
 
 local _, windows = pcall(require, "util.windows");
@@ -24,9 +21,50 @@
 local coroutine, io, math, string, table =
       coroutine, io, math, string, table;
 
-local ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack =
-      ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack;
+local ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack, select =
+      ipairs, next, pairs, print, setmetatable, tostring, assert, error, unpack, select;
+
+local ztact = { -- public domain 20080404 lua@ztact.com
+	get = function(parent, ...)
+		local len = select('#', ...);
+		for i=1,len do
+			parent = parent[select(i, ...)];
+			if parent == nil then break; end
+		end
+		return parent;
+	end;
+	set = function(parent, ...)
+		local len = select('#', ...);
+		local key, value = select(len-1, ...);
+		local cutpoint, cutkey;
+
+		for i=1,len-2 do
+			local key = select (i, ...)
+			local child = parent[key]
 
+			if value == nil then
+				if child == nil then
+					return;
+				elseif next(child, next(child)) then
+					cutpoint = nil; cutkey = nil;
+				elseif cutpoint == nil then
+					cutpoint = parent; cutkey = key;
+				end
+			elseif child == nil then
+				child = {};
+				parent[key] = child;
+			end
+			parent = child
+		end
+
+		if value == nil and cutpoint then
+			cutpoint[cutkey] = nil;
+		else
+			parent[key] = value;
+			return value;
+		end
+	end;
+};
 local get, set = ztact.get, ztact.set;
 
 local default_timeout = 15;