anchor.diff:  			failed -> ctl_loop(Ctl,St,Buf1);
   			quit -> true;
   			init -> ctl_loop_init(Ctl, St#cstate.def_data_port);
  -			St1 when record(St1, cstate) ->
  +			St1 when is_record(St1, cstate) ->
   			    ctl_loop(Ctl,St1,Buf1);
   			_Err -> %% Crash etc - e.g. bad input from client
   			    ?dbg("ftpd crash: ~p", [_Err]),
  
positive.code: 	{deny, {IP,Mask}} when ?is_ip(IP), ?is_ip(Mask) ->
  	    options(Opts, S#sconf { deny_hosts =
  				     [{IP,Mask}|S#sconf.deny_hosts]});
  	{users, Users} when list(Users) ->
  	    %% Users = [{User,Passwd,[{Dir,[read|write|delete]}]} |
  	    %%          anonymous]
  	    %% NOTE: Dir must be sorted with deepest dir first!
  	    options(Opts, S#sconf{users=lists:flatmap(fun mk_user/1, Users)});
  	{max_connections,N} when integer(N), N >= 0 ->
  	    options(Opts, S#sconf { max_connections = N });
  	{root, Dir} ->
  	    options(Opts, S#sconf { rootdir = Dir });
  	{idle_timeout, Seconds} when integer(Seconds), Seconds > 0 ->
  	    options(Opts, S#sconf { idle_timeout = Seconds * 1000});
  	{use_utf8_by_default, Bool} ->
  	    options(Opts, S#sconf { use_utf8_by_default = Bool });
  
negative.code: 	U when U#user.passwd == Password ->
  	    rsend(Ctl, 230, ["User ", U#user.name, " logged in, proceed"]),
  	    St#cstate{ust = valid};
  	U when is_record(U, user) ->
  	    rsend(Ctl, 530, "Login incorrect"),
  	    St;
  	UserName ->
  