diff --git a/bin/fake_dynamic_load.pike b/bin/fake_dynamic_load.pike
index 32f1f477e441f39dde408a46d1afd3edf5971ee2..4bd4017622ee09b91f47eb0cd5eba21ac8fdcf0b 100755
--- a/bin/fake_dynamic_load.pike
+++ b/bin/fake_dynamic_load.pike
@@ -348,7 +348,7 @@ void low_process_file(mixed data, string file)
     data=PC.hide_whitespaces(data);
     data=PC.strip_line_statements(data);
     data=PC.group(data);
-    if(sizeof(data) && strlen( (string) (data[0]) ))
+    if(sizeof(data) && sizeof( (string) (data[0]) ))
     {
       switch(((string)data[0])[0] )
       {
diff --git a/bin/httpd.pike b/bin/httpd.pike
index a6130709a35b918767388c2bc7208a780a197130..caeeff58a4b8f0bb17f9d60713341ca950b2405e 100755
--- a/bin/httpd.pike
+++ b/bin/httpd.pike
@@ -1,6 +1,6 @@
 #!/usr/local/bin/pike
 
-/* $Id: httpd.pike,v 1.4 2002/12/01 01:38:28 nilsson Exp $ */
+/* $Id: httpd.pike,v 1.5 2003/01/20 17:48:45 nilsson Exp $ */
 
 /* A very small httpd capable of fetching files only.
  * Written by Fredrik H�binette as a demonstration of Pike
@@ -36,7 +36,7 @@ program output_class=class
 
     file::seek(offset);
     data=file::read(BLOCK);
-    if(data && strlen(data))
+    if(data && sizeof(data))
     {
       written=socket::write(data);
       if(written >= 0)
diff --git a/bin/install.pike b/bin/install.pike
index d25f20eb1073dbf2ff0f53cc25990743df3199fd..6277152e22cede5b8d02f2f26bea4cf9a91993f5 100644
--- a/bin/install.pike
+++ b/bin/install.pike
@@ -136,13 +136,13 @@ void status(string doing, void|string file, string|void msg)
   }
 
   file=replace(file,"\n","\\n");
-  if(strlen(file)>45)
-    file=".."+file[strlen(file)-44..];
+  if(sizeof(file)>45)
+    file=".."+file[sizeof(file)-44..];
 
   if(msg) file+=" "+msg;
   if(doing) file=doing+": "+file;
   string s="\r   "+file;
-  int t=strlen(s);
+  int t=sizeof(s);
   if(t<last_len) s+=" "*(last_len-t);
   last_len=t;
   write(s);
@@ -165,7 +165,7 @@ int mkdirhier(string orig_dir)
   string dir=orig_dir;
   if(already_created[orig_dir]) return 1;
 
-  if(dir=="" || (strlen(dir)==2 && dir[-1]==':')) return 1;
+  if(dir=="" || (sizeof(dir)==2 && dir[-1]==':')) return 1;
   dir=fakeroot(dir);
 
   status("Creating",dir+"/");
@@ -305,7 +305,7 @@ int install_file(string from,
 
 string stripslash(string s)
 {
-  while(strlen(s)>1 && s[-1]=='/') s=s[..strlen(s)-2];
+  while(sizeof(s)>1 && s[-1]=='/') s=s[..sizeof(s)-2];
   return s;
 }
 
@@ -362,7 +362,7 @@ object reg;
 
 string regquote(string s)
 {
-  while(s[-1] == '/' || s[-1]=='\\') s=s[..strlen(s)-2];
+  while(s[-1] == '/' || s[-1]=='\\') s=s[..sizeof(s)-2];
   return
     replace(s,
 	    ({".","[","]","*","\\","(",")","|","+"}),
@@ -371,7 +371,7 @@ string regquote(string s)
 
 string globify(string s)
 {
-  if(s[-1]=='/') s=s[..strlen(s)-2];
+  if(s[-1]=='/') s=s[..sizeof(s)-2];
   return s+"*";
 }
 
@@ -443,7 +443,7 @@ void do_export()
   status("Creating",export_base_name+".burk");
   Stdio.File p=Stdio.File(export_base_name+".burk","wc");
   string msg="   Loading installation script, please wait...";
-  p->write("w%4c%s",strlen(msg),msg);
+  p->write("w%4c%s",sizeof(msg),msg);
 
 #define TRANSLATE(X,Y) combine_path(".",X) : Y
   string tmpdir="~piketmp";
@@ -470,13 +470,13 @@ void do_export()
   dirs-=({""});
   sort(dirs);
 
-  foreach(dirs, string dir) p->write("d%4c%s",strlen(dir),dir);
+  foreach(dirs, string dir) p->write("d%4c%s",sizeof(dir),dir);
   foreach(Array.transpose(  ({ to_export, translated_names }) ),
 	  [ string file, string file_name ])
     {
       status("Adding",file);
       if (string f=Stdio.read_file(file)) {
-	p->write("f%4c%s%4c",strlen(file_name),file_name,strlen(f));
+	p->write("f%4c%s%4c",sizeof(file_name),file_name,sizeof(f));
 	p->write(f);
       } else {
 	//  Huh? File could not be found.
@@ -498,7 +498,7 @@ void do_export()
 
 
   foreach(env, string e)
-    p->write("e%4c%s",strlen(e),e);
+    p->write("e%4c%s",sizeof(e),e);
 
 #define RELAY(X) " " #X "=" + TRVAR(X)+
 
@@ -517,7 +517,7 @@ void do_export()
     " $" // $ = @argv
     ;
 
-  p->write("s%4c%s",strlen(cmd),cmd);
+  p->write("s%4c%s",sizeof(cmd),cmd);
 
   array(string) to_delete=translated_names + ({translate("pike.tmp",translator)});
   to_delete=Array.uniq(to_delete);
@@ -525,7 +525,7 @@ void do_export()
 
   // Generate cleanup
   foreach(to_delete, string del)
-    p->write("D%4c%s",strlen(del),del);
+    p->write("D%4c%s",sizeof(del),del);
 
   p->write("q\0\0\0\0");
   p->close("rw");
@@ -610,7 +610,7 @@ done
   string script=sprintf("#!/bin/sh\n"
 			"tar xf \"$0\" %s.x\n"
 			"exec ./%s.x \"$0\" \"$@\"\n", tmpname, tmpname, tmpname);
-  if(strlen(script) >= 100)
+  if(sizeof(script) >= 100)
   {
     werror("Script too long!!\n");
     exit(1);
@@ -1000,7 +1000,7 @@ int pre_install(array(string) argv)
     case "":
     default:
     case "--new-style":
-      if(!(lnk=vars->pike_name) || !strlen(lnk)) {
+      if(!(lnk=vars->pike_name) || !sizeof(lnk)) {
 	lnk = combine_path(vars->exec_prefix || combine_path(vars->prefix, "bin"),
 			   "pike");
 	old_exec_prefix=vars->exec_prefix; // to make the directory for pike link
@@ -1224,7 +1224,7 @@ void do_install()
 	pike_bin_file=combine_path(vars->TMP_BUILDDIR,"pike.tmp");
 	Stdio.write_file(pike_bin_file, pike_bin);
 	Stdio.File f=Stdio.File(pike_bin_file,"rw");
-	f->seek(pos+strlen(MASTER_COOKIE));
+	f->seek(pos+sizeof(MASTER_COOKIE));
 	f->write(combine_path(lib_prefix,"master.pike"));
 	f->close();
 	status("Finalizing",pike_bin_file,"done");
diff --git a/bin/mkpeep.pike b/bin/mkpeep.pike
index db104dd5c74003ae7c45f4caa3da929dd3994d52..045e9e36f8dbf1e7be2d5a81ca5eaa3166254e8f 100755
--- a/bin/mkpeep.pike
+++ b/bin/mkpeep.pike
@@ -2,7 +2,7 @@
 
 #pragma strict_types
 
-/* $Id: mkpeep.pike,v 1.29 2003/01/13 22:31:06 nilsson Exp $ */
+/* $Id: mkpeep.pike,v 1.30 2003/01/20 17:48:45 nilsson Exp $ */
 
 string skipwhite(string s)
 {
@@ -23,7 +23,7 @@ int find_end(string s)
   werror("find_end("+s+")\n");
 #endif
 
-  for(int e=1; e<strlen(s); e++)
+  for(int e=1; e<sizeof(s); e++)
   {
     switch(s[e])
     {
@@ -51,7 +51,7 @@ array(string) explode_comma_expr(string s)
   array(string) ret=({});
   int begin=0;
 
-  for(int e=0; e<strlen(s); e++)
+  for(int e=0; e<sizeof(s); e++)
   {
     switch(s[e])
     {
@@ -73,7 +73,7 @@ array(string) explode_comma_expr(string s)
   }
 
   /* Ignore empty last arguments */
-  if(strlen(String.trim_all_whites(s[begin..])))
+  if(sizeof(String.trim_all_whites(s[begin..])))
     ret+=({ String.trim_all_whites(s[begin..]) });
 #if DEBUG>4
   werror("RESULT: %O\n",ret);
@@ -99,7 +99,7 @@ array(int|string|array(string)) split(string s)
   s=skipwhite(s);
 
   /* First, we tokenize */
-  while(strlen(s))
+  while(sizeof(s))
   {
     switch(s[0])
     {
@@ -134,7 +134,7 @@ array(int|string|array(string)) split(string s)
       {
 	int i=find_end(s);
 	b+=({ s[0..i] });
-	s=s[i+1..strlen(s)];
+	s=s[i+1..sizeof(s)];
       }
       break;
 
@@ -143,7 +143,7 @@ array(int|string|array(string)) split(string s)
       {
 	int i=find_end(s);
 	b+=({ s[0..i] });
-	s=s[i+1..strlen(s)];
+	s=s[i+1..sizeof(s)];
       }
       break;
     }
@@ -175,17 +175,17 @@ array(int|string|array(string)) split(string s)
     switch(a[e][0])
     {
       case '(':
-	array(string) tmp=explode_comma_expr(a[e][1..strlen(a[e])-2]);
+	array(string) tmp=explode_comma_expr(a[e][1..sizeof(a[e])-2]);
 	for(int x=0;x<sizeof(tmp);x++)
 	{
 	  string arg=sprintf("$%d%c", i, 'a'+x);
-	  if(arg != tmp[x] && strlen(tmp[x]))
+	  if(arg != tmp[x] && sizeof(tmp[x]))
 	    newa+=({ sprintf("(%s)==%s",tmp[x], arg) });
 	}
       break;
 
     case '[':
-      newa+=({ a[e][1..strlen(a[e])-2] });
+      newa+=({ a[e][1..sizeof(a[e])-2] });
       break;
 
     case 'F':
@@ -338,7 +338,7 @@ void dump2(array(array(array(string))) data,int ind)
 	if(i+1<sizeof(d[1]) && d[1][i+1][0]=='(')
 	{
 	  string tmp=d[1][i+1];
-	  args=explode_comma_expr(tmp[1..strlen(tmp)-2]);
+	  args=explode_comma_expr(tmp[1..sizeof(tmp)-2]);
 	  i++;
 	}
 	write("%*n                %d,%s,%{(%s), %}\n",
@@ -372,7 +372,7 @@ int main(int argc, array(string) argv)
     foreach(f/";",f)
       {
 	f=skipwhite(f);
-	if(!strlen(f)) continue;
+	if(!sizeof(f)) continue;
 	data+=({split(f)});
       }
   }
diff --git a/bin/tarfilter.pike b/bin/tarfilter.pike
index c82b274747039595a305a6abd096497d6a7cddbe..9b47b943d2e9a6948a0d078d05da6890f5edd8ad 100755
--- a/bin/tarfilter.pike
+++ b/bin/tarfilter.pike
@@ -13,7 +13,7 @@ void copydata(Stdio.File in, Stdio.File out, int size)
       exit(1);
     }
     out->write(s);
-    size -= strlen(s);
+    size -= sizeof(s);
   }
 }
 
@@ -23,7 +23,7 @@ void doit(Stdio.File in, Stdio.File out)
     string s = in->read(512);
     if(s == "")
       break;
-    if(strlen(s) != 512) {
+    if(sizeof(s) != 512) {
       werror("READ ERROR on input\n");
       exit(1);
     }
diff --git a/bin/test_pike.pike b/bin/test_pike.pike
index fdeeea6b957a5e72670dce8a4c4f1898f88a9e7f..0cd08b4f1eb47e530c113bb3f4a48cdcbef492a9 100755
--- a/bin/test_pike.pike
+++ b/bin/test_pike.pike
@@ -1,6 +1,6 @@
 #!/usr/local/bin/pike
 
-/* $Id: test_pike.pike,v 1.79 2002/12/30 01:29:53 nilsson Exp $ */
+/* $Id: test_pike.pike,v 1.80 2003/01/20 17:48:45 nilsson Exp $ */
 
 import Stdio;
 
@@ -159,7 +159,7 @@ void run_watchdog(int pid) {
 #ifdef WATCHDOG_PIPE
   thread_create(lambda() {
 		  object o=Stdio.File("stdin");
-		  while(strlen(o->read(1) || ""))
+		  while(sizeof(o->read(1) || ""))
 		  {
 		    last_time=time();
 		  }
diff --git a/bin/unbug b/bin/unbug
index 387bfe1e0cfb2f5b653dae724016ad564e0ed271..87cf39b58d1d336a8c08747746be66a779f7b8e6 100644
--- a/bin/unbug
+++ b/bin/unbug
@@ -501,10 +501,10 @@ class Gdb
 	buffer+=tmp;
 	if(spos<0) spos=0;
 	pos=search(buffer,prompt,spos);
-	spos=strlen(buffer)-strlen(prompt);
+	spos=sizeof(buffer)-sizeof(prompt);
       }while(pos == -1);
       ret=buffer[..pos-1];
-      pos+=strlen(prompt);
+      pos+=sizeof(prompt);
       buffer=buffer[pos..];
       spos=0;
       return ret;
@@ -833,7 +833,7 @@ class Gdb
     void create(string e)
       {
 	__expr=e;
-	if(strlen(__expr) > 200) _evaluate();
+	if(sizeof(__expr) > 200) _evaluate();
       }
   }
 
@@ -914,10 +914,10 @@ class Debug
 #endif
 
       ret=mkhandle(prog, "->linenumbers[0]@ ", prog, "->num_linenumbers")->_value();
-      if(strlen(ret) != prog->num_linenumbers->_value())
+      if(sizeof(ret) != prog->num_linenumbers->_value())
       {
 	werror("Failed to get line number info!\n");
-	werror("strlen(%O) != %O (it is %d)\n",ret, prog->num_linenumbers->_value(),strlen(ret));
+	werror("sizeof(%O) != %O (it is %d)\n",ret, prog->num_linenumbers->_value(),sizeof(ret));
       }
       return line_number_info_cache[progid]=ret;
     }
@@ -967,7 +967,7 @@ class Debug
 	  }
 	};
       
-      while(cnt < strlen(lineinfo))
+      while(cnt < sizeof(lineinfo))
       {
 	if(lineinfo[cnt] == 127)
 	{
@@ -1167,7 +1167,7 @@ class Debug
 	    odesc="({";
 	    for(int e=0;e<_sizeof();e++)
 	    {
-	      if(strlen(odesc)>300)
+	      if(sizeof(odesc)>300)
 	      {
 		odesc+="...."+(_sizeof()-e);
 		break;
@@ -1247,12 +1247,12 @@ class Debug
 	  int done;
 	  foreach(cache, KeyPair k)
 	    {
-	      if(strlen(odesc)>300)
+	      if(sizeof(odesc)>300)
 	      {
 		odesc+="...."+(_sizeof()-done);
 		break;
 	      }
-	      if(strlen(odesc)>2) odesc+=",";
+	      if(sizeof(odesc)>2) odesc+=",";
 	      done++;
 	      odesc+=sprintf("%O:%O",k->ind, k->val);
 	    }
@@ -2817,7 +2817,7 @@ string find_in_path(string cmd)
 
 int main(int argc, array(string) argv)
 {
-  write(#"UNBUG $Id: unbug,v 1.9 2002/10/31 17:26:24 nilsson Exp $
+  write(#"UNBUG $Id: unbug,v 1.10 2003/01/20 17:48:45 nilsson Exp $
 Copyright 2001-2002, Roxen Internet Software AB.
 Copyright 2002, Department of Computer and Information Science,
                 Link�ping University
diff --git a/lib/modules/ADT.pmod/struct.pike b/lib/modules/ADT.pmod/struct.pike
index a0ad2de3770f4226b632a2cf908404065e29d1e5..d5188117fc1a5e634b5576542fa162bc28c3c9a9 100644
--- a/lib/modules/ADT.pmod/struct.pike
+++ b/lib/modules/ADT.pmod/struct.pike
@@ -69,9 +69,9 @@ void put_uint(int i, int len)
 //!  document me!
 void put_var_string(string s, int len)
 {
-  if ( (len <= 3) && (strlen(s) >= ({ -1, 0x100, 0x10000, 0x1000000 })[len] ))
+  if ( (len <= 3) && (sizeof(s) >= ({ -1, 0x100, 0x10000, 0x1000000 })[len] ))
     error("ADT.struct->put_var_string: Field overflow.\n");
-  put_uint(strlen(s), len);
+  put_uint(sizeof(s), len);
   add_data(s);
 }
 
@@ -112,7 +112,7 @@ void put_var_uint_array(array(int) data, int item_size, int len)
 int get_uint(int len)
 {
   mixed i;
-  if ( (strlen(buffer) - index) < len)
+  if ( (sizeof(buffer) - index) < len)
     error("ADT.struct->get_uint: no data\n");
   sscanf(buffer, "%*" + (string) index +"s%" + (string) len + "c", i);
   index += len;
@@ -125,7 +125,7 @@ string get_fix_string(int len)
 {
   string res;
   
-  if ((strlen(buffer) - index) < len)
+  if ((sizeof(buffer) - index) < len)
     error("ADT.struct->get_fix_string: no data\n");
   res = buffer[index .. index + len - 1];
   index += len;
@@ -180,6 +180,6 @@ array(mixed) get_var_uint_array(int item_size, int len)
 //!   1 if empty, 0 otherwise
 int is_empty()
 {
-  return (index == strlen(buffer));
+  return (index == sizeof(buffer));
 }
 
diff --git a/lib/modules/Audio.pmod/Format.pmod/module.pmod b/lib/modules/Audio.pmod/Format.pmod/module.pmod
index 6a17ce9a4e52d5fb57f6beae50bbfc1b3cb27af3..088e22fa45a2891d4cd3598df709cc643bd7b6db 100644
--- a/lib/modules/Audio.pmod/Format.pmod/module.pmod
+++ b/lib/modules/Audio.pmod/Format.pmod/module.pmod
@@ -4,7 +4,7 @@
 //
 // Author: Honza Petrous, hop@unibase.cz
 //
-// $Id: module.pmod,v 1.5 2002/11/29 00:30:37 nilsson Exp $
+// $Id: module.pmod,v 1.6 2003/01/20 17:43:59 nilsson Exp $
 
 //#define AUDIO_FORMAT_DEBUG
 #ifdef AUDIO_FORMAT_DEBUG
@@ -166,16 +166,16 @@ class vbuffer {
   //  1 = string, 0 or void = integer
   string|int getbytes( int n, int|void s ) {
     DEBUG("getbytes: n: %d, s: %d\n", n, s);
-    if( !buffer || !strlen(buffer) ) {
+    if( !buffer || !sizeof(buffer) ) {
       if(!fd)
         return -1;
       bpos = 0;
       buffer = fd->read( BSIZE );
     }
-    if( !strlen(buffer) )
+    if( !sizeof(buffer) )
       return s?0:-1;
     if( s ) {
-      if( strlen(buffer) - bpos > n ) {
+      if( sizeof(buffer) - bpos > n ) {
 	string d = buffer[bpos..bpos+n-1];
 	buffer = buffer[bpos+n..];
 	bpos=0;
@@ -187,7 +187,7 @@ class vbuffer {
 	buffer = buffer[bpos..];
 	bpos=0;
 	string t = fd->read( BSIZE );
-	if( !t || !strlen(t) )
+	if( !t || !sizeof(t) )
 	  return -1;
 	buffer+=t;
 	return getbytes(n,1);
@@ -197,12 +197,12 @@ class vbuffer {
     while( n-- ) {
       res<<=8;
       res|=buffer[ bpos++ ];
-      if( bpos == strlen(buffer) ) {
+      if( bpos == sizeof(buffer) ) {
         if(!fd)
           return -1;
 	bpos = 0;
 	buffer = fd->read( BSIZE );
-	if( !buffer || !strlen( buffer ) )
+	if( !buffer || !sizeof( buffer ) )
 	  return -1;
       }
     }
diff --git a/lib/modules/Calendar.pmod/Events.pmod b/lib/modules/Calendar.pmod/Events.pmod
index 9e2f176e1bf044697ac7ad61df8eaf56f9b6e0cb..a4a2366cf5b7f37026e87071a4c26b30460fcef4 100644
--- a/lib/modules/Calendar.pmod/Events.pmod
+++ b/lib/modules/Calendar.pmod/Events.pmod
@@ -187,7 +187,7 @@ Event.Namedays find_namedays(string region)
    if (i==-1) return UNDEFINED; // not found
 
    int i2=search(all,"\nRegion",i+1);
-   if (i2==-1) i2=strlen(all)-1;
+   if (i2==-1) i2=sizeof(all)-1;
 
    array(array(string)) names=0;
    int start=-1,stop=-1;
diff --git a/lib/modules/Calendar.pmod/Time.pmod b/lib/modules/Calendar.pmod/Time.pmod
index e4b011241cf9c3122094b8266f49b62bfaf166a5..b135704c43212ce964b7ecf642c779df7599df82 100644
--- a/lib/modules/Calendar.pmod/Time.pmod
+++ b/lib/modules/Calendar.pmod/Time.pmod
@@ -971,7 +971,7 @@ class TimeofDay
    {									\
       _ind+=IND;							\
       TimeRange x=::OP(@args);						\
-      _ind=_ind[..strlen(_ind)-strlen(IND)-1];				\
+      _ind=_ind[..sizeof(_ind)-sizeof(IND)-1];				\
       werror(_ind+"  %O\n",this_object());				\
       foreach (args,TimeRange t) werror(_ind+NAME+" %O\n",t);		\
       werror(_ind+"= %O\n",x);						\
@@ -1059,7 +1059,7 @@ class cSuperTimeRange
       int from=0,to=0x7fffffff,pos=0;
       array res=({});
       TimeRange last=0;
-      string ums=unit[..strlen(unit)-2]; // no 's'
+      string ums=unit[..sizeof(unit)-2]; // no 's'
 
       if (sizeof(range)==2)
 	 [from,to]=range;
@@ -1095,7 +1095,7 @@ class cSuperTimeRange
    {
       int pos=0;
       TimeRange last=0;
-      string ums=unit[..strlen(unit)-2]; // no 's'
+      string ums=unit[..sizeof(unit)-2]; // no 's'
 
       foreach (parts,TimeRange part)
       {
diff --git a/lib/modules/Calendar.pmod/Timezone.pmod b/lib/modules/Calendar.pmod/Timezone.pmod
index 412ea12179ff670254367d7718e7c2fcd23c8106..7f659f4ed6dd6aace392020ae7eb3de66acdf0e1 100644
--- a/lib/modules/Calendar.pmod/Timezone.pmod
+++ b/lib/modules/Calendar.pmod/Timezone.pmod
@@ -334,7 +334,7 @@ static private Ruleset.Timezone _magic_timezone(string tz)
    if (sscanf(tz,"%[-+]%[-+0-9]",string a,string b)==2)
       if ((<"-","+">)[a])
       {
-	 switch (strlen(b))
+	 switch (sizeof(b))
 	 {
 	    case 2: return _magic_timezone("UTC"+a+b[..1]);
 	    case 4: return _magic_timezone("UTC"+a+b[..1]+":"+b[2..]);
@@ -1097,7 +1097,7 @@ class Runtime_timezone_compiler
 	    z->add(b);
 	    foreach (q/"\n",string line)
 	    {
-	       if (sscanf(line,"%*[ \t]%[-0-9]%s",a,b)==3 && strlen(a))
+	       if (sscanf(line,"%*[ \t]%[-0-9]%s",a,b)==3 && sizeof(a))
 		  z->add(a+b);
 	       else if (sscanf(line,"%*[ ]#%*s")<2)
 		  break; // end of zone
diff --git a/lib/modules/Calendar.pmod/YMD.pmod b/lib/modules/Calendar.pmod/YMD.pmod
index 2170fd3e463b38e490d3b15392f51fcc38f102bc..bf2f320714be57e7b627702223f59e7d932f5526 100644
--- a/lib/modules/Calendar.pmod/YMD.pmod
+++ b/lib/modules/Calendar.pmod/YMD.pmod
@@ -2630,12 +2630,12 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
       {
 	 int y,mo,d;
       
-	 if (strlen(m->d)==6)
+	 if (sizeof(m->d)==6)
 	 {
 	    [y,mo,d]=(array(int))(m->d/2);
 	    if (y<70) y+=2000; else y+=1900;
 	 }
-	 else if (strlen(m->d)==8)
+	 else if (sizeof(m->d)==8)
 	    [y,mo,d]=(array(int))array_sscanf(m->d,"%4s%2s%2s");
 	 else return 0;
 
@@ -2646,7 +2646,7 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
 	 if (!zero_type(m->Y)) m->year=cal->Year(m->Y);
 	 else if (m->y)
 	 {
-	    if (strlen(m->y)<3) 
+	    if (sizeof(m->y)<3) 
 	    {
 	       m->y=(int)m->y;
 	       if (m->y<70) m->y+=2000;
@@ -2714,9 +2714,9 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
       
       if (m->t)
       {
-	 if (strlen(m->t)==6)
+	 if (sizeof(m->t)==6)
 	    [h,mi,s]=(array(int))(m->t/2),g="second";
-	 else if (strlen(m->t)==4)
+	 else if (sizeof(m->t)==4)
 	    [h,mi]=(array(int))(m->t/2),g="minute";
 	 else return 0;
       }
@@ -2865,7 +2865,7 @@ cDay dwim_day(string day,void|TimeRange context)
       else return (d->week()+1)->place(d);
    }
 
-   if (strlen(day)==4) catch { return parse("%M/%D",day/2*"/",context); };
+   if (sizeof(day)==4) catch { return parse("%M/%D",day/2*"/",context); };
 
    if (day=="today") return t;
    if (day=="tomorrow") return t+1;
diff --git a/lib/modules/Calendar.pmod/mkrules.pike b/lib/modules/Calendar.pmod/mkrules.pike
index 36bd390b9a9b7d02cf9aeced43c3138287e5f890..97e367aba12bd280ab236d43fa3195beed48e411 100644
--- a/lib/modules/Calendar.pmod/mkrules.pike
+++ b/lib/modules/Calendar.pmod/mkrules.pike
@@ -10,7 +10,7 @@
 // and zic(8) is the usual compiler.
 
 // pike mkrules.pike ../data/{africa,antarctica,asia,australasia,backward,etcetera,europe,northamerica,pacificnew,southamerica,systemv}
-// $Id: mkrules.pike,v 1.6 2000/11/08 22:38:41 hubbe Exp $
+// $Id: mkrules.pike,v 1.7 2003/01/20 17:44:00 nilsson Exp $
 
 #pike __REAL_VERSION__
 
@@ -669,7 +669,7 @@ void collect_rules(string file)
 	       if (links[s]) links[s]+=({t});
 	       else links[s]=({t});
 	    }
-	    else if (sscanf(line,"%*[ \t]%[-0-9]%s",s,t)==3 && strlen(s))
+	    else if (sscanf(line,"%*[ \t]%[-0-9]%s",s,t)==3 && sizeof(s))
 	    {
 	       if (!lastz) complain("implicit zone line w/o zone\n");
 	       lastz->add(s+t);
@@ -708,7 +708,7 @@ int main(int ac,array(string) am)
    tzrules=compile_string(t)();
 
    mv("TZrules.pmod","TZrules.pmod~");
-   werror("writing TZrules.pmod (%d bytes)...",strlen(t));
+   werror("writing TZrules.pmod (%d bytes)...",sizeof(t));
    Stdio.File("TZrules.pmod","wtc")->write(t);
    werror("\n");
 
@@ -762,7 +762,7 @@ int main(int ac,array(string) am)
        "// "+"-"*70+"\n");
 
    mv("TZs.pike","TZs.pike~");
-   werror("writing TZs.h (%d bytes)...",strlen(t));
+   werror("writing TZs.h (%d bytes)...",sizeof(t));
    Stdio.File("TZs.h","wtc")->write(t);
    werror("\n");
 
@@ -789,7 +789,7 @@ int main(int ac,array(string) am)
    t+="]);\n\n";
    
    mv("TZnames.pike","TZnames.pike~");
-   werror("writing TZnames.pmod (%d bytes)...",strlen(t));
+   werror("writing TZnames.pmod (%d bytes)...",sizeof(t));
    Stdio.File("TZnames.pmod","wtc")->write(t);
    werror("\n");
 
diff --git a/lib/modules/Colors.pmod b/lib/modules/Colors.pmod
index 582ad0613b8937f0c5b6256d0e2247a9cd3593a3..598e53ef5a2b2533e63d9b5af39962e5dbc19069 100644
--- a/lib/modules/Colors.pmod
+++ b/lib/modules/Colors.pmod
@@ -83,7 +83,7 @@ array(int) cmyk_to_rgb(array(int)|int c, int|void m, int|void y, int|void k)
 array(int(0..255)) parse_color(string name)
 {
   Image.Color.Color color;
-  if(!name || !strlen(name)) return ({ 0,0,0 }); // Odd color...
+  if(!name || !sizeof(name)) return ({ 0,0,0 }); // Odd color...
 
   if(color=Image.Color.guess(name)) return color->rgb();
 
diff --git a/lib/modules/Crypto/_rsa.pike b/lib/modules/Crypto/_rsa.pike
index d52b094afc687432d84f06756c218a998b42a8bc..09332b0e389ffc1acd29f0c554903e7ad64cc23b 100644
--- a/lib/modules/Crypto/_rsa.pike
+++ b/lib/modules/Crypto/_rsa.pike
@@ -1,4 +1,4 @@
-/* $Id: _rsa.pike,v 1.6 2002/03/09 18:12:21 nilsson Exp $
+/* $Id: _rsa.pike,v 1.7 2003/01/20 17:44:00 nilsson Exp $
  *
  * Follow the PKCS#1 standard for padding and encryption.
  */
@@ -98,8 +98,8 @@ bignum rsa_pad(string message, int type, mixed|void random)
   string cookie;
   int len;
 
-  len = size - 3 - strlen(message);
-  /*  write(sprintf("%d, %d, %d, %s", len, size, strlen(message), message)); */
+  len = size - 3 - sizeof(message);
+  /*  write(sprintf("%d, %d, %d, %s", len, size, sizeof(message), message)); */
   if (len < 8)
     error( "Crypto.rsa->rsa_pad: Too large block.\n" );
 
@@ -128,7 +128,7 @@ string rsa_unpad(bignum block, int type)
   string s = block->digits(256);
   int i = search(s, "\0");
 
-  if ((i < 9) || (strlen(s) != (size - 1)) || (s[0] != type))
+  if ((i < 9) || (sizeof(s) != (size - 1)) || (s[0] != type))
     return 0;
   return s[i+1..];
 }
diff --git a/lib/modules/Crypto/des3.pike b/lib/modules/Crypto/des3.pike
index 73589865cc9f92ad94186b2508a1fc429052b334..371f5fe8f94d53b0fcfeeb43c6dd49442922a709 100644
--- a/lib/modules/Crypto/des3.pike
+++ b/lib/modules/Crypto/des3.pike
@@ -1,4 +1,4 @@
-/* $Id: des3.pike,v 1.7 2001/11/08 01:45:38 nilsson Exp $
+/* $Id: des3.pike,v 1.8 2003/01/20 17:44:00 nilsson Exp $
  *
  */
 
@@ -31,7 +31,7 @@ private array(string) split_key(string key)
 {
   string k1 = key[..7];
   string k2 = key[8..15];
-  string k3 = (strlen(key) > 16) ? key[16..] : k1;
+  string k3 = (sizeof(key) > 16) ? key[16..] : k1;
   return ({ k1, k2, k3 });
 }
 
diff --git a/lib/modules/Crypto/dsa.pike b/lib/modules/Crypto/dsa.pike
index 455289033522536115b842a343ce06df993e5558..ed7e4f8a8f7799e6243f62697f20580c2e256b76 100644
--- a/lib/modules/Crypto/dsa.pike
+++ b/lib/modules/Crypto/dsa.pike
@@ -119,7 +119,7 @@ string sign_rsaref(string msg)
 //!   Document this function.
 int verify_rsaref(string msg, string s)
 {
-  if (strlen(s) != 40)
+  if (sizeof(s) != 40)
     return 0;
 
   return raw_verify(dsa_hash(msg),
@@ -184,7 +184,7 @@ string nist_hash(bignum x)
 {
   string s = x->digits(256);
 		       
-  return Crypto.sha()->update(s[strlen(s) - SEED_LENGTH..])->digest();
+  return Crypto.sha()->update(s[sizeof(s) - SEED_LENGTH..])->digest();
 }
 
 //! Returns ({ p, q })
@@ -209,7 +209,7 @@ array(bignum) nist_primes(int l)
 
     string h = nist_hash(s) ^ nist_hash(s + 1);
 
-    h = sprintf("%c%s%c", h[0] | 0x80, h[1..strlen(h) - 2], h[-1] | 1);
+    h = sprintf("%c%s%c", h[0] | 0x80, h[1..sizeof(h) - 2], h[-1] | 1);
 
     bignum q = Gmp.mpz(h, 256);
 
diff --git a/lib/modules/Crypto/hmac.pike b/lib/modules/Crypto/hmac.pike
index 5660b2073f2656b3d00dbe6323f5fc2d2ff095af..a39f0faa172039e1eb406350b886e470d53ceb6d 100644
--- a/lib/modules/Crypto/hmac.pike
+++ b/lib/modules/Crypto/hmac.pike
@@ -44,8 +44,8 @@ class `()
   //!   Document this function.
   void create(string passwd)
     {
-      if (strlen(passwd) < B)
-	passwd = passwd + "\0" * (B - strlen(passwd));
+      if (sizeof(passwd) < B)
+	passwd = passwd + "\0" * (B - sizeof(passwd));
 
       ikey = passwd ^ ("6" * B);
       okey = passwd ^ ("\\" * B);
diff --git a/lib/modules/Crypto/randomness.pmod b/lib/modules/Crypto/randomness.pmod
index ee946c0a5501a4de347823d04c745f18e9325d86..f5751f86db38343e53a8271d22aafdfb97191567 100644
--- a/lib/modules/Crypto/randomness.pmod
+++ b/lib/modules/Crypto/randomness.pmod
@@ -1,4 +1,4 @@
-// $Id: randomness.pmod,v 1.23 2003/01/09 17:43:20 grubba Exp $
+// $Id: randomness.pmod,v 1.24 2003/01/20 17:44:00 nilsson Exp $
 
 //! Assorted stronger or weaker randomnumber generators.
 //! These devices try to collect entropy from the environment.
@@ -147,7 +147,7 @@ RandomSource reasonably_random()
 
   string seed = some_entropy();
 #if constant(Crypto.arcfour)
-  if (strlen(seed) < 2001)
+  if (sizeof(seed) < 2001)
     seed = random_string(2001); // Well, we're only at reasonably random...
   return (global_arcfour = arcfour_random(sprintf("%4c%O%s", time(),
 						  _memory_usage(), seed)));
diff --git a/lib/modules/Crypto/rsa.pike b/lib/modules/Crypto/rsa.pike
index d7d2afa0e141c8b01e78d93c19675eee05ccf9a0..735c4c7445cb17699441c83206bbdc7c91b99f8f 100644
--- a/lib/modules/Crypto/rsa.pike
+++ b/lib/modules/Crypto/rsa.pike
@@ -1,4 +1,4 @@
-/* $Id: rsa.pike,v 1.31 2002/03/09 18:13:27 nilsson Exp $
+/* $Id: rsa.pike,v 1.32 2003/01/20 17:44:00 nilsson Exp $
  *
  * Follow the PKCS#1 standard for padding and encryption.
  */
@@ -374,7 +374,7 @@ string sha_sign(string message, mixed|void r)
 
   hash->update(message);
   s = hash->digest();
-  s = sprintf("%c%s%c%s", 4, "sha1", strlen(s), s);
+  s = sprintf("%c%s%c%s", 4, "sha1", sizeof(s), s);
   return cooked_sign(s);
 }
   
@@ -387,7 +387,7 @@ int sha_verify(string message, string signature)
   
   hash->update(message);
   s = hash->digest();
-  s = sprintf("%c%s%c%s", 4, "sha1", strlen(s), s);
+  s = sprintf("%c%s%c%s", 4, "sha1", sizeof(s), s);
 
   return raw_verify(s, BIGNUM(signature, 256));
 }
diff --git a/lib/modules/Filesystem.pmod/System.pike b/lib/modules/Filesystem.pmod/System.pike
index daf65c229ce4fb61ba8853c3363df47b3018a715..31c95bb2b9acc999f606ec447f3ac97a9f4f4eb3 100644
--- a/lib/modules/Filesystem.pmod/System.pike
+++ b/lib/modules/Filesystem.pmod/System.pike
@@ -55,11 +55,11 @@ static void create(void|string directory,  // default: cwd
 #ifdef __NT__
     directory = replace( directory, "\\", "/" );
     string p;
-    if( strlen(root) )
+    if( sizeof(root) )
     {
       if( sscanf( directory, "%s:/%s", p, directory ) )
       {
-	if( strlen( root ) )
+	if( sizeof( root ) )
 	{
 	  if( search( root, ":/" ) == -1 )
 	    root = p+":"+ (root[0] == '/' ?"":"/") + root;
@@ -71,20 +71,20 @@ static void create(void|string directory,  // default: cwd
       }
     }
 #endif
-    while( strlen(directory) && directory[0] == '/' )
+    while( sizeof(directory) && directory[0] == '/' )
       directory = directory[1..];
-    while( strlen(directory) && directory[-1] == '/' )
-      directory = directory[..strlen(directory)-2];
+    while( sizeof(directory) && directory[-1] == '/' )
+      directory = directory[..sizeof(directory)-2];
 #ifdef __NT__
-    if( strlen( directory ) != 2 || directory[1] != ':' )
+    if( sizeof( directory ) != 2 || directory[1] != ':' )
 #endif
       if(!(a = file_stat(combine_path("/",root,directory))) || !a->isdir)
 	error("Not a directory\n");
   }
-  while( strlen(directory) && directory[0] == '/' )
+  while( sizeof(directory) && directory[0] == '/' )
     directory = directory[1..];
-  while( strlen(directory) && directory[-1] == '/' )
-    directory = directory[..strlen(directory)-2];
+  while( sizeof(directory) && directory[-1] == '/' )
+    directory = directory[..sizeof(directory)-2];
   wd = directory;
 }
 
@@ -132,8 +132,8 @@ Filesystem.Stat stat(string file, int|void lstat)
    Stdio.Stat a;
 #ifdef __NT__
    file = replace( file, "\\", "/" );
-   while( strlen(file) && file[-1] == '/' )
-     file = file[..strlen(file)-2];
+   while( sizeof(file) && file[-1] == '/' )
+     file = file[..sizeof(file)-2];
 #endif
    string full = combine_path(wd, file);
    if ( full!="" && full[0]=='/') full=full[1..];
@@ -157,8 +157,8 @@ array(string) get_dir(void|string directory, void|string|array(string) globs)
   if(directory)
   {
     directory = replace( directory, "\\", "/" );
-    while( strlen(directory) && directory[-1] == '/' )
-      directory = directory[..strlen(directory)-2];
+    while( sizeof(directory) && directory[-1] == '/' )
+      directory = directory[..sizeof(directory)-2];
   }
 #endif
   directory = directory ? combine_path(wd, directory) : wd;
@@ -189,8 +189,8 @@ array(Filesystem.Stat) get_stats(void|string directory,
   if(directory)
   {
     directory = replace( directory, "\\", "/" );
-    while( strlen(directory) && directory[-1] == '/' )
-      directory = directory[..strlen(directory)-2];
+    while( sizeof(directory) && directory[-1] == '/' )
+      directory = directory[..sizeof(directory)-2];
   }
 #endif
   if(directory &&
diff --git a/lib/modules/Filesystem.pmod/Tar.pmod b/lib/modules/Filesystem.pmod/Tar.pmod
index b6623f0a65fca3ac19ce89b49d635c706f1a645c..a6dac820ce98e8454a1e4fea7b292e8a6bca0578 100644
--- a/lib/modules/Filesystem.pmod/Tar.pmod
+++ b/lib/modules/Filesystem.pmod/Tar.pmod
@@ -1,5 +1,5 @@
 /*
- * $Id: Tar.pmod,v 1.18 2002/11/29 00:35:51 nilsson Exp $
+ * $Id: Tar.pmod,v 1.19 2003/01/20 17:44:00 nilsson Exp $
  */
 
 #pike __REAL_VERSION__
@@ -215,7 +215,7 @@ class _Tar  // filesystem
       Record r;
       string s = this_program::fd->read(512);
 
-      if(s=="" || strlen(s)<512 || sscanf(s, "%*[\0]%*2s")==1)
+      if(s=="" || sizeof(s)<512 || sscanf(s, "%*[\0]%*2s")==1)
 	break;
 
       r = Record(s, pos+512);
diff --git a/lib/modules/GTKSupport.pmod/MenuFactory.pmod b/lib/modules/GTKSupport.pmod/MenuFactory.pmod
index b55321fceb786de9110b895538d78bd1ddef8e38..173d3024e183c2364df7445be0ad9d21401801d3 100644
--- a/lib/modules/GTKSupport.pmod/MenuFactory.pmod
+++ b/lib/modules/GTKSupport.pmod/MenuFactory.pmod
@@ -53,7 +53,7 @@ string shortcut_to_string( int key, int mod )
   if(mod & FLAG_META) m += "M";
   if(mod & FLAG_HYPER) m += "H";
   if(mod & FLAG_SUPER) m += "U";
-  if(strlen(m)) m+= "-";
+  if(sizeof(m)) m+= "-";
   return sprintf("%s%c",m, key);
 }
 
diff --git a/lib/modules/Getopt.pmod b/lib/modules/Getopt.pmod
index 0db1da756857aa2e87440c4821405b07898405ef..668bfa6b5164b278168487b00d0cd22041f1d2ad 100644
--- a/lib/modules/Getopt.pmod
+++ b/lib/modules/Getopt.pmod
@@ -422,7 +422,7 @@ array(string) get_args(array(string) argv, void|int(-1..1) posix_me_harder,
       my_error( "Unknown option "+opt+".\n", throw_errors );
     }
     else {
-      if(strlen(argv[i]) == 2)
+      if(sizeof(argv[i]) == 2)
 	my_error( "Unknown option "+argv[i]+".\n", throw_errors );
       my_error( "Unknown options "+argv[i]+".\n", throw_errors );
     }
diff --git a/lib/modules/Languages.pmod/PLIS.pmod b/lib/modules/Languages.pmod/PLIS.pmod
index be0851b02c04bea36a91b9443789c5e4bd801d27..cb1b040f7944b94876e774e87c561cef26e60637 100644
--- a/lib/modules/Languages.pmod/PLIS.pmod
+++ b/lib/modules/Languages.pmod/PLIS.pmod
@@ -424,7 +424,7 @@ class Parser (string buffer)
 
   mixed _read()
     {
-      if (!strlen(buffer))
+      if (!sizeof(buffer))
       {
 	return 0;
       }
@@ -432,27 +432,27 @@ class Parser (string buffer)
       if (a = space_re->split(buffer) || comment_re->split(buffer))
       {
 	//	werror(sprintf("Ignoring space and comments: '%s'\n", a[0]));
-	buffer = buffer[strlen(a[0])..];
+	buffer = buffer[sizeof(a[0])..];
 	return _read();
       }
       if (a = number_re->split(buffer))
       {
 	//	werror("Scanning number\n");
 	string s = `+(@ a);
-	buffer = buffer[ strlen(s) ..];
+	buffer = buffer[ sizeof(s) ..];
 	return Number( (int)s );
       }
       if (a = symbol_re->split(buffer))
       {
 	// 	werror("Scanning symbol\n");
-	buffer = buffer[strlen(a[0])..];
+	buffer = buffer[sizeof(a[0])..];
 	return make_symbol(a[0]);
       }
       if (a = string_re->split(buffer))
       {
 	//	werror("Scanning string\n");
-	buffer = buffer[strlen(a[0])..];
-	return String(replace(a[0][1 .. strlen(a[0]) - 2],
+	buffer = buffer[sizeof(a[0])..];
+	return String(replace(a[0][1 .. sizeof(a[0]) - 2],
 			      ({ "\\\\", "\\\"", "\\n" }),
 			      ({ "\\", "\"", "\n"}) ) );
       }
@@ -469,7 +469,7 @@ class Parser (string buffer)
 	buffer = buffer[1..];
 	return c;
       case '#':
-	if (strlen(buffer) < 2)
+	if (sizeof(buffer) < 2)
 	  return 0;
 	c = buffer[1];
 	buffer = buffer[2..];
diff --git a/lib/modules/Locale.pmod/module.pmod b/lib/modules/Locale.pmod/module.pmod
index 3ed0ac240e46d3f8b1d40b95c69b211092435420..59067aa702b68d76b36b0ed3aff93273e3180353 100644
--- a/lib/modules/Locale.pmod/module.pmod
+++ b/lib/modules/Locale.pmod/module.pmod
@@ -187,12 +187,12 @@ class LocaleObject
     int size=2*64+8; //Two mappings and a timestamp
     foreach(indices(bindings), string|int id) {
       size+=8;
-      if(stringp(id)) size+=strlen(id);
+      if(stringp(id)) size+=sizeof(id);
       else size+=4;
-      size+=strlen(bindings[id]);
+      size+=sizeof(bindings[id]);
     }
     size+=32*sizeof(functions); // The actual functions are not included though...
-    size+=strlen( indices(functions)*"" );
+    size+=sizeof( indices(functions)*"" );
     return size;
   }
 
diff --git a/lib/modules/MIME.pmod/module.pmod b/lib/modules/MIME.pmod/module.pmod
index 46852f3e45d661b5f13b03baa4e410c17e71c575..c9d20cdcd06446af2dbb7dc532aa9223cab0956a 100644
--- a/lib/modules/MIME.pmod/module.pmod
+++ b/lib/modules/MIME.pmod/module.pmod
@@ -3,7 +3,7 @@
 // RFC1521 functionality for Pike
 //
 // Marcus Comstedt 1996-1999
-// $Id: module.pmod,v 1.5 2002/12/12 20:50:14 marcus Exp $
+// $Id: module.pmod,v 1.6 2003/01/20 17:44:00 nilsson Exp $
 
 
 //! RFC1521, the @b{Multipurpose Internet Mail Extensions@} memo, defines a
@@ -928,7 +928,7 @@ class Message {
       data += "--"+boundary+"--\r\n";
     }
     
-    headers["content-length"] = ""+strlen(data);
+    headers["content-length"] = ""+sizeof(data);
 
     return map( indices(headers),
 		lambda(string hname){
@@ -1164,12 +1164,12 @@ int|object reconstruct_partial(array(object) collection)
       }, parts)));
     foreach(indices(reconstructed->headers), string h) {
       if(h != "message-id" && h != "encrypted" && h != "mime-version" &&
-	 h != "subject" && (strlen(h)<8 || h[0..7] != "content-"))
+	 h != "subject" && (sizeof(h)<8 || h[0..7] != "content-"))
 	m_delete(reconstructed->headers, h);
     }
     foreach(indices(enclosing_headers), string h) {
       if(h != "message-id" && h != "encrypted" && h != "mime-version" &&
-	 h != "subject" && (strlen(h)<8 || h[0..7] != "content-"))
+	 h != "subject" && (sizeof(h)<8 || h[0..7] != "content-"))
 	reconstructed->headers[h] = enclosing_headers[h];
     }
     return reconstructed;
diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod
index efdeb480ffdad9e7685e115ce4800e8b127586a6..82da60383107466d3303a3023763aa64817b713e 100644
--- a/lib/modules/Parser.pmod/C.pmod
+++ b/lib/modules/Parser.pmod/C.pmod
@@ -4,7 +4,7 @@
 //
 // #pike __REAL_VERSION__
 //
-// $Id: C.pmod,v 1.37 2003/01/18 17:54:32 nilsson Exp $
+// $Id: C.pmod,v 1.38 2003/01/20 17:44:00 nilsson Exp $
 
 mapping(string:string) global_groupings=(["{":"}","(":")","[":"]"]);
 
@@ -231,8 +231,8 @@ array(string) split(string data, void|mapping state)
 	  {
 	    q=search(data,"\"",pos+1);
 	    s=search(data,"\\",pos+1);
-	    if(q==-1) q=strlen(data)-1;
-	    if(s==-1) s=strlen(data)-1;
+	    if(q==-1) q=sizeof(data)-1;
+	    if(s==-1) s=sizeof(data)-1;
 
 	    if(q<s)
 	    {
@@ -460,7 +460,7 @@ string reconstitute_with_line_numbers(array(string|object(Token)|array) tokens)
 	if((tok->line && tok->line != line) ||
 	   (tok->file && tok->file != file))
 	{
-	  if(strlen(ret) && ret[-1]!='\n') ret+="\n";
+	  if(sizeof(ret) && ret[-1]!='\n') ret+="\n";
 	  line=tok->line;
 	  if(tok->file) file=tok->file;
 	  ret+=sprintf("#line %d %O\n",line,file);
diff --git a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
index 8ca2a4b6780881e03d8af3a01db76c85012bbacf..0de7c8849979263a2ecd07fa9ddd739c0d558dd3 100644
--- a/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/DOM.pmod
@@ -500,7 +500,7 @@ class CharacterData
   }
   string get_data() { return get_node_value(); }
   void set_data(string data) { set_node_value(data); }
-  int get_length() { return strlen(get_data()); }
+  int get_length() { return sizeof(get_data()); }
 
   string substring_data(int offset, int count)
   {
diff --git a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
index 3389577309104d47332bc628a86c10c936b6cd63..fdaf083454751fe903e01b6291e0dfe823db73b4 100644
--- a/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/NSTree.pmod
@@ -209,7 +209,7 @@ class NSNode {
 			break;
 
 		      case XML_ELEMENT:
-			if (!strlen(n->get_tag_name()))
+			if (!sizeof(n->get_tag_name()))
 			  break;
 
 			data->add("<", n->get_xml_name());
@@ -236,7 +236,7 @@ class NSNode {
 		    lambda(Node n) {
 		      if (n->get_node_type() == XML_ELEMENT)
 			if (n->count_children())
-			  if (strlen(n->get_tag_name()))
+			  if (sizeof(n->get_tag_name()))
 			    data->add("</", n->get_xml_name(), ">");
 		    });
 	
diff --git a/lib/modules/Parser.pmod/XML.pmod/Tree.pmod b/lib/modules/Parser.pmod/XML.pmod/Tree.pmod
index b267e9b3a80a8e6bbcdedef975e09580a44faafe..5d45bd138860be265bc4fd46503bc8b041732f2e 100644
--- a/lib/modules/Parser.pmod/XML.pmod/Tree.pmod
+++ b/lib/modules/Parser.pmod/XML.pmod/Tree.pmod
@@ -1,7 +1,7 @@
 #pike __REAL_VERSION__
 
 /*
- * $Id: Tree.pmod,v 1.24 2002/11/29 21:36:48 nilsson Exp $
+ * $Id: Tree.pmod,v 1.25 2003/01/20 17:44:00 nilsson Exp $
  *
  */
 
@@ -64,7 +64,7 @@ string roxen_text_quote(string data) {
     if ((sscanf(data[pos..], "&%[^ <>;&];", string entity) == 1) &&
 	search(entity, ".") >= 0) {
       out += text_quote(data[opos..pos - 1]) + "&" + entity + ";";
-      pos += strlen(entity) + 2;
+      pos += sizeof(entity) + 2;
     } else {
       out += text_quote(data[opos..pos]);
       pos++;
@@ -601,7 +601,7 @@ class Node {
       break;
 
     case XML_ELEMENT:
-      if (!strlen(n->get_tag_name()))
+      if (!sizeof(n->get_tag_name()))
 	break;
       data->add("<", n->get_tag_name());
       if (mapping attr = n->get_attributes()) {
@@ -626,7 +626,7 @@ class Node {
     case XML_PI:
       data->add("<?", n->get_tag_name());
       string text = n->get_text();
-      if (strlen(text))
+      if (sizeof(text))
 	data->add(" ", text);
       data->add("?>");
       break;
@@ -643,7 +643,7 @@ class Node {
 
     if (n->get_node_type() == XML_ELEMENT) {
       if (n->count_children())
-	if (strlen(n->get_tag_name()))
+	if (sizeof(n->get_tag_name()))
 	  data->add("</", n->get_tag_name(), ">");
     }
   }
@@ -791,14 +791,14 @@ private Node|int(0..0)
 	buffer_text += child->get_text();
       } else {
 	//  Process buffered text before this child is added
-	if (strlen(buffer_text)) {
+	if (sizeof(buffer_text)) {
 	  node->add_child(Node(XML_TEXT, "", 0, buffer_text));
 	  buffer_text = "";
 	}
 	node->add_child(child);
       }
     }
-    if (strlen(buffer_text))
+    if (sizeof(buffer_text))
       node->add_child(Node(XML_TEXT, "", 0, buffer_text));
     return (node);
 
diff --git a/lib/modules/Process.pmod b/lib/modules/Process.pmod
index 12ca4dfe5036969e67c2168f54823948f08d0ac6..a7a59a603a46f25a1773723005db67c565b2c414 100644
--- a/lib/modules/Process.pmod
+++ b/lib/modules/Process.pmod
@@ -112,7 +112,7 @@ array(string) split_quoted_string(string s)
       ret[-1]+=x[e][1..];
       while(x[++e][0]!='"')
       {
-	if(strlen(x[e])==1 && x[e][0]=='\\' && x[e+1][0]=='"') e++;
+	if(sizeof(x[e])==1 && x[e][0]=='\\' && x[e+1][0]=='"') e++;
 	ret[-1]+=x[e];
       }
       ret[-1]+=x[e][1..];
@@ -125,7 +125,7 @@ array(string) split_quoted_string(string s)
       break;
       
       case '\\':
-      if(strlen(x[e])>1)
+      if(sizeof(x[e])>1)
       {
 	ret[-1]+=x[e][1..];
       }else{
@@ -136,7 +136,7 @@ array(string) split_quoted_string(string s)
       case ' ':
       case '\t':
       case '\n':
-	while(strlen(x[e])==1)
+	while(sizeof(x[e])==1)
 	{
 	  if(e+1 < sizeof(x))
 	  {
@@ -170,7 +170,7 @@ Process spawn(string s,object|void stdin,object|void stdout,object|void stderr,
 #if defined(__NT__)
   // if the command string s is not quoted, add double quotes to
   // make sure it is not modified by create_process
-  if (strlen(s) <= 1 || s[0] != '\"' || s[strlen(s)-1] != '\"')
+  if (sizeof(s) <= 1 || s[0] != '\"' || s[sizeof(s)-1] != '\"')
     s = "\"" + s + "\"";
   return create_process(({ "cmd", "/c", s }),data);
 #elif defined(__amigaos__)
diff --git a/lib/modules/Protocols.pmod/DNS.pmod b/lib/modules/Protocols.pmod/DNS.pmod
index 3ebf73652de31f29a129ea1de37d92920ec014a3..966ebda94b6c0cfca40832f3bfd3af919c8a4ecc 100644
--- a/lib/modules/Protocols.pmod/DNS.pmod
+++ b/lib/modules/Protocols.pmod/DNS.pmod
@@ -1,4 +1,4 @@
-// $Id: DNS.pmod,v 1.70 2002/12/23 18:59:54 grubba Exp $
+// $Id: DNS.pmod,v 1.71 2003/01/20 17:44:00 nilsson Exp $
 // Not yet finished -- Fredrik Hubinette
 
 //! Domain Name System
@@ -100,9 +100,9 @@ class protocol
 {
   string mklabel(string s)
   {
-    if(strlen(s)>63)
+    if(sizeof(s)>63)
       error("Too long component in domain name.\n");
-    return sprintf("%c%s",strlen(s),s);
+    return sprintf("%c%s",sizeof(s),s);
   }
 
   static private string mkname(string|array(string) labels, int pos,
@@ -119,7 +119,7 @@ class protocol
       if(pos<0x4000)
 	comp[n]=pos;
       string l = mklabel(labels[0]);
-      return l + mkname(labels[1..], pos+strlen(l), comp);
+      return l + mkname(labels[1..], pos+sizeof(l), comp);
     }
   }
 
@@ -145,11 +145,11 @@ class protocol
      case T_MX:
        return sprintf("%2c", entry->preference)+mkname(entry->mx, pos+2, c);
      case T_HINFO:
-       return sprintf("%1c%s%1c%s", strlen(entry->cpu||""), entry->cpu||"",
-		      strlen(entry->os||""), entry->os||"");
+       return sprintf("%1c%s%1c%s", sizeof(entry->cpu||""), entry->cpu||"",
+		      sizeof(entry->os||""), entry->os||"");
      case T_MINFO:
        string rmailbx = mkname(entry->rmailbx, pos, c);
-       return rmailbx + mkname(entry->emailbx, pos+strlen(rmailbx), c);
+       return rmailbx + mkname(entry->emailbx, pos+sizeof(rmailbx), c);
      case T_SRV:
         return sprintf("%2c%2c%2c", entry->priority, entry->weight, entry->port) +
                       mkname(entry->target||"", pos+6, c);
@@ -158,13 +158,13 @@ class protocol
        return sprintf("%@1c", (array(int))((entry->a||"0.0.0.0")/".")[0..3]);
      case T_SOA:
        string mname = mkname(entry->mname, pos, c);
-       return mname + mkname(entry->rname, pos+strlen(mname), c) +
+       return mname + mkname(entry->rname, pos+sizeof(mname), c) +
 	 sprintf("%4c%4c%4c%4c%4c", entry->serial, entry->refresh,
 		 entry->retry, entry->expire, entry->minimum);
      case T_TXT:
        return Array.map(stringp(entry->txt)? ({entry->txt}):(entry->txt||({})),
 			lambda(string t) {
-			  return sprintf("%1c%s", strlen(t), t);
+			  return sprintf("%1c%s", sizeof(t), t);
 			})*"";
      default:
        return "";
@@ -178,10 +178,10 @@ class protocol
     foreach(entries, mapping entry) {
       string e = mkname(entry->name, pos, comp)+
 	sprintf("%2c%2c%4c", entry->type, entry->cl, entry->ttl);
-      pos += strlen(e)+2;
+      pos += sizeof(e)+2;
       string rd = entry->rdata || mkrdata(entry, pos, comp);
-      res += e + sprintf("%2c", strlen(rd)) + rd;
-      pos += strlen(rd);
+      res += e + sprintf("%2c", sizeof(rd)) + rd;
+      pos += sizeof(rd);
     }
     return res;
   }
@@ -202,14 +202,14 @@ class protocol
     mapping(string:int) c = ([]);
     if(qd)
       foreach(qd, mapping _qd)
-	r += mkname(_qd->name, strlen(r), c) +
+	r += mkname(_qd->name, sizeof(r), c) +
 	sprintf("%2c%2c", _qd->type, _qd->cl);
     if(an)
-      r+=encode_entries(an, strlen(r), c);
+      r+=encode_entries(an, sizeof(r), c);
     if(ns)
-      r+=encode_entries(ns, strlen(r), c);
+      r+=encode_entries(ns, sizeof(r), c);
     if(ar)
-      r+=encode_entries(ar, strlen(r), c);
+      r+=encode_entries(ar, sizeof(r), c);
     return r;
   }
 
@@ -301,7 +301,7 @@ class protocol
   array decode_entries(string s,int num, array(int) next)
   {
     array(string) ret=({});
-    for(int e=0;e<num && next[0]<strlen(s);e++)
+    for(int e=0;e<num && next[0]<sizeof(s);e++)
     {
       mapping m=([]);
       m->name=decode_domain(s,next);
@@ -402,7 +402,7 @@ class protocol
     m->ad=(m->c2>>5)&1;
     m->ra=(m->c2>>7)&1;
     
-    m->length=strlen(s);
+    m->length=sizeof(s);
     
     array(string) tmp=({});
     int e;
diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
index 9614c22db08006cbe566cf03dae05e762219ef76..bced213c5885185774f1c00b91524f1a48a1943e 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Query.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: Query.pike,v 1.47 2002/11/29 01:09:27 nilsson Exp $
+// $Id: Query.pike,v 1.48 2003/01/20 17:44:00 nilsson Exp $
 
 //!	Open and execute an HTTP query.
 
@@ -65,9 +65,9 @@ static void ponder_answer()
       if ((i=min(i,j))!=10000000) break;
 
       s=con->read(8192,1);
-      if (!s || s=="") { i=strlen(buf); break; }
+      if (!s || s=="") { i=sizeof(buf); break; }
 
-      i=strlen(buf)-3;
+      i=sizeof(buf)-3;
       buf+=s;
    }
 
@@ -185,7 +185,7 @@ static void async_close()
 static void async_read(mixed dummy,string s)
 {
 #ifdef HTTP_QUERY_DEBUG
-   werror("-> %d bytes of data\n",strlen(s));
+   werror("-> %d bytes of data\n",sizeof(s));
 #endif
 
    buf+=s;
@@ -289,7 +289,7 @@ void async_got_host(string server,int port)
 void async_fetch_read(mixed dummy,string data)
 {
 #ifdef HTTP_QUERY_DEBUG
-   werror("-> %d bytes of data\n",strlen(data));
+   werror("-> %d bytes of data\n",sizeof(data));
 #endif
    buf+=data;
 }
@@ -475,7 +475,7 @@ this_program thread_request(string server, int port, string query,
       headers=mkmapping(Array.map(indices(headers),lower_case),
 			values(headers));
 
-      if (data!="") headers->content_length=strlen(data);
+      if (data!="") headers->content_length=sizeof(data);
 
       headers=headers_encode(headers);
    }
@@ -534,7 +534,7 @@ object sync_request(string server, int port, string query,
 			     values( http_headers ));
 
     if(data != "")
-      http_headers->content_length = strlen( data );
+      http_headers->content_length = sizeof( data );
 
     http_headers = headers_encode( http_headers );
   }
@@ -571,7 +571,7 @@ object async_request(string server,int port,string query,
       headers=mkmapping(Array.map(indices(headers),lower_case),
 			values(headers));
 
-      if (data!="") headers->content_length=strlen(data);
+      if (data!="") headers->content_length=sizeof(data);
 
       headers=headers_encode(headers);
    }
@@ -617,10 +617,10 @@ string data(int|void max_length)
       l=0x7fffffff;
    else {
       len -= discarded_bytes;
-      l=len-strlen(buf)+datapos;
+      l=len-sizeof(buf)+datapos;
    }
-   if(!zero_type(max_length) && l>max_length-strlen(buf)+datapos)
-     l = max_length-strlen(buf)+datapos;
+   if(!zero_type(max_length) && l>max_length-sizeof(buf)+datapos)
+     l = max_length-sizeof(buf)+datapos;
    if(l>0 && con)
    {
      if(headers->server == "WebSTAR")
@@ -731,7 +731,7 @@ class PseudoFile
       con=_con;
       buf=_buf;
       len=_len;
-      if (!con) len=strlen(buf);
+      if (!con) len=sizeof(buf);
    }
 
    string read(int n)
@@ -740,15 +740,15 @@ class PseudoFile
 
       if (len && p+n>len) n=len-p;
 
-      if (strlen(buf)<n && con)
+      if (sizeof(buf)<n && con)
       {
-	 string s=con->read(n-strlen(buf));
+	 string s=con->read(n-sizeof(buf));
 	 buf+=s;
       }
 
       s=buf[..n-1];
       buf=buf[n..];
-      p+=strlen(s);
+      p+=sizeof(s);
       return s;
    }
 
@@ -787,8 +787,8 @@ object file(void|mapping newheader,void|mapping removeheader)
       if (zero_type(headers["content-length"]))
 	 len=0x7fffffff;
       else
-	 len=strlen(protocol+" "+status+" "+status_desc)+2+
-	    strlen(hbuf)+2+(int)headers["content-length"];
+	 len=sizeof(protocol+" "+status+" "+status_desc)+2+
+	    sizeof(hbuf)+2+(int)headers["content-length"];
       return PseudoFile(con,
 			protocol+" "+status+" "+status_desc+"\r\n"+
 			hbuf+"\r\n"+buf[datapos..],len);
@@ -796,7 +796,7 @@ object file(void|mapping newheader,void|mapping removeheader)
    if (zero_type(headers["content-length"]))
       len=0x7fffffff;
    else
-      len=strlen(headerbuf)+4+(int)h["content-length"];
+      len=sizeof(headerbuf)+4+(int)h["content-length"];
    return PseudoFile(con,buf,len);
 }
 
diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
index fd6f17ef303c9dbc14afba484b13f6876c0746d6..9414981dc846eabef4037092ca134aff3bb76247 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
@@ -130,7 +130,7 @@ static int parse_variables()
    if (request_type=="POST" &&
        request_headers["content-type"]=="application/x-www-form-urlencoded")
    {
-      if ((int)request_headers["content-length"]<=strlen(buf))
+      if ((int)request_headers["content-length"]<=sizeof(buf))
       {
 	 parse_post();
 	 return 1;
@@ -163,8 +163,8 @@ static void read_cb_post(mixed dummy,string s)
    raw+=s;
    buf+=s;
 
-   if (strlen(buf)>=(int)request_headers["content-length"] ||
-       strlen(buf)>MAXIMUM_REQUEST_SIZE)
+   if (sizeof(buf)>=(int)request_headers["content-length"] ||
+       sizeof(buf)>MAXIMUM_REQUEST_SIZE)
    {
       my_fd->set_blocking();
       populate_raw();
@@ -232,7 +232,7 @@ string make_response_header(mapping m)
 
    if (zero_type(m->size))
       if (m->data)
-	 m->size=strlen(m->data);
+	 m->size=sizeof(m->data);
       else if (m->stat)
 	 m->size=m->stat->size;
       else 
@@ -276,7 +276,7 @@ void response_and_finish(mapping m, function|void _log_cb)
 
    if (m->file && 
        m->size!=-1 && 
-       m->size+strlen(header)<4096) // fit in buffer
+       m->size+sizeof(header)<4096) // fit in buffer
    {
       m->data=m->file->read(m->size);
       m->file->close();
@@ -329,7 +329,7 @@ Stdio.File send_fd=0;
 
 void send_write()
 {
-   if (strlen(send_buf)-send_pos<8192 &&
+   if (sizeof(send_buf)-send_pos<8192 &&
        send_fd)
    {
       string q=send_fd->read(131072);
@@ -344,7 +344,7 @@ void send_write()
 	 send_pos=0;
       }
    }
-   else if (send_pos==strlen(send_buf) && !send_fd)
+   else if (send_pos==sizeof(send_buf) && !send_fd)
    {
       finish();
       return;
diff --git a/lib/modules/Protocols.pmod/IMAP.pmod/parse_line.pike b/lib/modules/Protocols.pmod/IMAP.pmod/parse_line.pike
index ea73d0dfc6abae01703ed565b05fce5aca45850b..252c88d6135ffead7950394b8fabcf6734ecd0ee 100644
--- a/lib/modules/Protocols.pmod/IMAP.pmod/parse_line.pike
+++ b/lib/modules/Protocols.pmod/IMAP.pmod/parse_line.pike
@@ -27,7 +27,7 @@ void skip_whitespace()
 int eolp()
 {
   skip_whitespace();
-  return !strlen(buffer);
+  return !sizeof(buffer);
 }
 #endif
 
@@ -36,11 +36,11 @@ int get_number()
 {
   skip_whitespace();
       
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return -1;
 
   int i;
-  for(i = 0; i<strlen(buffer); i++)
+  for(i = 0; i<sizeof(buffer); i++)
     if ( (buffer[i] < '0') || ('9' < buffer[i]) )
       break;
       
@@ -66,7 +66,7 @@ string get_atom(int|void with_options)
 	 atom, buffer);
 
   werror(sprintf("=> atom: %O\n", atom));
-  return strlen(atom) && atom;
+  return sizeof(atom) && atom;
 }
 
 string|object get_string()
@@ -75,7 +75,7 @@ string|object get_string()
 
   skip_whitespace();
 
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return 0;
       
   switch(buffer[0])
@@ -100,9 +100,9 @@ string|object get_string()
   }
   case '{':
   {
-    if (buffer[strlen(buffer)-1..] != "}")
+    if (buffer[sizeof(buffer)-1..] != "}")
       return 0;
-    string n = buffer[1..strlen(buffer)-2];
+    string n = buffer[1..sizeof(buffer)-2];
 
     buffer = "";
     if ( (sizeof(values(n) - values("0123456789")))
@@ -121,7 +121,7 @@ string|object get_astring()
   werror("get_astring: buffer = '%s'\n", buffer);
       
   skip_whitespace();
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return 0;
   switch(buffer[0])
   {
@@ -153,7 +153,7 @@ object get_set()
 mapping get_token(int eol, int accept_options)
 {
   skip_whitespace();
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return (eol == -1) && ([ "type" : "eol", "eol" : 1 ]);
   
   if (eol && (buffer[0] == eol))
@@ -188,19 +188,19 @@ mapping get_token(int eol, int accept_options)
 /* Reads a <start.size> suffix */
 mapping get_range(mapping atom)
 {
-  if (!strlen(buffer) || (buffer[0] != '<'))
+  if (!sizeof(buffer) || (buffer[0] != '<'))
     return atom;
 
   buffer = buffer[1..];
 
   int start = get_number();
-  if ((start < 0) || !strlen(buffer) || (buffer[0] != '.'))
+  if ((start < 0) || !sizeof(buffer) || (buffer[0] != '.'))
     return 0;
 
   buffer = buffer[1..];
       
   int size = get_number();
-  if ((size <= 0) || !strlen(buffer) || (buffer[0] != '>'))
+  if ((size <= 0) || !sizeof(buffer) || (buffer[0] != '>'))
     return 0;
       
   buffer = buffer[1..];
@@ -217,7 +217,7 @@ array(string) get_flag_list()
 {
   skip_whitespace();
 
-  if (!strlen(buffer) || (buffer[0] != '(') )
+  if (!sizeof(buffer) || (buffer[0] != '(') )
     return 0;
 
   buffer = buffer[1..];
@@ -234,7 +234,7 @@ array(string) get_flag_list()
   }
   skip_whitespace();	// This one shouldn't be needed, but...
 
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return 0;
 
   if (buffer[0] = ')')
@@ -259,7 +259,7 @@ array(string) get_flag_list()
 mapping get_simple_list(int max_depth)
 {
   skip_whitespace();
-  if (!strlen(buffer))
+  if (!sizeof(buffer))
     return 0;
 
   if (buffer[0] == '(') {
@@ -289,7 +289,7 @@ array do_parse_simple_list(int max_depth, int terminator)
   {
     skip_whitespace();
 	
-    if (!strlen(buffer))
+    if (!sizeof(buffer))
       return 0;
 	
     if (buffer[0] == terminator)
@@ -332,7 +332,7 @@ mapping get_atom_options(int max_depth)
 
   mapping res = ([ "type" : "atom",
 		   "atom" : atom ]);
-  if (!strlen(buffer) || (buffer[0] != '['))
+  if (!sizeof(buffer) || (buffer[0] != '['))
   {
     res->raw = atom;
     return res;
@@ -355,20 +355,20 @@ mapping get_atom_options(int max_depth)
     option_start[..sizeof(option_start) - sizeof(buffer) - 1];
 
       
-  if (!strlen(buffer) || (buffer[0] != '<'))
+  if (!sizeof(buffer) || (buffer[0] != '<'))
     return res;
 
   /* Parse <start.size> suffix */
   buffer = buffer[1..];
 
   int start = get_number();
-  if ((start < 0) || !strlen(buffer) || (buffer[0] != '.'))
+  if ((start < 0) || !sizeof(buffer) || (buffer[0] != '.'))
     return 0;
 
   buffer = buffer[1..];
       
   int size = get_number();
-  if ((size < 0) || !strlen(buffer) || (buffer[0] != '>'))
+  if ((size < 0) || !sizeof(buffer) || (buffer[0] != '>'))
     return 0;
       
   buffer = buffer[1..];
diff --git a/lib/modules/Protocols.pmod/IMAP.pmod/server.pike b/lib/modules/Protocols.pmod/IMAP.pmod/server.pike
index 28a269590c704d53f86bb220eff21650f8b5742b..396d0dc409602b097b600a5a12b409f2bc04cbd0 100644
--- a/lib/modules/Protocols.pmod/IMAP.pmod/server.pike
+++ b/lib/modules/Protocols.pmod/IMAP.pmod/server.pike
@@ -45,7 +45,7 @@ function(object:void) request_callback;
 
 void recv_command(string s)
 {
-  if (!strlen(s))
+  if (!sizeof(s))
     // Ignore empty lines.
     return;
   
diff --git a/lib/modules/Protocols.pmod/IMAP.pmod/types.pmod b/lib/modules/Protocols.pmod/IMAP.pmod/types.pmod
index b13f624ab5141c9e32b33e082184ec1b6f0aed0d..a9719b71e75d1cdbd9e3a8b1e6ecb0063ce17cc2 100644
--- a/lib/modules/Protocols.pmod/IMAP.pmod/types.pmod
+++ b/lib/modules/Protocols.pmod/IMAP.pmod/types.pmod
@@ -98,7 +98,7 @@ class imap_string
       if (!sizeof(array_sscanf(data, "%*[^\0-\037\\\"\177-\377]%s")[0]))
 	return "\"" + replace(data, ({ "\"", "\\" }), ({ "\\\"", "\\\\" }) ) + "\"";
       else
-	return sprintf("{%d}\r\n%s", strlen(data), data);
+	return sprintf("{%d}\r\n%s", sizeof(data), data);
     }
 }
 
@@ -134,7 +134,7 @@ class imap_number
 // Returns -1 on error. 
 int string_to_number(string s)
 {
-  if (!strlen(s) || (strlen(s)  > 9))
+  if (!sizeof(s) || (sizeof(s)  > 9))
     return -1;
   if (sizeof(values(s) - ({ '0', '1', '2', '3', '4',
 			    '5', '6', '7', '8', '9' })))
diff --git a/lib/modules/Protocols.pmod/IRC.pmod/Error.pmod b/lib/modules/Protocols.pmod/IRC.pmod/Error.pmod
index b43c113d01f0244d8d0dacb5fdbababf3d499fcd..7e9f8c3fae63b61f0901b3d02dd77deaa8921a0c 100644
--- a/lib/modules/Protocols.pmod/IRC.pmod/Error.pmod
+++ b/lib/modules/Protocols.pmod/IRC.pmod/Error.pmod
@@ -13,7 +13,7 @@ class StdErr
       name=_name;
       __backtrace=backtrace();
       while (!__backtrace[-1][0]||
-	     __backtrace[-1][0][strlen(__backtrace[-1][0])-11..]
+	     __backtrace[-1][0][sizeof(__backtrace[-1][0])-11..]
 	     == "/Error.pmod")
 	 __backtrace=__backtrace[0..sizeof(__backtrace)-2];
    }
diff --git a/lib/modules/Protocols.pmod/IRC.pmod/Raw.pike b/lib/modules/Protocols.pmod/IRC.pmod/Raw.pike
index c4ad9fd3ee8395ce32c66bb21a85527b47e8e47b..1b4aca41400afba9e17bc53b679c79acf5d806e7 100644
--- a/lib/modules/Protocols.pmod/IRC.pmod/Raw.pike
+++ b/lib/modules/Protocols.pmod/IRC.pmod/Raw.pike
@@ -72,7 +72,7 @@ void con_write_callback()
    while (sizeof(write_buf))
    {
       int j=con->write(write_buf[0]);
-      if (j!=strlen(write_buf[0]))
+      if (j!=sizeof(write_buf[0]))
       {
 	 if (j==-1) 
 	 {
diff --git a/lib/modules/Protocols.pmod/Ident.pmod b/lib/modules/Protocols.pmod/Ident.pmod
index b67d7b26f8be21d6654885eeb749e1946545755c..030ebbf53d3f4fba7b1524a63a39ad9043b217cf 100644
--- a/lib/modules/Protocols.pmod/Ident.pmod
+++ b/lib/modules/Protocols.pmod/Ident.pmod
@@ -1,6 +1,6 @@
 // An implementation of the IDENT protocol, specified in RFC 931.
 //
-// $Id: Ident.pmod,v 1.9 2000/09/28 03:38:50 hubbe Exp $
+// $Id: Ident.pmod,v 1.10 2003/01/20 17:44:00 nilsson Exp $
 
 #pike __REAL_VERSION__
 
@@ -181,12 +181,12 @@ int|array (string) lookup(object fd)
   remote_fd->set_blocking();
   string query = raddr[1]+","+laddr[1]+"\r\n";
   int written;
-  if((written = remote_fd->write(query)) != strlen(query)) {
+  if((written = remote_fd->write(query)) != sizeof(query)) {
     destruct(remote_fd);
     throw(backtrace() +({ "Protocols.Ident: short write ("+written+")."}));
   }
   mixed response = remote_fd->gets();//0xefffffff, 1);
-  if(!response || !strlen(response))
+  if(!response || !sizeof(response))
   {
     destruct(remote_fd);
     throw(backtrace() +({ "Protocols.Ident: read failed."}));
diff --git a/lib/modules/Protocols.pmod/LDAP.pmod/protocol.pike b/lib/modules/Protocols.pmod/LDAP.pmod/protocol.pike
index 1926ab60f98754ae29f7f614596fc11d52893ba9..f60fd4e1b58b74679f0a085fd2535ac419a73ea6 100644
--- a/lib/modules/Protocols.pmod/LDAP.pmod/protocol.pike
+++ b/lib/modules/Protocols.pmod/LDAP.pmod/protocol.pike
@@ -2,7 +2,7 @@
 
 // LDAP client protocol implementation for Pike.
 //
-// $Id: protocol.pike,v 1.8 2002/07/22 16:15:40 bill Exp $
+// $Id: protocol.pike,v 1.9 2003/01/20 17:44:01 nilsson Exp $
 //
 // Honza Petrous, hop@unibase.cz
 //
@@ -79,9 +79,9 @@
     int msglen = 0, ix, ofs;
     string s, shlp;
 
-    if(strlen(readbuf) < 2)
+    if(sizeof(readbuf) < 2)
       readbuf = ldapfd->read(2); 	// 1. byte = 0x0C, 2. byte = msglen
-    if (intp(readbuf) || (strlen(readbuf) < 2)) {
+    if (intp(readbuf) || (sizeof(readbuf) < 2)) {
       seterr (LDAP_TIMEOUT);
       DWRITE_HI("protocol.read_anwer: ERROR: connection timeout.\n");
       THROW(({"LDAP: connection timeout.\n",backtrace()}));
@@ -107,10 +107,10 @@
 	return;
       }
       ofs = (msglen & 0x7f) + 2;
-      ix = ofs - strlen(readbuf);
+      ix = ofs - sizeof(readbuf);
       if(ix > 0)
 	s = ldapfd->read(ix);
-      if (!s || (strlen(s) < ix)) {
+      if (!s || (sizeof(s) < ix)) {
 	seterr (LDAP_PROTOCOL_ERROR);
 	THROW(({"LDAP: Protocol mismatch.\n",backtrace()}));
 	//return(-ldap_errno);
@@ -119,14 +119,14 @@
       readbuf += s;
       msglen = 0; // !!! RESTRICTION: 2^32 !!!
       shlp = reverse(readbuf[2..ofs]);
-      for (ix=0; ix<strlen(shlp); ix++) {
+      for (ix=0; ix<sizeof(shlp); ix++) {
         msglen += shlp[ix]*(1<<(ix*8));
       }
     }
-    ix = (ofs + msglen) - strlen(readbuf);
+    ix = (ofs + msglen) - sizeof(readbuf);
     if(ix > 0)
       s = ldapfd->read(ix);
-    if (!s || (strlen(s) < ix)) {
+    if (!s || (sizeof(s) < ix)) {
       seterr (LDAP_SERVER_DOWN);
       THROW(({"LDAP: connection closed by server.\n",backtrace()}));
       //return(-ldap_errno);
@@ -148,7 +148,7 @@
     int msglen, ix, ofs;
     string shlp;
 
-    if (strlen(readbuf) < 3)
+    if (sizeof(readbuf) < 3)
       return(0);  // PDU have min. 3 bytes
 
     if (readbuf[0] != '0')
@@ -159,16 +159,16 @@
       if (msglen == 0x80)
 	return(1); // forced execution 
       ofs = (msglen & 0x7f) + 2;
-      ix = ofs - strlen(readbuf);
+      ix = ofs - sizeof(readbuf);
       if(ix > 0)
 	return(0);  // incomplete PDU
       msglen = 0;
       shlp = reverse(readbuf[2..ofs]);
-      for (ix=0; ix<strlen(shlp); ix++) {
+      for (ix=0; ix<sizeof(shlp); ix++) {
         msglen += shlp[ix]*(1<<(ix*8));
       }
     }
-    ix = (ofs + msglen) - strlen(readbuf);
+    ix = (ofs + msglen) - sizeof(readbuf);
     if(ix > 0)
       return(0);  // incomplete PDU
 
diff --git a/lib/modules/Protocols.pmod/Line.pmod b/lib/modules/Protocols.pmod/Line.pmod
index 736ed94fffa6b1d0d6f125b4a515d97b7b7f6bbe..7994a37dfd0cae077648593461c907d7fb631e51 100644
--- a/lib/modules/Protocols.pmod/Line.pmod
+++ b/lib/modules/Protocols.pmod/Line.pmod
@@ -1,5 +1,5 @@
 /*
- * $Id: Line.pmod,v 1.20 2002/11/26 21:39:51 grubba Exp $
+ * $Id: Line.pmod,v 1.21 2003/01/20 17:44:00 nilsson Exp $
  *
  * Line-buffered protocol handling.
  *
@@ -391,7 +391,7 @@ class imap_style
     while(1) {
       if (handle_literal)
       {
-	if (strlen(read_buffer) < literal_length)
+	if (sizeof(read_buffer) < literal_length)
 	  return;
 	string literal = read_buffer[..literal_length - 1];
 	read_buffer = read_buffer[literal_length..];
diff --git a/lib/modules/Protocols.pmod/LysKOM.pmod/Helper.pmod b/lib/modules/Protocols.pmod/LysKOM.pmod/Helper.pmod
index 5a98a9d94342c6ae96fef54606731fa8c49834bf..58b0e5e6e3d2c6f79bf37e503a010f5f4aab0b10 100644
--- a/lib/modules/Protocols.pmod/LysKOM.pmod/Helper.pmod
+++ b/lib/modules/Protocols.pmod/LysKOM.pmod/Helper.pmod
@@ -9,7 +9,7 @@ string encode(mixed ... z) // encode arguments
 
 string H(string what) // encode hollerith
 {
-   return strlen(what)+"H"+what;
+   return sizeof(what)+"H"+what;
 }
 
 string B(int(0..1) ... z) // encode bitfield
diff --git a/lib/modules/Protocols.pmod/LysKOM.pmod/Raw.pike b/lib/modules/Protocols.pmod/LysKOM.pmod/Raw.pike
index 64b95df5c7b2b26cdbee916014594aed1cf783bf..a218739302f9331a539f5bc16c5b0b17e563b1c6 100644
--- a/lib/modules/Protocols.pmod/LysKOM.pmod/Raw.pike
+++ b/lib/modules/Protocols.pmod/LysKOM.pmod/Raw.pike
@@ -53,7 +53,7 @@ static inline int conwrite(string what)
 #ifdef LYSKOM_DEBUG
    werror("-> %O\n",what);
 #endif
-   int i=con->write(what)==strlen(what);
+   int i=con->write(what)==sizeof(what);
    if (!i) { werror("write failed!!!\n"); _exit(1); }
    return i;
 }
@@ -367,7 +367,7 @@ array(array(mixed)|int) try_parse(string what)
    
    array stack=({});
 
-   while (strlen(what)>1)
+   while (sizeof(what)>1)
    {
       string a,b;
 
@@ -382,16 +382,16 @@ array(array(mixed)|int) try_parse(string what)
 
 	    if (b[0]=='H') // hollerith
 	    {
-	       if (strlen(b)<=(int)a)
+	       if (sizeof(b)<=(int)a)
 		  return ({0,0}); // incomplete
 	       res+=({b[1..(int)a]});
-	       len+=strlen(a)+strlen(res[-1])+2;
+	       len+=sizeof(a)+sizeof(res[-1])+2;
 	       b=b[(int)a+1..];
 	    }
 	    else // bitfield or int
 	    {
 	       res+=({a});
-	       len+=strlen(a)+1;
+	       len+=sizeof(a)+1;
 	    }
 
 	    if (b=="") return ({0,0}); // incomplete
diff --git a/lib/modules/Protocols.pmod/NNTP.pmod b/lib/modules/Protocols.pmod/NNTP.pmod
index 4d16e8b5bc43782d3f84542def4429a0c1b53c6b..fc725775b36c474f7577d068c6932cfaeecdcb36 100644
--- a/lib/modules/Protocols.pmod/NNTP.pmod
+++ b/lib/modules/Protocols.pmod/NNTP.pmod
@@ -44,11 +44,11 @@ class protocol
     s=replace(s,"\r","");
     foreach(s/"\n",string line)
       {
-	if(strlen(line) && line[0]=='.')
+	if(sizeof(line) && line[0]=='.')
 	  line="."+line+"\r\n";
 	else
 	  line=line+"\r\n";
-	if(news::write(line) != strlen(line))
+	if(news::write(line) != sizeof(line))
 	  error("NNTP: Failed to write body.\n");
       }
     news::write(".\r\n");
diff --git a/lib/modules/Protocols.pmod/TELNET.pmod b/lib/modules/Protocols.pmod/TELNET.pmod
index 9fb2851bfaaf6ba2ba7698c300ef34b953e1bc4e..2e6cc1a01def729ca0d76f86e61bab55fcafb475 100644
--- a/lib/modules/Protocols.pmod/TELNET.pmod
+++ b/lib/modules/Protocols.pmod/TELNET.pmod
@@ -1,5 +1,5 @@
 //
-// $Id: TELNET.pmod,v 1.18 2002/03/09 18:55:50 nilsson Exp $
+// $Id: TELNET.pmod,v 1.19 2003/01/20 17:44:00 nilsson Exp $
 //
 // The TELNET protocol as described by RFC 764 and others.
 //
@@ -546,7 +546,7 @@ class protocol
   static void call_read_cb(string data)
   {
     DWRITE("Fnurgel!\n");
-    if(read_cb && strlen(data)) read_cb(id,data);
+    if(read_cb && sizeof(data)) read_cb(id,data);
   }
 
   //! Callback called when normal data has been received.
@@ -897,7 +897,7 @@ class Readline
     {
       if(!icanon)
       {
-	if(strlen(data)) read_cb(id,data);
+	if(sizeof(data)) read_cb(id,data);
       }else{
 	DWRITE(sprintf("Line callback... %O\n",data));
 	data=replace(data,
@@ -1020,7 +1020,7 @@ class Readline
     }else{
       if(prompt!=s)
       {
-	if(s[..strlen(prompt)-1]==prompt)
+	if(s[..sizeof(prompt)-1]==prompt)
 	  write(s);
 	prompt=s;
       }
diff --git a/lib/modules/Protocols.pmod/X.pmod/KeySyms.pmod b/lib/modules/Protocols.pmod/X.pmod/KeySyms.pmod
index 0342669820c07d4928f8ac8a027462c561918a85..4659580901d25a88b9fed13968603643a42c1669 100644
--- a/lib/modules/Protocols.pmod/X.pmod/KeySyms.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/KeySyms.pmod
@@ -1,6 +1,6 @@
 /* KeySyms.pmod
  *
- * $Id: KeySyms.pmod,v 1.2 2002/06/16 17:55:46 nilsson Exp $
+ * $Id: KeySyms.pmod,v 1.3 2003/01/20 17:44:01 nilsson Exp $
  */
 
 /*
@@ -1547,13 +1547,13 @@
       compose_state="";
       return _LookupKeysym( keysym );
     }
-    if(strlen(compose_state)>4)
+    if(sizeof(compose_state)>4)
     {
       string res="";
-      while(strlen(compose_state)
+      while(sizeof(compose_state)
 	    && (sscanf(compose_state, "%4c%s", keysym, compose_state)==2))
 	res += _LookupKeysym( keysym ) || "";
-      return strlen(res)?res:0;
+      return sizeof(res)?res:0;
     }
     compose_state="";
     return _LookupKeysym( keysym );
diff --git a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
index f2c2323fa73ab2dc20b6c76a5870318023d8a825..48d3c0ed41da5d046eabd0d2d60976bdd27ca9b1 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Requests.pmod
@@ -1,6 +1,6 @@
 /* Requests.pike
  *
- * $Id: Requests.pmod,v 1.31 2002/01/15 22:47:11 nilsson Exp $
+ * $Id: Requests.pmod,v 1.32 2003/01/20 17:44:01 nilsson Exp $
  */
 
 /*
@@ -56,9 +56,9 @@ class request
     
     // Big requests extension. Will not work
     // if this extension is not present.
-    if((strlen(req)+1) > (65535*4))
-      return sprintf("%c%c\0\0%4c%s", reqType, data, 1 + strlen(req) / 4, req);
-    return sprintf("%c%c%2c%s", reqType, data, 1 + strlen(req) / 4, req);
+    if((sizeof(req)+1) > (65535*4))
+      return sprintf("%c%c\0\0%4c%s", reqType, data, 1 + sizeof(req) / 4, req);
+    return sprintf("%c%c%2c%s", reqType, data, 1 + sizeof(req) / 4, req);
   }
 
   mixed handle_reply(mapping reply)
@@ -279,7 +279,7 @@ class InternAtom
 
   string to_string()
   {
-    return build_request(sprintf("%2c\0\0%s", strlen(name), name),
+    return build_request(sprintf("%2c\0\0%s", sizeof(name), name),
 			 onlyIfExists);
   }
 
@@ -748,7 +748,7 @@ class PutImage
     //    werror(sprintf("PutImage>to_string: %d, %d, %d, %d\n",
     //		   dst_x, dst_y, width, height));
     string pad="";
-    while(((strlen(data)+strlen(pad))%4)) pad += "\0";
+    while(((sizeof(data)+sizeof(pad))%4)) pad += "\0";
     pad =  build_request(sprintf("%4c" "%4c"
 				 "%2c" "%2c"
 				 "%2c" "%2c"
@@ -914,8 +914,8 @@ class QueryExtension
   string to_string()
   {
     string pad="";
-    while(((strlen(name)+strlen(pad))%4)) pad += "\0";
-    return build_request(sprintf("%2c\0\0%s%s", strlen(name),name,pad));
+    while(((sizeof(name)+sizeof(pad))%4)) pad += "\0";
+    return build_request(sprintf("%2c\0\0%s%s", sizeof(name),name,pad));
   }
 
   mapping handle_reply(mapping reply)
@@ -959,7 +959,7 @@ class ExtensionRequest
 
   string build_request(string req, void|int data)
   {
-    return sprintf("%c%c%2c%s", type, data, 1 + strlen(req) / 4, req);
+    return sprintf("%c%c%2c%s", type, data, 1 + sizeof(req) / 4, req);
   }
 
 
@@ -976,7 +976,7 @@ class ExtensionRequest
   {
     string pad ="";
     if(!data) data = "";
-    else while((strlen(data)+strlen(pad))%4) pad += "\0";
+    else while((sizeof(data)+sizeof(pad))%4) pad += "\0";
     return build_request(data+pad, code);
   }
   
diff --git a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
index 8b4f9354c18f29f0ca426e155ae891f79e934a83..b0af20db8c30ab4c4f23e75ff2c7b6924a3e00c6 100644
--- a/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/Xlib.pmod
@@ -1,6 +1,6 @@
 /* Xlib.pmod
  *
- * $Id: Xlib.pmod,v 1.47 2002/06/15 20:55:25 bill Exp $
+ * $Id: Xlib.pmod,v 1.48 2003/01/20 17:44:01 nilsson Exp $
  */
 
 /*
@@ -48,7 +48,7 @@ class rec_buffer
 
   int needs()
   {
-    return pad + expected - strlen(buffer);
+    return pad + expected - sizeof(buffer);
   }
   
   void add_data(string data)
@@ -58,7 +58,7 @@ class rec_buffer
 
   string get_msg()
   {
-    if (strlen(buffer) < (expected + pad))
+    if (sizeof(buffer) < (expected + pad))
       return 0;
     string res = buffer[pad..pad+expected-1];
     buffer = buffer[pad+expected..];
@@ -210,7 +210,7 @@ class Display
   
   void write_callback()
   {
-    if (strlen(buffer))
+    if (sizeof(buffer))
       {
 	int written = write(buffer);
 	if (written < 0)
@@ -223,7 +223,7 @@ class Display
 	  {
 	    // werror(sprintf("Xlib: wrote '%s'\n", buffer[..written-1]));
 	    buffer = buffer[written..];
-	    // if (!strlen(buffer))
+	    // if (!sizeof(buffer))
 	    //   set_write_callback(0);
 	  }
       }
@@ -231,9 +231,9 @@ class Display
 
   void send(string data)
   {
-    int ob = strlen(buffer);
+    int ob = sizeof(buffer);
     buffer += data;
-    if (!ob && strlen(buffer))
+    if (!ob && sizeof(buffer))
       {
 #if 0
 	set_write_callback(write_callback);
@@ -250,7 +250,7 @@ class Display
   { /* FIXME: Not thread-safe */
     set_blocking();
     int written = write(buffer);
-    if (written < strlen(buffer))
+    if (written < sizeof(buffer))
       return 0;
     buffer = "";
 
@@ -734,7 +734,7 @@ class Display
 		    fields[1]));
 
     string host;
-    if (strlen(fields[0]))
+    if (sizeof(fields[0]))
       host = fields[0];
     else
       {
@@ -797,7 +797,7 @@ class Display
     /* Always uses network byteorder (big endian) */
     string msg = sprintf("B\0%2c%2c%2c%2c\0\0%s%s",
 			 11, 0,
-			 strlen(auth_data->name), strlen(auth_data->data),
+			 sizeof(auth_data->name), sizeof(auth_data->data),
 			 ._Xlib.pad(auth_data->name), ._Xlib.pad(auth_data->data));
 
     state = STATE_WAIT_CONNECT;
diff --git a/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod b/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
index fcc1f9c24911a31d43ad0f698aa55e0664ac0235..e6b41734cf3b5706c389603af30b4d25176e861d 100644
--- a/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
+++ b/lib/modules/Protocols.pmod/X.pmod/_Xlib.pmod
@@ -1,6 +1,6 @@
 /* _Xlib.pmod
  *
- * $Id: _Xlib.pmod,v 1.17 2002/01/15 22:32:43 nilsson Exp $
+ * $Id: _Xlib.pmod,v 1.18 2003/01/20 17:44:01 nilsson Exp $
  *
  * Kluge, should be in Xlib.pmod
  */
@@ -31,7 +31,7 @@ object display_re = Regexp("^([^:]*):([0-9]+)(.[0-9]+|)$");
 
 string pad(string s)
 {
-  return s + ({ "", "\0\0\0", "\0\0", "\0" })[strlen(s) % 4];
+  return s + ({ "", "\0\0\0", "\0\0", "\0" })[sizeof(s) % 4];
 }
 
 array(string) window_attributes =
diff --git a/lib/modules/Remote.pmod/connection.pike b/lib/modules/Remote.pmod/connection.pike
index 929edd0aa20d958f5f556b6c59c92fd752b08ea7..b4d87a51b2be3e794538c5897dfe97625332672b 100644
--- a/lib/modules/Remote.pmod/connection.pike
+++ b/lib/modules/Remote.pmod/connection.pike
@@ -55,8 +55,8 @@ int connect(string host, int port, void|int timeout)
   con->set_nonblocking();
   for (;;)
   {
-     s += (con->read(24-strlen(s),1)||"");
-     if (strlen(s)==24) break;
+     s += (con->read(24-sizeof(s),1)||"");
+     if (sizeof(s)==24) break;
      sleep(0.02);
      if (time()>end_time) 
      {
@@ -258,7 +258,7 @@ void send(string s)
 #else
   string ob = write_buffer;
   write_buffer += s;
-  if(!strlen(ob))
+  if(!sizeof(ob))
     write_some();
 #endif
 }
@@ -301,7 +301,7 @@ void return_error(int refno, mixed err)
 void return_value(int refno, mixed val)
 {
   string s = encode_value(ctx->encode_return(refno, val));
-  DEBUGMSG("return "+strlen(s)+" bytes ["+refno+"]\n");
+  DEBUGMSG("return "+sizeof(s)+" bytes ["+refno+"]\n");
   send(sprintf("%4c%s", sizeof(s), s));
 }
 
@@ -365,7 +365,7 @@ void read_some(int ignore, string s)
   DEBUGMSG("read "+sizeof(s)+" bytes\n");
   read_buffer += s;
   DEBUGMSG("has "+sizeof(read_buffer)+" bytes\n");
-  if(!strlen(read_buffer)) return;
+  if(!sizeof(read_buffer)) return;
 
   if (!request_size && sizeof(read_buffer) > 4)
   {
@@ -438,7 +438,7 @@ int read_once()
 {
   if (closed) return 0;
   string s = con->read( 8192, 1 );
-  if( !s || !strlen(s) )
+  if( !s || !sizeof(s) )
   {
     closed_connection( 0 );
     return 0;
@@ -453,7 +453,7 @@ void write_thread()
   DEBUGMSG("write_thread\n");
   while( write_some() ) {
     Thread.MutexKey lock = write_buffer_cond_mutex->lock();
-    if(!(strlen(write_buffer) || closed)) {
+    if(!(sizeof(write_buffer) || closed)) {
       if (want_close) try_close();
       write_buffer_cond->wait(lock);
     }
diff --git a/lib/modules/SSL.pmod/cipher.pike b/lib/modules/SSL.pmod/cipher.pike
index 2fbdb84723942537efa503763143799734d87d38..40b7058b721a4e519c0dca809662a8359c9b2564 100644
--- a/lib/modules/SSL.pmod/cipher.pike
+++ b/lib/modules/SSL.pmod/cipher.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: cipher.pike,v 1.20 2002/06/11 18:01:04 mast Exp $
+/* $Id: cipher.pike,v 1.21 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -64,7 +64,7 @@ class mac_sha
   {
     string s = sprintf("%~8s%c%2c%s",
 		       "\0\0\0\0\0\0\0\0", seq_num->digits(256),
-		       packet->content_type, strlen(packet->fragment),
+		       packet->content_type, sizeof(packet->fragment),
 		       packet->fragment);
 #ifdef SSL3_DEBUG_CRYPT
 //    werror(sprintf("SSL.cipher: hashing %O\n", s));
@@ -107,7 +107,7 @@ class mac_hmac_sha {
 		       "\0\0\0\0\0\0\0\0", seq_num->digits(256),
 		       packet->content_type,
 		       packet->protocol_version[0],packet->protocol_version[1],
-		       strlen(packet->fragment),
+		       sizeof(packet->fragment),
 		       packet->fragment);
 
     return  hmac(secret)(s);
@@ -146,8 +146,8 @@ static string P_hash(object hashfn,int hlen,string secret,string seed,int len) {
 
 string prf(string secret,string label,string seed,int len) { 
 
-  string s1=secret[..(int)(ceil(strlen(secret)/2.0)-1)];
-  string s2=secret[(int)(floor(strlen(secret)/2.0))..];
+  string s1=secret[..(int)(ceil(sizeof(secret)/2.0)-1)];
+  string s2=secret[(int)(floor(sizeof(secret)/2.0))..];
 
   string a=P_hash(Crypto.md5,16,s1,label+seed,len);
   string b=P_hash(Crypto.sha,20,s2,label+seed,len);
diff --git a/lib/modules/SSL.pmod/connection.pike b/lib/modules/SSL.pmod/connection.pike
index 4aa1c217db8f82910c4873362b1f6c9cd3ca7e46..1ddb1902f2482395d1d4d09973a6410b4ba2c340 100644
--- a/lib/modules/SSL.pmod/connection.pike
+++ b/lib/modules/SSL.pmod/connection.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: connection.pike,v 1.23 2002/12/06 20:31:06 grubba Exp $
+/* $Id: connection.pike,v 1.24 2003/01/20 17:44:01 nilsson Exp $
  *
  * SSL packet layer
  */
@@ -96,7 +96,7 @@ void send_packet(object packet, int|void priority)
 {
 
 #ifdef SSL3_FRAGDEBUG
-  werror(" SSL.connection->send_packet: strlen(packet)="+strlen(packet)+"\n");
+  werror(" SSL.connection->send_packet: sizeof(packet)="+sizeof(packet)+"\n");
 #endif
   if (!priority)
     priority = ([ PACKET_alert : PRI_alert,
@@ -283,7 +283,7 @@ string|int got_data(string|int s)
 	 mixed err = 0;
 	 alert_buffer += packet->fragment;
 	 for (i = 0;
-	      !err && ((strlen(alert_buffer) - i) >= 2);
+	      !err && ((sizeof(alert_buffer) - i) >= 2);
 	      i+= 2)
 	   err = handle_alert(alert_buffer[i..i+1]);
 
@@ -296,7 +296,7 @@ string|int got_data(string|int s)
        {
 	 int i;
 	 int err;
-	 for (i = 0; (i < strlen(packet->fragment)); i++)
+	 for (i = 0; (i < sizeof(packet->fragment)); i++)
 	 {
 	   err = handle_change_cipher(packet->fragment[i]);
 #ifdef SSL3_DEBUG
@@ -320,10 +320,10 @@ string|int got_data(string|int s)
 	 int len;
 	 handshake_buffer += packet->fragment;
 
-	 while (strlen(handshake_buffer) >= 4)
+	 while (sizeof(handshake_buffer) >= 4)
 	 {
 	   sscanf(handshake_buffer, "%*c%3c", len);
-	   if (strlen(handshake_buffer) < (len + 4))
+	   if (sizeof(handshake_buffer) < (len + 4))
 	     break;
 	   err = handle_handshake(handshake_buffer[0],
 				  handshake_buffer[4..len + 3],
diff --git a/lib/modules/SSL.pmod/handshake.pike b/lib/modules/SSL.pmod/handshake.pike
index ede0210a08f897fc05ae404913683f4b4a83a0ac..4a10888b389733140b66f75b272895c7b35620e3 100644
--- a/lib/modules/SSL.pmod/handshake.pike
+++ b/lib/modules/SSL.pmod/handshake.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: handshake.pike,v 1.29 2002/03/20 16:40:01 nilsson Exp $
+/* $Id: handshake.pike,v 1.30 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -105,7 +105,7 @@ object handshake_packet(int type, string data)
   /* Perhaps one need to split large packages? */
   object packet = Packet();
   packet->content_type = PACKET_handshake;
-  packet->fragment = sprintf("%c%3c%s", type, strlen(data), data);
+  packet->fragment = sprintf("%c%3c%s", type, sizeof(data), data);
   handshake_messages += packet->fragment;
   return packet;
 }
@@ -236,7 +236,7 @@ object client_key_exchange_packet()
     data = (temp_key || context->rsa)->encrypt(premaster_secret);
 
     if(version[1]==1) 
-      data=sprintf("%2c",strlen(data))+data;
+      data=sprintf("%2c",sizeof(data))+data;
       
     break;
   case KE_dhe_dss:
@@ -295,7 +295,7 @@ int reply_new_session(array(int) cipher_suites, array(int) compression_methods)
   {
     object struct = Struct();
     
-    int len = `+( @ Array.map(context->certificates, strlen));
+    int len = `+( @ Array.map(context->certificates, sizeof));
 #ifdef SSL3_DEBUG
 //    werror(sprintf("SSL.handshake: certificate_message size %d\n", len));
 #endif
@@ -316,7 +316,7 @@ int reply_new_session(array(int) cipher_suites, array(int) compression_methods)
     object struct = Struct();
     struct->put_var_uint_array(context->preferred_auth_methods, 1, 1);
 
-    int len = `+(@ Array.map(authorities, strlen));
+    int len = `+(@ Array.map(authorities, sizeof));
     struct->put_uint(len + 2 * sizeof(authorities), 2);
     foreach(authorities, string auth)
       struct->put_var_string(auth, 2);
@@ -375,7 +375,7 @@ string server_derive_master_secret(string data)
 #endif
   case KE_dhe_dss:
   case KE_dhe_rsa:
-    if (!strlen(data))
+    if (!sizeof(data))
     {
       /* Implicit encoding; Should never happen unless we have
        * requested and received a client certificate of type
@@ -415,7 +415,7 @@ string server_derive_master_secret(string data)
      werror(sprintf("encrypted premaster_secret: '%O'\n", data));
 #endif
      if(version[1] == 1) {
-       if(strlen(data)-2 != data[0]*256+data[1]) {
+       if(sizeof(data)-2 != data[0]*256+data[1]) {
 	 premaster_secret = context->random(48);
 	 rsa_message_was_bad = 1;
        }
@@ -427,7 +427,7 @@ string server_derive_master_secret(string data)
      werror(sprintf("premaster_secret: '%O'\n", premaster_secret));
 #endif
      if (!premaster_secret
-	 || (strlen(premaster_secret) != 48)
+	 || (sizeof(premaster_secret) != 48)
 	 || (premaster_secret[0] != 3))
      {
 
@@ -533,7 +533,7 @@ string describe_type(int i)
  void  printHex(string buf) {
   int i;
   string res="";
-  for(i=0; i< strlen(buf) ; i++) {
+  for(i=0; i< sizeof(buf) ; i++) {
     int data=buf[i];
     res+=sprintf("%02x ",data&0xff);
   } 
@@ -559,7 +559,7 @@ int(-1..1) handle_handshake(int type, string data, string raw)
 #ifdef SSL3_DEBUG_HANDSHAKE_STATE
   werror("SSL.handshake: state %s, type %s\n",
 	 describe_state(handshake_state), describe_type(type));
-  werror("strlen(data)="+strlen(data)+"\n");
+  werror("sizeof(data)="+sizeof(data)+"\n");
 #endif
 
   switch(handshake_state)
@@ -626,10 +626,10 @@ int(-1..1) handle_handshake(int type, string data, string raw)
 	  werror(sprintf("SSL.handshake->handle_handshake: "
 			 "Version %d.%d hello detected\n", @version));
 	
-	if (strlen(id))
+	if (sizeof(id))
 	  werror(sprintf("SSL.handshake: Looking up session %O\n", id));
 #endif
-	session = strlen(id) && context->lookup_session(id);
+	session = sizeof(id) && context->lookup_session(id);
 	if (session)
 	  {
 #ifdef SSL3_DEBUG
@@ -1055,7 +1055,7 @@ int(-1..1) handle_handshake(int type, string data, string raw)
       {
 	object struct = Struct();
     
-	int len = `+( @ Array.map(context->certificates, strlen));
+	int len = `+( @ Array.map(context->certificates, sizeof));
 #ifdef SSL3_DEBUG
 	//    werror(sprintf("SSL.handshake: certificate_message size %d\n", len));
 #endif
diff --git a/lib/modules/SSL.pmod/https.pike b/lib/modules/SSL.pmod/https.pike
index 25a1482e3e7cbc3313578b45cef8e392ebcd0690..5728495e2e98f9a102d0debd6560e171e345f50c 100644
--- a/lib/modules/SSL.pmod/https.pike
+++ b/lib/modules/SSL.pmod/https.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: https.pike,v 1.12 2002/03/20 16:40:01 nilsson Exp $
+/* $Id: https.pike,v 1.13 2003/01/20 17:44:01 nilsson Exp $
  *
  * dummy https server
  */
@@ -46,7 +46,7 @@ class conn {
 
   void write_callback()
   {
-    if (index < strlen(message))
+    if (index < sizeof(message))
     {
       int written = sslfile->write(message[index..]);
       if (written > 0)
@@ -54,7 +54,7 @@ class conn {
       else
 	sslfile->close();
     }
-    if (index == strlen(message))
+    if (index == sizeof(message))
       sslfile->close();
   }
   
diff --git a/lib/modules/SSL.pmod/packet.pike b/lib/modules/SSL.pmod/packet.pike
index 89d2ac5f94b2f3e3dd0464fdc6eaccbae14e6ca8..c693b8135c58bdf13932fc777e199cd76728bbb3 100644
--- a/lib/modules/SSL.pmod/packet.pike
+++ b/lib/modules/SSL.pmod/packet.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: packet.pike,v 1.11 2002/03/20 16:40:01 nilsson Exp $
+/* $Id: packet.pike,v 1.12 2003/01/20 17:44:01 nilsson Exp $
  *
  * SSL Record Layer
  */
@@ -38,7 +38,7 @@ void create(void|int extra)
 object check_size(int version, int|void extra)
 {
   marginal_size = extra;
-  return (strlen(fragment) > (PACKET_MAX_SIZE + extra))
+  return (sizeof(fragment) > (PACKET_MAX_SIZE + extra))
     ? Alert(ALERT_fatal, ALERT_unexpected_message, version) : 0;
 }
 
@@ -52,16 +52,16 @@ object|string recv(string data, int version)
 {
 
 #ifdef SSL3_FRAGDEBUG
-  werror(" SSL.packet->recv: strlen(data)="+strlen(data)+"\n");
+  werror(" SSL.packet->recv: sizeof(data)="+sizeof(data)+"\n");
 #endif 
 
 
   buffer += data;
-  while (strlen(buffer) >= needed_chars)
+  while (sizeof(buffer) >= needed_chars)
   {
 #ifdef SSL3_DEBUG
 //    werror(sprintf("SSL.packet->recv: needed = %d, avail = %d\n",
-//		     needed_chars, strlen(buffer)));
+//		     needed_chars, sizeof(buffer)));
 #endif
     if (needed_chars == HEADER_SIZE)
     {
@@ -130,10 +130,10 @@ string send()
     werror(sprintf("SSL.packet->send: received version %d.%d packet\n",
 		   @ protocol_version));
 #endif
-  if (strlen(fragment) > (PACKET_MAX_SIZE + marginal_size))
+  if (sizeof(fragment) > (PACKET_MAX_SIZE + marginal_size))
     error( "SSL.packet->send: maximum packet size exceeded\n" );
 
   return sprintf("%c%c%c%2c%s", content_type, @protocol_version,
-		 strlen(fragment), fragment);
+		 sizeof(fragment), fragment);
 }
 
diff --git a/lib/modules/SSL.pmod/session.pike b/lib/modules/SSL.pmod/session.pike
index 61e87ee724bc254e2307550973e1fcb6e7f0154f..612d1ff4080d55043c95e9c98ad56b4a9cf0e580 100644
--- a/lib/modules/SSL.pmod/session.pike
+++ b/lib/modules/SSL.pmod/session.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: session.pike,v 1.20 2002/03/20 16:40:02 nilsson Exp $
+/* $Id: session.pike,v 1.21 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -85,7 +85,7 @@ string generate_key_block(string client_random, string server_random,array(int)
   string key = "";
 
   if(version[1]==0) {
-    while (strlen(key) < required)
+    while (sizeof(key) < required)
       {
 	i++;
 	string cookie = replace(allocate(i), 0, sprintf("%c", 64+i)) * "";
@@ -110,9 +110,9 @@ string generate_key_block(string client_random, string server_random,array(int)
 void printKey(string name , string key) {
 
   string res="";
-  res+=sprintf("%s:  len:%d type:%d \t\t",name,strlen(key),0); 
+  res+=sprintf("%s:  len:%d type:%d \t\t",name,sizeof(key),0); 
   /* return; */
-  for(int i=0;i<strlen(key);i++) {
+  for(int i=0;i<sizeof(key);i++) {
     int d=key[i];
     res+=sprintf("%02x ",d&0xff);
   }
@@ -166,7 +166,7 @@ array generate_keys(string client_random, string server_random,array(int) versio
 	string iv_block=prf("","IV block",client_random+server_random,2*cipher_spec->iv_size);
 	keys[4]=iv_block[..cipher_spec->iv_size-1];
 	keys[5]=iv_block[cipher_spec->iv_size..];
-	werror("strlen(keys[4]):"+strlen(keys[4])+"   strlen(keys[5]):"+strlen(keys[4])+"\n");
+	werror("sizeof(keys[4]):"+sizeof(keys[4])+"   sizeof(keys[5]):"+sizeof(keys[4])+"\n");
       }
       
     }
diff --git a/lib/modules/SSL.pmod/sslfile.pike b/lib/modules/SSL.pmod/sslfile.pike
index 0e271fc025356d20c07e8a1926f08cccbea7c8fd..2faff3cefc689b7f08a2542f63b7f995e92fe5d7 100644
--- a/lib/modules/SSL.pmod/sslfile.pike
+++ b/lib/modules/SSL.pmod/sslfile.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: sslfile.pike,v 1.50 2002/11/29 01:22:14 nilsson Exp $
+/* $Id: sslfile.pike,v 1.51 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -195,14 +195,14 @@ string|int read(string|int ...args) {
   string res="";
   int leftToRead=nbytes;
 
-  if(strlen(read_buffer)) {
-    if(leftToRead<=strlen(read_buffer)) {
+  if(sizeof(read_buffer)) {
+    if(leftToRead<=sizeof(read_buffer)) {
       res=read_buffer[..leftToRead-1];
       read_buffer=read_buffer[leftToRead..];
       return res;
     } else {
       res=read_buffer;
-      leftToRead-=strlen(read_buffer);
+      leftToRead-=sizeof(read_buffer);
       if(notall) {
 	return res;
       }
@@ -216,14 +216,14 @@ string|int read(string|int ...args) {
 
   while(stringp(data)) {
     res+=data;
-    leftToRead-=strlen(data);
+    leftToRead-=sizeof(data);
     if(leftToRead<=0) break;
     if(notall) return res;
     data=got_data(read_blocking_packet());
   }
 
   if(leftToRead<0) {
-    read_buffer=data[strlen(data)+leftToRead..];
+    read_buffer=data[sizeof(data)+leftToRead..];
     return res[0..args[0]-1];
   } else {
     read_buffer="";
@@ -250,10 +250,10 @@ int write(string|array(string) s)
   }
 
   int call_write = !sizeof (write_buffer);
-  int len = strlen(s);
+  int len = sizeof(s);
   object packet;
   int res;
-  while(strlen(s))
+  while(sizeof(s))
   {
     packet = Packet();
     packet->content_type = PACKET_application_data;
@@ -291,7 +291,7 @@ private int|string read_blocking_packet() {
     return -1;    
   }
   
-  if(strlen(header)!=5) {
+  if(sizeof(header)!=5) {
     return 1;
   }
   
@@ -305,7 +305,7 @@ private void write_blocking() {
 
   int res = queue_write();
 
-  while(strlen(write_buffer) && socket) {
+  while(sizeof(write_buffer) && socket) {
     
     int written = socket->write(write_buffer);
     if (written > 0) {
@@ -339,7 +339,7 @@ private void ssl_read_callback(mixed id, string s)
     }
     
     read_buffer += data;
-    if (!blocking && read_callback && strlen(read_buffer))
+    if (!blocking && read_callback && sizeof(read_buffer))
       {
 	string received = read_buffer;
 	read_buffer = "";
@@ -379,7 +379,7 @@ private void ssl_write_callback(mixed id)
 		 handshake_finished, blocking, write_callback));
 #endif
 
-  if (strlen(write_buffer))
+  if (sizeof(write_buffer))
     {
       int written = socket->write(write_buffer);
     if (written > 0)
@@ -393,7 +393,7 @@ private void ssl_write_callback(mixed id)
 #endif
 	  die(-1);
     }
-    if (strlen(write_buffer))
+    if (sizeof(write_buffer))
       return;
   }
 
@@ -406,7 +406,7 @@ private void ssl_write_callback(mixed id)
   werror(sprintf("SSL.sslport->ssl_write_callback: res = '%O'\n", res));
 #endif
   
-  if (strlen(write_buffer))
+  if (sizeof(write_buffer))
     return;
 
   if ( !res && connected && !blocking && write_callback)
@@ -421,7 +421,7 @@ private void ssl_write_callback(mixed id)
     }
     res = queue_write();
 
-    if (strlen(write_buffer))
+    if (sizeof(write_buffer))
       return;
   }
   if (socket)
@@ -469,7 +469,7 @@ void set_read_callback(function(mixed,string:void) r)
   werror("SSL.sslport: set_read_callback\n");
 #endif
   read_callback = r;
-  if (strlen(read_buffer)&& socket)
+  if (sizeof(read_buffer)&& socket)
     ssl_read_callback(socket->query_id(), "");
 
 }
@@ -523,7 +523,7 @@ void set_nonblocking(function ...args)
   blocking = 0;
   if (!socket) return;
   socket->set_nonblocking(ssl_read_callback,ssl_write_callback,ssl_close_callback);
-  if (strlen(read_buffer))
+  if (sizeof(read_buffer))
     ssl_read_callback(socket->query_id(), "");
 }
 
diff --git a/lib/modules/SSL.pmod/state.pike b/lib/modules/SSL.pmod/state.pike
index 237a06183f0edd0c4a422fed15b5d66d6339dc64..c01a2e66f803087c16566007b498899ad971102b 100644
--- a/lib/modules/SSL.pmod/state.pike
+++ b/lib/modules/SSL.pmod/state.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-/* $Id: state.pike,v 1.14 2002/03/20 16:40:02 nilsson Exp $
+/* $Id: state.pike,v 1.15 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -40,7 +40,7 @@ void create(object s)
 
 string tls_pad(string data,int blocksize  ) {
 //    werror("Blocksize:"+blocksize+"\n");
-  int plen=(blocksize-(strlen(data)+1)%blocksize)%blocksize;
+  int plen=(blocksize-(sizeof(data)+1)%blocksize)%blocksize;
   string res=data + sprintf("%c",plen)*plen+sprintf("%c",plen);
   return res;
 }
@@ -79,7 +79,7 @@ object decrypt_packet(object packet,int version)
 #ifdef SSL3_DEBUG_CRYPT
     werror("SSL.state: Trying decrypt..\n");
     //    werror("SSL.state: The encrypted packet is:"+sprintf("%O\n",packet->fragment));
-    werror("strlen of the encrypted packet is:"+strlen(packet->fragment)+"\n");
+    werror("sizeof of the encrypted packet is:"+sizeof(packet->fragment)+"\n");
 #endif
     msg=packet->fragment;
         
@@ -106,7 +106,7 @@ object decrypt_packet(object packet,int version)
 #ifdef SSL3_DEBUG_CRYPT
     werror("SSL.state: Trying mac verification...\n");
 #endif
-    int length = strlen(packet->fragment) - session->cipher_spec->hash_size;
+    int length = sizeof(packet->fragment) - session->cipher_spec->hash_size;
     string digest = packet->fragment[length ..];
     packet->fragment = packet->fragment[.. length - 1];
     
diff --git a/lib/modules/Sql.pmod/postgres.pike b/lib/modules/Sql.pmod/postgres.pike
index 227893e937722a05b8261641980df71f17d2d7a9..833dab9d4869eb6be248ebba7b6598d0a8fbb1aa 100644
--- a/lib/modules/Sql.pmod/postgres.pike
+++ b/lib/modules/Sql.pmod/postgres.pike
@@ -1,7 +1,7 @@
 /*
  * This is part of the Postgres module for Pike.
  *
- * $Id: postgres.pike,v 1.18 2002/11/27 15:40:34 mast Exp $
+ * $Id: postgres.pike,v 1.19 2003/01/20 17:44:01 nilsson Exp $
  *
  */
 
@@ -318,7 +318,7 @@ array(mapping(string:mixed)) list_fields (string table, void|string wild) {
 			"AND a.attrelid = c.oid AND a.atttypid = t.oid ORDER BY attnum");
 	while (row=res->fetch_row()) {
 		mapping m;
-    if (wild && strlen(wild) && !glob(wild,row[1]))
+    if (wild && sizeof(wild) && !glob(wild,row[1]))
       continue;
 		row=row[1..];
 		row[4]=mkbool(row[4]);
diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
index 616cc77a77bdfd2d4bf2c4242ba640d2df8375bf..3eeb67b9c429bf37a7e634c512482d4aac342e1f 100644
--- a/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
+++ b/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
@@ -58,14 +58,14 @@ class asn1_object
       if (len < 0x80)
 	return sprintf("%c", len);
       string s = Gmp.mpz(len)->digits(256);
-      if (strlen(s) >= 0x80)
+      if (sizeof(s) >= 0x80)
 	error( "asn1.encode.asn1_object->encode_length: Max length exceeded.\n" );
-      return sprintf("%c%s", strlen(s) | 0x80, s);
+      return sprintf("%c%s", sizeof(s) | 0x80, s);
     }
   
   string build_der(string contents)
     {
-      string data = encode_tag() + encode_length(strlen(contents)) + contents;
+      string data = encode_tag() + encode_length(sizeof(contents)) + contents;
       // WERROR(sprintf("build_der: '%s'\n", Crypto.string_to_hex(data)));
       WERROR(sprintf("build_der: '%s'\n", data));
       return data;
@@ -138,7 +138,7 @@ class asn1_bitstring
       {
 	value = value[..(len + 7)/8];
 	unused = (- len) % 8;
-	value = sprintf("%s%c", value[..strlen(value)-2], value[-1]
+	value = sprintf("%s%c", value[..sizeof(value)-2], value[-1]
 		    & ({ 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80 })[unused]);
       } else {
 	unused = 0;
@@ -221,9 +221,9 @@ class asn1_set
     {
       for(int i = 0;; i++)
       {
-	if (i == strlen(r))
-	  return (i = strlen(s)) ? 0 : 1;
-	if (i == strlen(s))
+	if (i == sizeof(r))
+	  return (i = sizeof(s)) ? 0 : 1;
+	if (i == sizeof(s))
 	  return -1;
 	if (r[i] < s[i])
 	  return 1;
diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
index 0b8c4a5767089bd4136c441429f7e1b078339374..4ce77f217f4ee6f1a523c476b95d5c0e3d7d4338 100644
--- a/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
+++ b/lib/modules/Standards.pmod/ASN1.pmod/Types.pmod
@@ -1,5 +1,5 @@
 /*
- * $Id: Types.pmod,v 1.20 2002/12/05 18:08:05 bill Exp $
+ * $Id: Types.pmod,v 1.21 2003/01/20 17:44:01 nilsson Exp $
  *
  * Encodes various asn.1 objects according to the Distinguished
  * Encoding Rules (DER) */
@@ -126,14 +126,14 @@ class asn1_object
       if (len < 0x80)
 	return sprintf("%c", len);
       string s = Gmp.mpz(len)->digits(256);
-      if (strlen(s) >= 0x80)
+      if (sizeof(s) >= 0x80)
 	error( "asn1.encode.asn1_object->encode_length: Max length exceeded.\n" );
-      return sprintf("%c%s", strlen(s) | 0x80, s);
+      return sprintf("%c%s", sizeof(s) | 0x80, s);
     }
   
   string build_der(string contents)
     {
-      string data = encode_tag() + encode_length(strlen(contents)) + contents;
+      string data = encode_tag() + encode_length(sizeof(contents)) + contents;
       // WERROR(sprintf("build_der: '%s'\n", Crypto.string_to_hex(data)));
       WERROR(sprintf("build_der: %O\n", data));
       return data;
@@ -274,7 +274,7 @@ class asn1_boolean
   string der_encode() { return build_der(value ? "\377" : "\0"); }
   object decode_primitive(string contents)
     {
-      if (strlen(contents) != 1)
+      if (sizeof(contents) != 1)
       {
 	WERROR("asn1_boolean->decode_primitive: Bad length.\n");
 	return 0;
@@ -330,7 +330,7 @@ class asn1_integer
       record_der_contents(contents);
       value = Gmp.mpz(contents, 256);
       if (contents[0] & 0x80)  /* Negative */
-	value -= pow(256, strlen(contents));
+	value -= pow(256, sizeof(contents));
       return this_object();
     }
   
@@ -376,7 +376,7 @@ class asn1_bit_string
       {
 	value = value[..(len + 7)/8];
 	unused = (- len) % 8;
-	value = sprintf("%s%c", value[..strlen(value)-2], value[-1]
+	value = sprintf("%s%c", value[..sizeof(value)-2], value[-1]
 		    & ({ 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80 })[unused]);
       } else {
 	unused = 0;
@@ -476,7 +476,7 @@ class asn1_identifier
       else
 	id = ({ 2, contents[0] - 80 });
       int index = 1;
-      while(index < strlen(contents))
+      while(index < sizeof(contents))
       {
 	int element = 0;
 	do
@@ -563,9 +563,9 @@ class asn1_set
     {
       for(int i = 0;; i++)
       {
-	if (i == strlen(r))
-	  return (i = strlen(s)) ? 0 : 1;
-	if (i == strlen(s))
+	if (i == sizeof(r))
+	  return (i = sizeof(s)) ? 0 : 1;
+	if (i == sizeof(s))
 	  return -1;
 	if (r[i] < s[i])
 	  return 1;
diff --git a/lib/modules/Standards.pmod/EXIF.pmod b/lib/modules/Standards.pmod/EXIF.pmod
index 614d45c5c85716dfae8644ec0fc759b43000f897..cf1a13ef43dbbce3d1a0af31f157ed6a0c3c4434 100644
--- a/lib/modules/Standards.pmod/EXIF.pmod
+++ b/lib/modules/Standards.pmod/EXIF.pmod
@@ -3,7 +3,7 @@
 //! This module implements EXIF (Exchangeable image file format for
 //! Digital Still Cameras) 2.2 parsing.
 
-// $Id: EXIF.pmod,v 1.15 2002/11/15 06:16:15 nilsson Exp $
+// $Id: EXIF.pmod,v 1.16 2003/01/20 17:44:01 nilsson Exp $
 //  Johan Sch�n <js@roxen.com>, July 2001.
 //  Based on Exiftool by Robert F. Tobler <rft@cg.tuwien.ac.at>.
 //
@@ -968,7 +968,7 @@ mapping get_properties(Stdio.File file)
 
   string skip=file->read(12);  // skip the jpeg header
 
-  if (skip[strlen(skip)-6..]!="Exif\0\0")
+  if (skip[sizeof(skip)-6..]!="Exif\0\0")
   {
      skip=file->read(100);
      int z=search(skip,"Exif\0\0");
diff --git a/lib/modules/Standards.pmod/ID3.pmod b/lib/modules/Standards.pmod/ID3.pmod
index 437b3fbeb296d82f28e03706e47dd7d415334d3e..b52be75e6aa0d27d7f272f1e09608e84dcf14cee 100644
--- a/lib/modules/Standards.pmod/ID3.pmod
+++ b/lib/modules/Standards.pmod/ID3.pmod
@@ -1,6 +1,6 @@
 // ID3.pmod
 //
-//  $Id: ID3.pmod,v 1.7 2002/11/26 15:46:06 nilsson Exp $
+//  $Id: ID3.pmod,v 1.8 2003/01/20 17:44:01 nilsson Exp $
 //
 
 //! ID3 decoder/encoder.
@@ -733,7 +733,7 @@ class Framev1 {
   void create(string buffer, string name) {
     id = name;
     data = FrameDatav1(buffer, name);
-    size = strlen(buffer);
+    size = sizeof(buffer);
   }
 
 }
diff --git a/lib/modules/Standards.pmod/PKCS.pmod/PFX.pmod b/lib/modules/Standards.pmod/PKCS.pmod/PFX.pmod
index 8bff6ab34f0069285514965766774a5e516e7cb3..d8721e01f59177dee923ba49d8d2ef2b94695ada 100644
--- a/lib/modules/Standards.pmod/PKCS.pmod/PFX.pmod
+++ b/lib/modules/Standards.pmod/PKCS.pmod/PFX.pmod
@@ -327,7 +327,7 @@ class PFX
       for(int i; i<count; i++)
 	A = Crypto.sha()->update(A)->digest;
 
-      if (strlen(A)<needed)
+      if (sizeof(A)<needed)
 	error("PFX: Step 6c) of section 6.1 not implemented.\n");
 
       return A[..ndeded-1];
diff --git a/lib/modules/Standards.pmod/PKCS.pmod/Signature.pmod b/lib/modules/Standards.pmod/PKCS.pmod/Signature.pmod
index 08b3475c23d86a028bc02329a8b85fc58332f056..ebd8c4e895d12565d9a8f3bcf9c0fbbb7e96d46a 100644
--- a/lib/modules/Standards.pmod/PKCS.pmod/Signature.pmod
+++ b/lib/modules/Standards.pmod/PKCS.pmod/Signature.pmod
@@ -15,6 +15,6 @@ string build_digestinfo(string msg, object hash)
   string id = hash->identifier();
 
   return sprintf("%c%c%c%c%c%c%s%c%c%c%c%s",
-		 0x30, strlen(id) + strlen(d) + 8, 0x30, strlen(id) + 4,
-		 0x06, strlen(id), id, 0x05, 0x00, 0x04, strlen(d), d);
+		 0x30, sizeof(id) + sizeof(d) + 8, 0x30, sizeof(id) + 4,
+		 0x06, sizeof(id), id, 0x05, 0x00, 0x04, sizeof(d), d);
 }
diff --git a/lib/modules/Stdio.pmod/Readline.pike b/lib/modules/Stdio.pmod/Readline.pike
index c2dc084f5f601e8c77dcd8b68acb6e3ee72d8e70..c7eb96e538f90a92323c3108c0dca3d487c08ca1 100644
--- a/lib/modules/Stdio.pmod/Readline.pike
+++ b/lib/modules/Stdio.pmod/Readline.pike
@@ -1,4 +1,4 @@
-// $Id: Readline.pike,v 1.43 2002/11/26 15:06:46 jhs Exp $
+// $Id: Readline.pike,v 1.44 2003/01/20 17:44:01 nilsson Exp $
 #pike __REAL_VERSION__
 
 class OutputController
@@ -165,10 +165,10 @@ class OutputController
 		  "~P","~Q","~R","~S","~T","~U","~V","~W",
 		  "~X","~Y","~Z","~[","~\\","~]","~^","~_",
 		  }));
-    return hide ? "*"*strlen(s) : s;
+    return hide ? "*"*sizeof(s) : s;
 #else
 
-  for(int i=0; i<strlen(s); i++)
+  for(int i=0; i<sizeof(s); i++)
       if(s[i]<' ')
 	s = s[..i-1]+sprintf("^%c", s[i]+'@')+s[i+1..];
       else if(s[i]==127)
@@ -182,7 +182,7 @@ class OutputController
 
   static int width(string s)
   {
-    return strlen(s);
+    return sizeof(s);
   }
 
   static int escapified_width(string s)
@@ -212,7 +212,7 @@ class OutputController
 	{
 	  outfd->write(line);
 	}else{
-	  l=strlen(line)-spos;
+	  l=sizeof(line)-spos;
 	  outfd->write(line[..l-2]);
 	}
 	s=s[l..];
@@ -764,9 +764,9 @@ class DefaultEditKeys
   void delete_char_or_eof()
   {
     int p = _readline->getcursorpos();
-    if (p<strlen(_readline->gettext()))
+    if (p<sizeof(_readline->gettext()))
       _readline->delete(p,p+1);
-    else if(!strlen(_readline->gettext()))
+    else if(!sizeof(_readline->gettext()))
       _readline->eof();
   }
 
@@ -787,13 +787,13 @@ class DefaultEditKeys
 
   void end_of_line()
   {
-    _readline->setcursorpos(strlen(_readline->gettext()));
+    _readline->setcursorpos(sizeof(_readline->gettext()));
   }
 
   void transpose_chars()
   {
     int p = _readline->getcursorpos();
-    if (p<0 || p>=strlen(_readline->gettext()))
+    if (p<0 || p>=sizeof(_readline->gettext()))
       return;
     string c = _readline->gettext()[p-1..p];
     _readline->delete(p-1, p+1);
@@ -805,9 +805,9 @@ class DefaultEditKeys
     int p = _readline->getcursorpos();
     int ep;
     string line = _readline->gettext();
-    while(word_break_chars[ line[p..p] ] && p < strlen(line))
+    while(word_break_chars[ line[p..p] ] && p < sizeof(line))
       p++;
-    if(p >= strlen(line)) {
+    if(p >= sizeof(line)) {
       _readline->setcursorpos(p);
       return ({ 0, 0 });
     }
@@ -853,7 +853,7 @@ class DefaultEditKeys
   {
     int p = _readline->getcursorpos()-1;
     string line = _readline->gettext();
-    if(p >= strlen(line)) p = strlen(line) - 1;
+    if(p >= sizeof(line)) p = sizeof(line) - 1;
     while(word_break_chars[ line[p..p] ] && p >= 0)
       // find first "non break char"
       p--;
@@ -891,12 +891,12 @@ class DefaultEditKeys
 
   void kill_line()
   {
-    _readline->kill(_readline->getcursorpos(), strlen(_readline->gettext()));
+    _readline->kill(_readline->getcursorpos(), sizeof(_readline->gettext()));
   }
 
   void kill_whole_line()
   {
-    _readline->kill(0, strlen(_readline->gettext()));
+    _readline->kill(0, sizeof(_readline->gettext()));
   }
 
   void yank()
@@ -1164,8 +1164,8 @@ int setcursorpos(int p)
 {
   if (p<0)
     p = 0;
-  if (p>strlen(text))
-    p = strlen(text);
+  if (p>sizeof(text))
+    p = sizeof(text);
   if (p<cursorpos)
   {
     if(!input_controller->dumb)
@@ -1187,8 +1187,8 @@ int setmark(int p)
 {
   if (p<0)
     p = 0;
-  if (p>strlen(text))
-    p = strlen(text);
+  if (p>sizeof(text))
+    p = sizeof(text);
   mark=p;
 }
 
@@ -1205,21 +1205,21 @@ void insert(string s, int p)
 {
   if (p<0)
     p = 0;
-  if (p>strlen(text))
-    p = strlen(text);
+  if (p>sizeof(text))
+    p = sizeof(text);
   setcursorpos(p);
   if(!input_controller->dumb)
     output_controller->write(s,0,hide);
-  cursorpos += strlen(s);
+  cursorpos += sizeof(s);
   string rest = text[p..];
-  if (strlen(rest) && !input_controller->dumb)
+  if (sizeof(rest) && !input_controller->dumb)
   {
     output_controller->write(rest,0,hide);
     output_controller->move_backward(rest);
   }
   text = text[..p-1]+s+rest;
 
-  if (mark>p) mark+=strlen(s);
+  if (mark>p) mark+=sizeof(s);
 }
 
 //! @fixme
@@ -1228,8 +1228,8 @@ void delete(int p1, int p2)
 {
   if (p1<0)
     p1 = 0;
-  if (p2>strlen(text))
-    p2 = strlen(text);
+  if (p2>sizeof(text))
+    p2 = sizeof(text);
   setcursorpos(p1);
   if (p1>=p2)
     return;
@@ -1242,7 +1242,7 @@ void delete(int p1, int p2)
   if (mark>p2) mark-=(p2-p1);
   else if (mark>p1) mark=p1;
 
-  cursorpos = strlen(text);
+  cursorpos = sizeof(text);
   setcursorpos(p1);
 }
 
@@ -1272,8 +1272,8 @@ void kill(int p1, int p2)
 {
   if (p1<0)
     p1 = 0;
-  if (p2>strlen(text))
-    p2 = strlen(text);
+  if (p2>sizeof(text))
+    p2 = sizeof(text);
   if (p1>=p2)
     return;
   add_to_kill_ring(text[p1..p2-1]);
@@ -1302,7 +1302,7 @@ void history(int n)
 {
   if(historyobj) {
     string h = historyobj->history(n, text);
-    delete(0, strlen(text)+strlen(prompt));
+    delete(0, sizeof(text)+sizeof(prompt));
     insert(h, 0);
   }
 }
@@ -1386,7 +1386,7 @@ void eof()
 void message(string msg)
 {
   int p = cursorpos;
-  setcursorpos(strlen(text));
+  setcursorpos(sizeof(text));
   output_controller->newline();
   foreach(msg/"\n", string l) {
     output_controller->write(l);
@@ -1414,7 +1414,7 @@ void write(string msg,void|int word_wrap)
   }
   output_controller->write(tmp[-1],word_wrap);
 
-  cursorpos=strlen(text);
+  cursorpos=sizeof(text);
   redisplay(0, 1);
   setcursorpos(p);
 }
@@ -1468,10 +1468,10 @@ void set_blocking()
 //!   Document this function
 string edit(string data, string|void local_prompt, array(string)|void attrs)
 {
-  if(data && strlen(data) && input_controller->dumb)
+  if(data && sizeof(data) && input_controller->dumb)
   {
     string ret=edit("", (local_prompt || get_prompt()) +"["+data+"] ", attrs);
-    return (!ret || !strlen(ret))?data:ret;
+    return (!ret || !sizeof(ret))?data:ret;
   }
   string old_prompt;
   array(string) old_attrs;
diff --git a/lib/modules/Stdio.pmod/Terminfo.pmod b/lib/modules/Stdio.pmod/Terminfo.pmod
index 95f33f89b8630850dc46f2fd8d983c3ca3969888..ec0c1888a036110b85d9e3d3d1f6c51166aaa987 100644
--- a/lib/modules/Stdio.pmod/Terminfo.pmod
+++ b/lib/modules/Stdio.pmod/Terminfo.pmod
@@ -1,4 +1,4 @@
-// $Id: Terminfo.pmod,v 1.13 2002/10/25 15:27:04 jonasw Exp $
+// $Id: Terminfo.pmod,v 1.14 2003/01/20 17:44:01 nilsson Exp $
 #pike __REAL_VERSION__
 
 
@@ -369,12 +369,12 @@ class Terminfo {
     {
       string stroffs = swab(f->read(nstr*2));
       string strbuf = f->read(sstr);
-      if(strlen(strbuf)==sstr-1 && !bug_compat && (nbool&1)) {
+      if(sizeof(strbuf)==sstr-1 && !bug_compat && (nbool&1)) {
 	// Ugh.  Someone didn't pad their bool array properly (one suspects).
 	f->seek(0);
 	return load_cap(f, 1);
       }
-      if(strlen(strbuf)!=sstr)
+      if(sizeof(strbuf)!=sstr)
 	return 0;
       array(string) strarr = Array.map(array_sscanf(stroffs, "%2c"*nstr),
 				       lambda(int offs, string buf) {
@@ -421,7 +421,7 @@ class TermcapDB {
   {
     if (!filename) {
       string tce = [string]getenv("TERMCAP");
-      if (tce && strlen(tce) && tce[0]=='/')
+      if (tce && sizeof(tce) && tce[0]=='/')
 	filename = tce;
       else
 	filename = "/etc/termcap";
@@ -710,7 +710,7 @@ class TerminfoDB {
   {
     object(Terminfo) ti;
 
-    if (!strlen(term))
+    if (!sizeof(term))
       return 0;
     LOCK;
     if (!(ti = cache[term]))
diff --git a/lib/modules/Stdio.pmod/module.pmod b/lib/modules/Stdio.pmod/module.pmod
index a9060b65964043a3b63328e1840a347ad9304a90..cb8de8464e80db8700b9577218ae186b1e6762d3 100644
--- a/lib/modules/Stdio.pmod/module.pmod
+++ b/lib/modules/Stdio.pmod/module.pmod
@@ -1,4 +1,4 @@
-// $Id: module.pmod,v 1.162 2002/12/12 13:14:15 jhs Exp $
+// $Id: module.pmod,v 1.163 2003/01/20 17:44:01 nilsson Exp $
 #pike __REAL_VERSION__
 
 inherit files;
@@ -690,7 +690,7 @@ class File
     string s=::read(8192,1);
     if(s)
     {
-      if(strlen(s))
+      if(sizeof(s))
       {
         ___read_callback(___id, s);
         return;
@@ -750,7 +750,7 @@ class File
   static void __stdio_read_oob_callback()
   {
     string s=::read_oob(8192,1);
-    if(s && strlen(s))
+    if(s && sizeof(s))
     {
       ___read_oob_callback(___id, s);
     }else{
@@ -1187,7 +1187,7 @@ class FILE
     string s = file::read(BUFSIZE,1);
     if( input_conversion )
       s = input_conversion( s );
-    if(s && strlen(s))
+    if(s && sizeof(s))
       b+=s;
     else
       s = 0;
@@ -1307,7 +1307,7 @@ class FILE
     }
 
     array res=b[bpos..]/"\n";
-    bpos=strlen(b)-strlen(res[-1]);
+    bpos=sizeof(b)-sizeof(res[-1]);
     res=res[..sizeof(res)-2];
 
     while (sizeof(res)<n)
@@ -1318,12 +1318,12 @@ class FILE
 	  else return res;
 
        array a=b[bpos..]/"\n";
-       bpos=strlen(b)-strlen(a[-1]);
+       bpos=sizeof(b)-sizeof(a[-1]);
        res+=a[..sizeof(a)-2];
     }
     if (sizeof(res)>n)
     {
-      bpos-=`+(@map(res[n..],strlen))+(sizeof(res)-n);
+      bpos-=`+(@map(res[n..],sizeof))+(sizeof(res)-n);
       return res[..n-1];
     }
     return res;
@@ -1432,13 +1432,13 @@ class FILE
     }
 
     /* Optimization - Hubbe */
-    if(!strlen(b) && bytes > BUFSIZE) {
+    if(!sizeof(b) && bytes > BUFSIZE) {
       if (input_conversion)
 	return input_conversion(::read(bytes, now));
       return ::read(bytes, now);
     }
 
-    while(strlen(b) - bpos < bytes)
+    while(sizeof(b) - bpos < bytes)
       if(!get_data()) {
 	// EOF.
 	string res = b[bpos..];
@@ -1475,7 +1475,7 @@ class FILE
   int getchar()
   {
     cached_lines = ({});lp=0;
-    if(strlen(b) - bpos < 1)
+    if(sizeof(b) - bpos < 1)
       if(!get_data())
 	return -1;
 
@@ -1853,8 +1853,8 @@ int cp(string from, string to)
   {
     data=r(BLOCK);
     if(!data) return 0;
-    if(w(data)!=strlen(data)) return 0;
-  }while(strlen(data) == BLOCK);
+    if(w(data)!=sizeof(data)) return 0;
+  }while(sizeof(data) == BLOCK);
 
   f->close();
   t->close();
diff --git a/lib/modules/String.pmod/Elite.pmod b/lib/modules/String.pmod/Elite.pmod
index 729903481c037d8e90a9390c78de1700dfbe7cad..cd567a2c9a8d9dd755f8aa92813512695b81f2fa 100644
--- a/lib/modules/String.pmod/Elite.pmod
+++ b/lib/modules/String.pmod/Elite.pmod
@@ -1,4 +1,4 @@
-// $Id: Elite.pmod,v 1.2 2002/03/19 23:58:06 nilsson Exp $
+// $Id: Elite.pmod,v 1.3 2003/01/20 17:44:01 nilsson Exp $
 
 #pike __REAL_VERSION__
 
@@ -259,7 +259,7 @@ string elite_string(string in, void|int(0..100) leetp, void|int(0..1) eightbit)
     {
       if (arrayp(dest)) dest=dest[random(sizeof(dest))];
       res+=in[..i-1]+dest;
-      in=in[i+strlen(what)..];
+      in=in[i+sizeof(what)..];
     }
     in=res+in;
   }
@@ -280,7 +280,7 @@ string elite_string(string in, void|int(0..100) leetp, void|int(0..1) eightbit)
       else
 	r=what;
       res+=in[..i-1]+r;
-      in=in[i+strlen(what)..];
+      in=in[i+sizeof(what)..];
     }
     in=res+in;
   }
diff --git a/lib/modules/String.pmod/module.pmod b/lib/modules/String.pmod/module.pmod
index a7bd6d7b9c1c9c8ff352b9aee0ab3fa26c3c50ea..168ce1e7cb00793b67430151f6ade0e7ae1c5c94 100644
--- a/lib/modules/String.pmod/module.pmod
+++ b/lib/modules/String.pmod/module.pmod
@@ -100,7 +100,7 @@ static int low_fuzzymatch(string str1, string str2)
   int offset, length;
   int fuzz;
   fuzz = 0;
-  while(strlen(str1) && strlen(str2))
+  while(sizeof(str1) && sizeof(str2))
   {
     /* Now we will look for the first character of tmp1 in tmp2 */
     if((offset = search(str2, str1[0..0])) != -1)
@@ -112,7 +112,7 @@ static int low_fuzzymatch(string str1, string str2)
       while(1)
       {
         //*(++tmp1)==*(++tmp2) && *tmp1
-        if(length < strlen(tmp1) && length < strlen(tmp2) &&
+        if(length < sizeof(tmp1) && length < sizeof(tmp2) &&
            tmp1[length] == tmp2[length])
           length++;
         else
@@ -126,7 +126,7 @@ static int low_fuzzymatch(string str1, string str2)
         continue;
       }
     }
-    if(strlen(str1))
+    if(sizeof(str1))
       str1 = str1[1..];
   }
   return fuzz;
@@ -148,7 +148,7 @@ int(0..100) fuzzymatch(string a, string b)
 
   fuzz = low_fuzzymatch(a, b);
   fuzz += low_fuzzymatch(b, a);
-  fuzz = fuzz*100/(strlen(a)+strlen(b));
+  fuzz = fuzz*100/(sizeof(a)+sizeof(b));
 
   return [int(0..100)]fuzz;
 }
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/CExtractor.pmod b/lib/modules/Tools.pmod/AutoDoc.pmod/CExtractor.pmod
index eb4de8d8128e8029dcb53ac93ab8c2625a6f46ec..64a290071382bc92d5bc70bb99de0710e39894f9 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/CExtractor.pmod
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/CExtractor.pmod
@@ -43,7 +43,7 @@ static private class Extractor {
     foreach(ctokens, string ctoken) {
       if (has_prefix(ctoken, "/*!")) {
         int firstLine = line;
-        array(string) lines = ctoken[1 .. strlen(ctoken) - 3]/"\n";
+        array(string) lines = ctoken[1 .. sizeof(ctoken) - 3]/"\n";
         //    werror("%O\n", lines);
         int lastLine = firstLine + sizeof(lines) - 1;
         lines = map(lines, stripDocMarker);
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/DocParser.pmod b/lib/modules/Tools.pmod/AutoDoc.pmod/DocParser.pmod
index f1ae5250c1bf6d7f31002caaaf6098d479eedd8c..4f8549ecfd4e53fd257ed9a69f34b34426ec0236 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/DocParser.pmod
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/DocParser.pmod
@@ -148,7 +148,7 @@ multiset(string) allowOnlyOne =
 static int getKeywordType(string keyword) {
   if (keywordtype[keyword])
     return keywordtype[keyword];
-  if (strlen(keyword) > 3 && keyword[0..2] == "end")
+  if (sizeof(keyword) > 3 && keyword[0..2] == "end")
     return ENDKEYWORD;
   return ERRORKEYWORD;
 }
@@ -172,7 +172,7 @@ static int isKeywordChar(int char) {
 static array(string) extractKeyword(string line) {
   line += "\0";
   int i = 0;
-  while (i < strlen(line) && isSpaceChar(line[i]))
+  while (i < sizeof(line) && isSpaceChar(line[i]))
     ++i;
   if (line[i++] != '@')
     return 0;
@@ -183,11 +183,11 @@ static array(string) extractKeyword(string line) {
     return 0;
   string keyword = line[keywordstart .. i - 1];
   //  if (getKeywordType(keyword) == METAKEYWORD)
-  return ({ keyword, line[i .. strlen(line) - 2] });  // skippa "\0" ...
+  return ({ keyword, line[i .. sizeof(line) - 2] });  // skippa "\0" ...
 }
 
 static int allSpaces(string s) {
-  for (int i = strlen(s) - 1; i >= 0; --i)
+  for (int i = sizeof(s) - 1; i >= 0; --i)
     if (s[i] != ' ' && s[i] != '\t')
       return 0;
   return 1;
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/MirarDocParser.pike b/lib/modules/Tools.pmod/AutoDoc.pmod/MirarDocParser.pike
index 7f1c87e012382c345049583ea218c71cabcdb414..84c83195d1976c8acfd362acfe1583d63b10e078 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/MirarDocParser.pike
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/MirarDocParser.pike
@@ -1,4 +1,4 @@
-/* $Id: MirarDocParser.pike,v 1.18 2002/12/19 15:20:00 grubba Exp $ */
+/* $Id: MirarDocParser.pike,v 1.19 2003/01/20 17:44:01 nilsson Exp $ */
 
 /* MirarDoc documentation extractor.
  */
@@ -66,7 +66,7 @@ string stripws(string s)
     if (s!="")
     {
       sscanf(s,"%[ ]%s",string a,string b);
-      if (b!="") m=min(strlen(a),m);
+      if (b!="") m=min(sizeof(a),m);
     }
 
   return map(lines,lambda(string s) { return s[m..]; })*"\n";
@@ -195,7 +195,7 @@ string getridoftabs(string s)
    while (sscanf(s,"%s\t%s",string a,s)==2)
    {
       res+=a;
-      res+="         "[(strlen(res)%8)..7];
+      res+="         "[(sizeof(res)%8)..7];
    }
    return res+s;
 }
@@ -217,13 +217,13 @@ string htmlify(string s)
 string make_nice_reference(string what,string prefix,string stuff)
 {
    string q;
-   if (what==prefix[strlen(prefix)-strlen(what)-2..strlen(prefix)-3])
+   if (what==prefix[sizeof(prefix)-sizeof(what)-2..sizeof(prefix)-3])
    {
-      q=prefix[0..strlen(prefix)-3];
+      q=prefix[0..sizeof(prefix)-3];
    }
-   else if (what==prefix[strlen(prefix)-strlen(what)-1..strlen(prefix)-2])
+   else if (what==prefix[sizeof(prefix)-sizeof(what)-1..sizeof(prefix)-2])
    {
-      q=prefix[0..strlen(prefix)-2];
+      q=prefix[0..sizeof(prefix)-2];
    }
    else if (search(what,".")==-1 &&
 	    search(what,"->")==-1 &&
@@ -287,7 +287,7 @@ string doctype(string type,void|string indent)
    {
       int i;
       int q=1;
-      for (i=0; i<strlen(in); i++)
+      for (i=0; i<sizeof(in); i++)
 	 switch (in[i])
 	 {
 	    case '(': q++; break;
@@ -298,7 +298,7 @@ string doctype(string type,void|string indent)
    string combine_or(string a,string b)
    {
      b = String.trim_all_whites(b);
-     if (b[..3]=="<or>") b=b[4..strlen(b)-6];
+     if (b[..3]=="<or>") b=b[4..sizeof(b)-6];
      return "<or>"+a+b+"</or>";
    };
    array(string) paramlist(string in,string indent)
@@ -306,7 +306,7 @@ string doctype(string type,void|string indent)
       int i;
       int q=0;
       array res=({});
-      for (i=0; i<strlen(in); i++)
+      for (i=0; i<sizeof(in); i++)
 	 switch (in[i])
 	 {
 	    case '(': q++; break;
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeExtractor.pmod b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeExtractor.pmod
index c76cb1dfd7981a766d2bb7455308adf7f8991f91..ad688903ee5d34f261621d9b3a062c11e07e6150 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeExtractor.pmod
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeExtractor.pmod
@@ -37,7 +37,7 @@ static private class Extractor {
       int pos = positions[i];
       int ignoreline = 0;
       if (has_prefix(s, DOC_COMMENT)) {
-        s = String.trim_all_whites(s[strlen(DOC_COMMENT) .. ]);
+        s = String.trim_all_whites(s[sizeof(DOC_COMMENT) .. ]);
         ignoreline = 1;
         if (s == "@ignore")
           ignores = ({ pos }) + ignores;
@@ -67,7 +67,7 @@ static private class Extractor {
   }
 
   static int isDocComment(string s) {
-    return (strlen(s) >= 3 && s[0..2] == DOC_COMMENT);
+    return (sizeof(s) >= 3 && s[0..2] == DOC_COMMENT);
   }
 
   static string stripDocMarker(string s) {
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
index 911d1143c0746790fbbb82315c0dd016a2aca3b8..11a323eb816c5cf747a75fccbdbc4e2b71bb2d6e 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/PikeParser.pike
@@ -190,7 +190,7 @@ string eatIdentifier(void|int allowScopePrefix) {
   string colons = peekToken() == "::" ? readToken() : "";
   //  werror("scope == %O ,colons == %O\n", scope, colons);
 
-  if (strlen(scope + colons) && !allowScopePrefix)
+  if (sizeof(scope + colons) && !allowScopePrefix)
     parseError("scope prefix not allowed");
   string s = peekToken();
   if (!isIdent(s))
@@ -335,7 +335,7 @@ string|void parseIdents() {
 
 string parseProgramName() {
   string s = peekToken();
-  if (strlen(s) && s[0] == '"')
+  if (sizeof(s) && s[0] == '"')
     return (readToken(), s);
   s = parseIdents();
   if (!s)
@@ -663,7 +663,7 @@ static private array(string) special(array(string) in) {
     int c = String.count(s, "\n");
     if (c)
       ret += ({ "\n" }) * c;
-    else if (strlen(replace(s, ({" ", "\t", "\r" }), ({ "","","" }) )))
+    else if (sizeof(replace(s, ({" ", "\t", "\r" }), ({ "","","" }) )))
       ret += ({ s });
   }
   return ret;
@@ -682,10 +682,10 @@ array(array(string)|array(int)) tokenize(string s, string filename, int line) {
     line += sizeof(s / "\n") - 1;
 
     // remove preprocessor directives:
-    if (strlen(s) > 1 && s[0..0] == "#")
+    if (sizeof(s) > 1 && s[0..0] == "#")
       continue;
     // remove non-doc comments
-    if (strlen(s) >= 2 &&
+    if (sizeof(s) >= 2 &&
         (s[0..1] == "/*" || s[0..1] == "//") &&
         !isDocComment(s))
       continue;
diff --git a/lib/modules/Tools.pmod/AutoDoc.pmod/ProcessXML.pmod b/lib/modules/Tools.pmod/AutoDoc.pmod/ProcessXML.pmod
index ff925d169a91b1ed237f831a5c65307eeb1fe517..0c36add2b88f284023d40a952e137a9392ba8dbd 100644
--- a/lib/modules/Tools.pmod/AutoDoc.pmod/ProcessXML.pmod
+++ b/lib/modules/Tools.pmod/AutoDoc.pmod/ProcessXML.pmod
@@ -180,7 +180,7 @@ string extractXML(string filename, int|void pikeMode, string|void type,
   //    array(string) a = Parser.Pike.split(contents);
   //    // check if it _really_ is a C-style doc comment ...
   //    foreach (a, string s)
-  //      if (strlen(s) >= strlen("/*!*/") && s[0..2] == "/*!")
+  //      if (sizeof(s) >= sizeof("/*!*/") && s[0..2] == "/*!")
   //	styleC = 1;
   //      else if (isDocComment(s))
   //	stylePike = 1;
diff --git a/lib/modules/Tools.pmod/PEM.pmod b/lib/modules/Tools.pmod/PEM.pmod
index ca3a05c3f8ba649ca200addd9231e2b1e58e8878..fce7a3e36330a79efa42d5441c8666bc0d4d8814 100644
--- a/lib/modules/Tools.pmod/PEM.pmod
+++ b/lib/modules/Tools.pmod/PEM.pmod
@@ -49,7 +49,7 @@ class encapsulated_message {
     /* Make all lines terminated with \r (but the last, which is
      * either empty or a "line" that was not terminated). */
     for(int i=0; i < sizeof(lines)-1; i++)
-      if (!strlen(lines[i]) || (lines[i][-1] != '\r'))
+      if (!sizeof(lines[i]) || (lines[i][-1] != '\r'))
 	lines[i] += "\r";
     return lines * "\n";
   }
diff --git a/lib/modules/Tools.pmod/Shoot.pmod/module.pmod b/lib/modules/Tools.pmod/Shoot.pmod/module.pmod
index 81bdd5857b68a9c46d13ac2e01dac4c77427455f..3f3281d01ff3e696aba5891887c6c108518e8522 100644
--- a/lib/modules/Tools.pmod/Shoot.pmod/module.pmod
+++ b/lib/modules/Tools.pmod/Shoot.pmod/module.pmod
@@ -65,7 +65,7 @@ class ExecTest(string id,Test test)
       int testntot=0;
 
       if (!silent) 
-	 write(test->name+"..........................."[strlen(test->name)..]);
+	 write(test->name+"..........................."[sizeof(test->name)..]);
 
       for (;;)
       {
diff --git a/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike b/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
index 1224cb5a6038d73f636f79d5fe8e3e95bc8c0d60..988e489ce2f1c2cdb7173932cffac245b27edcad 100644
--- a/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
+++ b/lib/modules/Tools.pmod/Standalone.pmod/assemble_autodoc.pike
@@ -1,4 +1,4 @@
-// $Id: assemble_autodoc.pike,v 1.24 2002/12/14 04:34:15 nilsson Exp $
+// $Id: assemble_autodoc.pike,v 1.25 2003/01/20 17:44:02 nilsson Exp $
 
 constant description = "Assembles AutoDoc output file.";
 
@@ -94,7 +94,7 @@ string visualize(Node n, int depth) {
   if(n->get_node_type() == XML_TEXT)
     return Parser.XML.Tree.text_quote(n->get_text());
   if(n->get_node_type() != XML_ELEMENT ||
-     !strlen(n->get_tag_name()))
+     !sizeof(n->get_tag_name()))
     return "";
 
   string name = n->get_tag_name();
diff --git a/lib/modules/Tools.pmod/X509.pmod b/lib/modules/Tools.pmod/X509.pmod
index 2e2eebb8531fcfd8bbc276975bd533b6efbc0b32..5c27e064cf82a58e8f254900d8065d2aba82623f 100644
--- a/lib/modules/Tools.pmod/X509.pmod
+++ b/lib/modules/Tools.pmod/X509.pmod
@@ -1,7 +1,7 @@
 #pike __REAL_VERSION__
 
 /* 
- * $Id: X509.pmod,v 1.16 2001/10/08 05:37:38 per Exp $
+ * $Id: X509.pmod,v 1.17 2003/01/20 17:44:01 nilsson Exp $
  *
  * Some random functions for creating RFC-2459 style X.509 certificates.
  *
@@ -40,11 +40,11 @@ object make_time(int t)
 mapping parse_time(object asn1)
 {
   if ((asn1->type_name != "UTCTime")
-      || (strlen(asn1->value) != 13))
+      || (sizeof(asn1->value) != 13))
     return 0;
 
   sscanf(asn1->value, "%[0-9]s%c", string s, int c);
-  if ( (strlen(s) != 12) && (c != 'Z') )
+  if ( (sizeof(s) != 12) && (c != 'Z') )
     return 0;
 
   /* NOTE: This relies on pike-0.7 not interpreting leading zeros as
diff --git a/lib/modules/Tools.pmod/_PEM.pmod b/lib/modules/Tools.pmod/_PEM.pmod
index 1c97303d96c63ccbb887dbf71f3288f769d637c1..a23987fba1a85a723c6a4aa7f58c7d79de70b54c 100644
--- a/lib/modules/Tools.pmod/_PEM.pmod
+++ b/lib/modules/Tools.pmod/_PEM.pmod
@@ -53,8 +53,8 @@ string dash_stuff(string msg)
 #if 0
 string chop_cr(string s)
 {
-  return (strlen(s) && (s[-1] == '\r'))
-    ? s[..strlen(s) - 2]
+  return (sizeof(s) && (s[-1] == '\r'))
+    ? s[..sizeof(s) - 2]
     : s;
 }
 #endif
diff --git a/lib/modules/Tools.pmod/sed.pmod b/lib/modules/Tools.pmod/sed.pmod
index 74ae2e20840ff9bbd950bd34466c80d40f8ef7df..684aa1dd12e385a1f25a0a267fdecda79b0294fd 100644
--- a/lib/modules/Tools.pmod/sed.pmod
+++ b/lib/modules/Tools.pmod/sed.pmod
@@ -48,7 +48,7 @@ static array sedreplace(string s,object re,string with,
       wa=sedreplace(a[0],re,with,whatin,first,lastmod,flags);
       if (wa)
 	 if (!flags["g"])
-	    return ({wa[0],wa[1]+s[strlen(a[0])..]});
+	    return ({wa[0],wa[1]+s[sizeof(a[0])..]});
 	 else
 	    pr=wa[0],w=wa[1];
       else
@@ -210,10 +210,10 @@ string|array `()(string|array(string) commands,
 	    inflags="";
 	    if (sscanf(cmd,"%*c"+div+"%s"+div+"%s"+div+"%s",
 		       what,with,inflags)<3) continue;
-	    if (strlen(what)!=strlen(with))
+	    if (sizeof(what)!=sizeof(with))
 	    {
-	       what=what[0..strlen(with)-1];
-	       with=with[0..strlen(what)-1];
+	       what=what[0..sizeof(with)-1];
+	       with=with[0..sizeof(what)-1];
 	    }
 	    
 	    a1=what/"",a2=with/"";
diff --git a/lib/modules/Web.pmod/Crawler.pmod b/lib/modules/Web.pmod/Crawler.pmod
index 989272fcf5e99858efa02211085f8c62d4218269..1cdb37b0feb752f202801ff339ab4f2850dc9970 100644
--- a/lib/modules/Web.pmod/Crawler.pmod
+++ b/lib/modules/Web.pmod/Crawler.pmod
@@ -33,7 +33,7 @@
 //! @enddl
 
 // Author:  Johan Sch�n.
-// $Id: Crawler.pmod,v 1.13 2002/12/11 22:18:02 anders Exp $
+// $Id: Crawler.pmod,v 1.14 2003/01/20 17:44:02 nilsson Exp $
 
 #define CRAWLER_DEBUG
 #ifdef CRAWLER_DEBUG
@@ -179,7 +179,7 @@ class Queue
 	if( !h[a]++ )
 	  res += "&"+a+"="+b;
     }
-    if( !strlen( res ) )
+    if( !sizeof( res ) )
       return 0;
     return res[1..];
   }
diff --git a/lib/modules/_Image.pmod/Fonts.pmod b/lib/modules/_Image.pmod/Fonts.pmod
index 70b43f0662b840c2cc4d024347f295377d5631df..2274bd728804e0e89c06c2e0dfeb11cd8a096779 100644
--- a/lib/modules/_Image.pmod/Fonts.pmod
+++ b/lib/modules/_Image.pmod/Fonts.pmod
@@ -64,7 +64,7 @@ static class FTFont
   {
     Image.Image res;
     int xp, ys;
-    if( !strlen( text ) )
+    if( !sizeof( text ) )
       text = " ";
     array(int) tx = (array(int))text;
     array chars = map( tx, do_write_char );
diff --git a/lib/modules/_Image.pmod/module.pmod b/lib/modules/_Image.pmod/module.pmod
index 915e37aa1bbcf0562d4ab251c2e0bea70523e3a3..31c6c7536e89c1d8f4906c1306bfca28e3a29a60 100644
--- a/lib/modules/_Image.pmod/module.pmod
+++ b/lib/modules/_Image.pmod/module.pmod
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: module.pmod,v 1.31 2002/11/15 05:06:18 nilsson Exp $
+// $Id: module.pmod,v 1.32 2003/01/20 17:44:02 nilsson Exp $
 
 static constant fmts = ([
   "image/x-pnm" : "PNM",
@@ -44,7 +44,7 @@ mapping _decode( string data )
 	sscanf(data[120..121],"%2c",p);  // extra header size
 	p=128+((p+127)/128)*128;         // data fork position
 
-	if (p<strlen(data) && l) // extra sanity check
+	if (p<sizeof(data) && l) // extra sanity check
 	   data=data[p..p+l-1];
      }
   }
@@ -203,7 +203,7 @@ local string load_file( void|object|string file )
     catch( data = file->read() );
   else
   {
-    if( catch( data = read_file( file ) ) || !data || !strlen(data) )
+    if( catch( data = read_file( file ) ) || !data || !sizeof(data) )
       catch( data = Protocols.HTTP.get_url_nice( file )[ 1 ] );
   }
   return data;
diff --git a/lib/modules/_Image_XCF.pmod b/lib/modules/_Image_XCF.pmod
index c5b0d2f05fa627cfbf714c3c4b70028ea92607cf..bc9bb0dc6121d94e7892ed22b62f8cd6216047e8 100644
--- a/lib/modules/_Image_XCF.pmod
+++ b/lib/modules/_Image_XCF.pmod
@@ -39,7 +39,7 @@ array(Parasite) decode_parasites( mixed data )
 {
   array res = ({});
   data = (string)data;
-  while(strlen(data))
+  while(sizeof(data))
   {
     int slen, flags;
     string value, name;
diff --git a/lib/modules/_Image_XPM.pmod b/lib/modules/_Image_XPM.pmod
index 99acbbe19acf0ffb958ac619909b54fa7c812e9a..b62f881ad8bb527f80d06716da8b959090a49d60 100644
--- a/lib/modules/_Image_XPM.pmod
+++ b/lib/modules/_Image_XPM.pmod
@@ -27,7 +27,7 @@ mapping _decode( string what, void|mapping opts )
   if(sscanf(what, "%*s/*%*[ \t]XPM%*[ \t]*/%*s{%s", what)  != 5)
     error("This is not a XPM image (1)\n");
 
-  if(strlen(what)<100000)
+  if(sizeof(what)<100000)
   {
     TD("Extra scan for small images");
     sscanf(what, "%s\n/* XPM */", what ) ||
@@ -172,7 +172,7 @@ string encode( object what, mapping|void options )
     string r = "";
     int i;
     r += "\"";
-    for(i=0; i<strlen(row); i++)
+    for(i=0; i<sizeof(row); i++)
       r += cmap_t[row[i]];
     res += r+"\",\n";
   }
diff --git a/src/modules/Gz/flushtest.pike b/src/modules/Gz/flushtest.pike
index c58aa3f5588b4d48a6c12686fef753d09a961ecf..c2f37cead3e4f2114aab1eebbab20c4049b17a80 100644
--- a/src/modules/Gz/flushtest.pike
+++ b/src/modules/Gz/flushtest.pike
@@ -17,12 +17,12 @@ int main()
   if(data0 + data1 != unpacked)
   {
     werror("Input length:  %d (%d+%d)\n",
-	   strlen(data0)+strlen(data0),
-	   strlen(data0),strlen(data1));
+	   sizeof(data0)+sizeof(data0),
+	   sizeof(data0),sizeof(data1));
     werror("Packed length: %d (should be %d)\n",
-	   strlen(packed),
-	   strlen(Gz.deflate()->deflate(data0+data1)));
-    werror("Output length: %d\n",strlen(unpacked));
+	   sizeof(packed),
+	   sizeof(Gz.deflate()->deflate(data0+data1)));
+    werror("Output length: %d\n",sizeof(unpacked));
     return 1;
   }else{
     return 0;
diff --git a/src/modules/HTTPLoop/test.pike b/src/modules/HTTPLoop/test.pike
index 58d300b4dfde19e62a5b0d6188cef73a3ce86274..28584148a25bbfd5f70a120373b218f060501c27 100644
--- a/src/modules/HTTPLoop/test.pike
+++ b/src/modules/HTTPLoop/test.pike
@@ -18,7 +18,7 @@ void handle(object o)
   object fd = Stdio.File();
   string q = o->not_query;
   int len;
-  if(!strlen(q)) q="foo";
+  if(!sizeof(q)) q="foo";
   if(q[-1]=='/') 
     q += "index.html";
   sscanf(q, "%*[/]%s", q);
@@ -45,7 +45,7 @@ void handle(object o)
 			"Server: Quick'n'dirty\r\n"
 			"Content-type: text/plain\r\n"
 			"Connection: Keep-Alive\r\n"
-			"Content-length: "+strlen(er)+"\r\n"
+			"Content-length: "+sizeof(er)+"\r\n"
 			"\r\n"+er, 200);
   }
 }
diff --git a/src/modules/HTTPLoop/wwwserver.pike b/src/modules/HTTPLoop/wwwserver.pike
index e5b029b30dd067cd1514f960a9199ffcdd372e59..4d3b6fe7df0fc557cfc3bc360d3fab4aaf20f6ab 100644
--- a/src/modules/HTTPLoop/wwwserver.pike
+++ b/src/modules/HTTPLoop/wwwserver.pike
@@ -62,7 +62,7 @@ mixed handle(object o)
       "<h1>No such file or directory: "+f+"</h1>";
     o->reply_with_cache("HTTP/1.0 404 Unknown file\r\n"
 			"Content-type: text/html\r\n"
-			"Content-Length: "+strlen(nofile)+"\r\n"
+			"Content-Length: "+sizeof(nofile)+"\r\n"
 			"MIME-Version: 1.0\r\n"
 			"Server: Neo-FastSpeed\r\n"
 			"Connection: Keep-Alive\r\n"
@@ -105,7 +105,7 @@ mixed handle(object o)
 		       ctype);
       }
       return o->reply_with_cache(head +
-				 "Content-Length: "+strlen(res)+
+				 "Content-Length: "+sizeof(res)+
 				 "\r\n\r\n"+res, 30);
     } else {
       o->reply_with_cache("HTTP/1.0 302  Redirect\r\n"
@@ -158,7 +158,7 @@ int main(int argc, array (string) argv)
   array foo;
   foreach(read_file((argv[0] - "wwwserver.pike") + "extensions")/"\n",
 	  string s) {
-    if(strlen(s) && s[0] != '#' && (foo = (s / "\t" - ({""}))) &&
+    if(sizeof(s) && s[0] != '#' && (foo = (s / "\t" - ({""}))) &&
        sizeof(foo) == 2)
       exts[foo[0]] = foo[1];
   }
diff --git a/src/modules/_Charset/module.pmod.in b/src/modules/_Charset/module.pmod.in
index 6839792ad64a32395792884bf102e785ea6912d1..f00ef77ef9a88a78af35d6a813c10a21bdbd73e1 100644
--- a/src/modules/_Charset/module.pmod.in
+++ b/src/modules/_Charset/module.pmod.in
@@ -263,7 +263,7 @@ private class _encoder
   static string low_convert(string s, string|void r,
 			     function(string:string)|void rc)
   {
-    int i = strlen(s);
+    int i = sizeof(s);
     string rr;
     while(--i>=0)
       if(s[i]>255)
@@ -307,7 +307,7 @@ private class UTF16enc {
   static private string low_convert(string s, string|void r,
 				    function(string:string)|void rc)
   {
-    int i = strlen(s);
+    int i = sizeof(s);
     string rr;
     while(--i>=0)
       if(s[i]>0x10ffff)
diff --git a/src/modules/files/socktest.pike b/src/modules/files/socktest.pike
index 539df2bc2c32538d45510ff012af515ed017f643..87433773ad424d28d1dd7b6a5455bd0be5aa2a06 100755
--- a/src/modules/files/socktest.pike
+++ b/src/modules/files/socktest.pike
@@ -1,6 +1,6 @@
 #!/usr/local/bin/pike
 
-/* $Id: socktest.pike,v 1.20 2002/10/12 13:32:31 grubba Exp $ */
+/* $Id: socktest.pike,v 1.21 2003/01/20 17:53:13 nilsson Exp $ */
 
 
 import Stdio;
@@ -48,18 +48,18 @@ class Socket {
     if(input_buffer != expected_data)
     {
       werror("Failed to read complete data, errno=%d.\n",err);
-      if(strlen(input_buffer) < 100)
+      if(sizeof(input_buffer) < 100)
       {
 	werror(num+":Input buffer: "+input_buffer+"\n");
       }else{
-	werror(num+":Input buffer: "+strlen(input_buffer)+" bytes.\n");
+	werror(num+":Input buffer: "+sizeof(input_buffer)+" bytes.\n");
       }
 
-      if(strlen(expected_data) < 100)
+      if(sizeof(expected_data) < 100)
       {
 	werror(num+":Expected data: "+expected_data+"\n");
       }else{
-	werror(num+":Expected data: "+strlen(expected_data)+" bytes.\n");
+	werror(num+":Expected data: "+sizeof(expected_data)+" bytes.\n");
       }
 
       exit(1);
@@ -72,7 +72,7 @@ class Socket {
   void write_callback()
   {
     got_callback();
-    if(strlen(output_buffer))
+    if(sizeof(output_buffer))
     {
       int tmp=write(output_buffer);
       if(tmp >= 0)
@@ -124,7 +124,7 @@ class Socket2
   void write_callback()
   {
     got_callback();
-    if(strlen(output_buffer))
+    if(sizeof(output_buffer))
     {
       int prerefs = _refs ("%s");
       int tmp=write(({"%s"}), output_buffer);
diff --git a/src/post_modules/GTK/new_build_pgtk.pike b/src/post_modules/GTK/new_build_pgtk.pike
index e8c44300ba393ce1c1f01c025a4c733c65425861..8fdb99f1bd879feb1450db0cd9397ae85b2c6a86 100755
--- a/src/post_modules/GTK/new_build_pgtk.pike
+++ b/src/post_modules/GTK/new_build_pgtk.pike
@@ -51,7 +51,7 @@ string destination_dir = "";
 
 string indent( string what, int amnt )
 {
-  if( !strlen(what) ) return "";
+  if( !sizeof(what) ) return "";
   string q = (" "*amnt);
   return q+((what/"\n")*("\n"+q));
 }
@@ -61,7 +61,7 @@ string make_c_string( string from )
   string line = "\"";
   string res = "";
   int c;
-  for( int i=0; i<strlen( from ); i++ )
+  for( int i=0; i<sizeof( from ); i++ )
   {
     switch( (c=from[i]) )
     {
@@ -76,7 +76,7 @@ string make_c_string( string from )
        line += sprintf("\\%o", c );
        break;
     }
-    if( strlen( line ) > 75 )
+    if( sizeof( line ) > 75 )
     {
       res += line+"\"\n";
       line="\"";
@@ -103,9 +103,9 @@ int data_offset( string what )
 
   if((off=search(gbl_data,what))!=-1)
   {
-    if( gbl_data[ off..off+strlen(what)-1 ] != what )
+    if( gbl_data[ off..off+sizeof(what)-1 ] != what )
       werror( "Search returned illegal string match! %O != %O\n",
-	      gbl_data[ off..off+strlen(what)-1 ], what );
+	      gbl_data[ off..off+sizeof(what)-1 ], what );
     return ocache[what]=off;
   }
 //   write("New string: %O\n", what);
@@ -200,9 +200,9 @@ class Function(Class parent,
     {
       res += sprintf("    quick_add_function(%s,%d,p%s,%s,%d,\n                          "
                      "%s,OPT_EXTERNAL_DEPEND|OPT_SIDE_EFFECT);\n",
-                     S(name,0,1,27), strlen(name),
+                     S(name,0,1,27), sizeof(name),
                      c_name(), S(type,0,2,27),
-                     strlen(type), (is_static()?"ID_STATIC":"0"));
+                     sizeof(type), (is_static()?"ID_STATIC":"0"));
     };
     array names = ({ name });
     switch( name )
@@ -407,12 +407,12 @@ class Member( string name, Type type, int set,
     if( set || classes[ type->name ] )
       return sprintf("    quick_add_function(%s,%d,p%s,\n                       %s,%d,"
                      "0,OPT_EXTERNAL_DEPEND);\n",
-                     S(name,0,1,27), strlen(name),
-                     c_name(), S(tp,0,2,27), strlen(tp));
+                     S(name,0,1,27), sizeof(name),
+                     c_name(), S(tp,0,2,27), sizeof(tp));
     return sprintf("    quick_add_function(%s,%d,p%s,\n                       %s,%d,"
                    "0,OPT_EXTERNAL_DEPEND);\n",
-                   S("get_"+name,0,1,27), strlen("get_"+name),
-                   c_name(), S(tp,0,2,27), strlen(tp));
+                   S("get_"+name,0,1,27), sizeof("get_"+name),
+                   c_name(), S(tp,0,2,27), sizeof(tp));
   }
 
   string pike_name()
@@ -1037,7 +1037,7 @@ class Class( string name, string file, int line )
                            }),
                            SPLIT(
                              "{\n  pgtk_default__sprintf( args, "+
-                             data_offset( name )+","+strlen(name)+
+                             data_offset( name )+","+sizeof(name)+
                              " );\n}\n",
                              file),
                            ({}),
@@ -1294,7 +1294,7 @@ Type parse_type( mixed t )
   }
   else
     tt = t->text;
-  if(!strlen(tt))
+  if(!sizeof(tt))
     SYNTAX("Expected type",t); 
   if( tt[0] == '"' ) // No types are strings...
     SYNTAX("Expected type",t); 
@@ -1396,7 +1396,7 @@ string parse_pre_file( string file )
   {
     object pp = t[i];
     string fname;
-    if( strlen(pp->text) &&
+    if( sizeof(pp->text) &&
         pp->text[0] == '#' &&
         sscanf( pp->text, "#include \"%s.inc\"", fname ) )
     {
@@ -1541,7 +1541,7 @@ string parse_pre_file( string file )
          if( token->text[..1] == "/*" ) // comment
            continue;
 
-         if( !strlen(token->text) )
+         if( !sizeof(token->text) )
            continue;
 
          if( token->text[0] == '#' )
@@ -1636,7 +1636,7 @@ void main(int argc, array argv)
     source_dir = combine_path( getcwd(), source_dir );
   if (source_dir[-1] != '/')
     source_dir += "/";
-  if( !strlen(destination_dir) || destination_dir[0] != '/' )
+  if( !sizeof(destination_dir) || destination_dir[0] != '/' )
     destination_dir = combine_path( getcwd(), destination_dir );
   if (destination_dir[-1] != '/')
     destination_dir += "/";
diff --git a/src/post_modules/GTK/output/doc-pikeref.pike b/src/post_modules/GTK/output/doc-pikeref.pike
index e37f15e06ca319e62034eb43c80a48cf940deca5..c3cb7d0b51087e29660806bd19d7b5811abd2fbc 100644
--- a/src/post_modules/GTK/output/doc-pikeref.pike
+++ b/src/post_modules/GTK/output/doc-pikeref.pike
@@ -133,13 +133,13 @@ static string make_pike_refdoc( string pgtkdoc,
 				mapping|void signals)
 {
   string res =  "";
-  if( !pgtkdoc || !strlen(pgtkdoc) )
+  if( !pgtkdoc || !sizeof(pgtkdoc) )
     return "//!\n";
 
   pgtkdoc = fix_images( fix_const( trim_xml(pgtkdoc) ) );
   foreach( pgtkdoc/"\n", string s )
   {
-    if( !strlen(s) )
+    if( !sizeof(s) )
       res += "//!\n";
     else if( s[0] == '!' )
       res += "//"+s+"\n";
@@ -233,7 +233,7 @@ static string make_function_doc( Function f, Class c )
   res += ");";
   res += "\n";
   imgfile=imgfilename(c->name+"_"+f->name);
-  if( !f->doc || !strlen( f->doc ) )
+  if( !f->doc || !sizeof( f->doc ) )
   {
     werror("Warning:"+f->file+":"+f->line+": "
 	   +c->name+"->"+f->name+" not documented\n" );
@@ -251,7 +251,7 @@ static void output_class( Class cls, int lvl )
   string result = "";
   array functions = ({});
   imgfile=imgfilename(cls->name);
-  if( !cls->doc || !strlen( cls->doc ) )
+  if( !cls->doc || !sizeof( cls->doc ) )
     werror("Warning:"+cls->file+":"+cls->line+": "
 	   +cls->name+" not documented\n" );
 
diff --git a/src/post_modules/GTK/output/few.pike b/src/post_modules/GTK/output/few.pike
index 9e1b999262150747868e21fc5d371df47e5cdc4c..88c30afea543857de516afebfd4a2a83be0fa095 100644
--- a/src/post_modules/GTK/output/few.pike
+++ b/src/post_modules/GTK/output/few.pike
@@ -9,7 +9,7 @@ int fcount;
 void output_current_data()
 {
   // Processing done. Actually write the file.
-  if( strlen( current_data ) )
+  if( sizeof( current_data ) )
   {
     fcount++;
     write_file( dir + "pgtk_"+(fcount)+".c", current_data );
@@ -29,7 +29,7 @@ static void output_class( Class cls, int lvl )
     cls->create_default_sprintf();
 
   /* Start output */
-  if(!strlen( current_data ) )
+  if(!sizeof( current_data ) )
     current_data += "#define EXTPRG extern\n"+sfhead;
 
   if( sizeof( cls->pre ) )
diff --git a/src/post_modules/GTK/output/split.pike b/src/post_modules/GTK/output/split.pike
index 77ae4c6bf612b11c30e7c71d2c4eeeb2621c0905..475c7b6a9619d582370ad5fbf464ae8fbfffdc20 100644
--- a/src/post_modules/GTK/output/split.pike
+++ b/src/post_modules/GTK/output/split.pike
@@ -6,7 +6,7 @@ object parent;
 
 static string filename( Class c )
 {
-  if( strlen( c->c_name() ) )
+  if( sizeof( c->c_name() ) )
     return "p"+c->c_name()+".c";
   return "pgtk_globals.c";
 }
@@ -120,13 +120,13 @@ string make_initfun()
   for( int i = 1; i<=init_n; i++ )
   {
     line += "_"+i+"(); ";
-    if( strlen( line ) > 70 )
+    if( sizeof( line ) > 70 )
     {
       res += "  "+line+"\n";
       line = "";
     }
   }
-  if( strlen(line) )
+  if( sizeof(line) )
     res += "  "+line+"\n";
   return res;
 }
@@ -161,7 +161,7 @@ array(string) output( mapping(string:Class) classes,
   array q = ({});
   foreach( values(classes), object c )
     q |= indices(c->functions) | indices(c->members);
-  q = Array.uniq( q ); sort(map(q,strlen),q);
+  q = Array.uniq( q ); sort(map(q,sizeof),q);
   foreach( reverse(q), string w ) S(w);
   
   traverse_class_tree( classes, build_pike_fadds );
@@ -173,7 +173,7 @@ array(string) output( mapping(string:Class) classes,
       if( !done[s] )
         done[s] = c->signals[s];
 
-  q = indices( done ); sort(map(q,strlen),q);
+  q = indices( done ); sort(map(q,sizeof),q);
   foreach( reverse(q), string w ) S("s_"+w,1);
 
   foreach( sort(indices( done )), string w )
diff --git a/src/post_modules/Unicode/make_canonicals.pike b/src/post_modules/Unicode/make_canonicals.pike
index a43d4325070f493410c6bd9ba6acdd0dd006366f..1d545a02721f59d660a95d697c6a45b28fdf47f7 100644
--- a/src/post_modules/Unicode/make_canonicals.pike
+++ b/src/post_modules/Unicode/make_canonicals.pike
@@ -6,7 +6,7 @@ void main()
   foreach( Stdio.stdin.read()/"\n", string line )
   {
     sscanf( line, "%s#", line );
-    if( !strlen( line ) )
+    if( !sizeof( line ) )
       continue;
     array data = line / ";";
     if( sizeof( data ) != 15 )
diff --git a/src/post_modules/Unicode/make_decompose.pike b/src/post_modules/Unicode/make_decompose.pike
index f00e1c4fa3c2de77dffbc96dc4bf2b050d2624d7..0f7e529ca92d175d1e990c4c138fffff0ce9c011 100644
--- a/src/post_modules/Unicode/make_decompose.pike
+++ b/src/post_modules/Unicode/make_decompose.pike
@@ -46,7 +46,7 @@ void main()
   foreach( Stdio.stdin.read()/"\n", string line )
   {
     sscanf( line, "%s#", line );
-    if( !strlen( line ) )
+    if( !sizeof( line ) )
       continue;
     array data = line / ";";
     if( sizeof( data ) != 15 )
diff --git a/src/post_modules/Unicode/make_wordbits.pike b/src/post_modules/Unicode/make_wordbits.pike
index 2961666e6f9f1ee7b61a8b739e185efbe02b8ad8..0f564b11b5dd5b234c3c0dd0390e0f38afb2ef34 100644
--- a/src/post_modules/Unicode/make_wordbits.pike
+++ b/src/post_modules/Unicode/make_wordbits.pike
@@ -27,7 +27,7 @@ void main()
   foreach( Stdio.stdin.read()/"\n", string line )
   {
     sscanf( line, "%s#", line );
-    if( !strlen( line ) )
+    if( !sizeof( line ) )
       continue;
     array data = line / ";";
     if( sizeof( data ) != 15 )
@@ -36,7 +36,7 @@ void main()
     if( sscanf( data[0], "%x", c ) && data[1][0] != '<' )
       if( parse_type( data[2] ) )
       {
-	if( !strlen(data[5]) && !last_was )
+	if( !sizeof(data[5]) && !last_was )
 	  last_was = c;
       }
       else if( last_was )
diff --git a/src/post_modules/Unicode/test.pike b/src/post_modules/Unicode/test.pike
index 12509f5ba40c8647169eeb486ffffbc09c50bf78..5d86910af15184f7061d4c959aa50e76b75632a7 100644
--- a/src/post_modules/Unicode/test.pike
+++ b/src/post_modules/Unicode/test.pike
@@ -1,6 +1,6 @@
 #! /usr/bin/env pike
 
-// $Id: test.pike,v 1.5 2002/05/09 13:31:09 per Exp $
+// $Id: test.pike,v 1.6 2003/01/20 18:00:49 nilsson Exp $
 
 #define c1 c[0]
 #define c2 c[1]
@@ -23,7 +23,7 @@ void main(int argc, array argv)
 
   foreach( Stdio.File( argv[1]+"/NormalizationTest.txt","r" )->read()/"\n", string l )
   {
-    if( !strlen( l ) || has_prefix(l, "#"))
+    if( !sizeof( l ) || has_prefix(l, "#"))
       continue;
 
     if( l[0] == '@' )
@@ -35,7 +35,7 @@ void main(int argc, array argv)
       part++;
       continue;
     }
-    if( !strlen( l ) )
+    if( !sizeof( l ) )
       continue;
 
     string decode_hex( string d )