Etwas Codemodernisierung.
* Kosmetik, Stil, Einrueckungen
* Alten Kompatibilitaetscode entfernt
* path_array() aus dem master() verwenden ohne Platzhalter
* Einige weitere besondere UIDs/Verzeichnisse behandeln
Change-Id: I48e987c1eaf344adcc4aeed50adb9e05626ad361
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index 731de5a..cf7a4ed 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -3,11 +3,9 @@
// fileview.c
//
// $Id: fileview.c 9142 2015-02-04 22:17:29Z Zesstra $
-#pragma strict_types
-#pragma save_types
-//#pragma range_check
+#pragma strict_types, rtt_checks
+#pragma range_check, pedantic
#pragma no_clone
-#pragma pedantic
#include <ansi.h>
#include <player/base.h>
@@ -15,6 +13,8 @@
#include <shells.h>
#include <daemon/mand.h>
#include <udp.h>
+#include <files.h>
+
#define NEED_PROTOTYPES
#include <magier.h>
#include <thing/properties.h>
@@ -113,9 +113,9 @@
maxlen-=sizeof(tmp);
switch(filedata[FILESIZE])
{
- case -2: tmp=sprintf(colorstrings[DIR],tmp);
+ case FSIZE_DIR: tmp=sprintf(colorstrings[DIR],tmp);
maxlen-=colorstrings[DIR,1]; break;
- case -1: tmp=sprintf(colorstrings[VC],tmp);
+ case FSIZE_NOFILE: tmp=sprintf(colorstrings[VC],tmp);
maxlen-=colorstrings[VC,1]; break;
default: if (find_object(filedata[FULLNAME]))
{
@@ -125,7 +125,7 @@
}
if (!maxcount) return tmp+"\n";
return sprintf("%-*s%s",(maxlen+sizeof(tmp)),tmp,
- ((counter++)==maxcount?(counter=0,"\n"):" "));
+ ((counter++)==maxcount?(counter=0,"\n"):" "));
}
private int _ls_maxlen(mixed filedata,int flags,int maxlen)
@@ -134,44 +134,46 @@
int size;
base=filedata[BASENAME];
if (!(flags&LS_A)&&(base[0]=='.')) return 0;
-#if __VERSION__ < "3.2.9"
- if (sizeof(base)>maxlen) maxlen=sizeof(base);
-#else
maxlen=max(maxlen,sizeof(base));
-#endif
return 1;
}
private string _ls_output_long(mixed filedata, int flags,closure valid_read,
closure valid_write,closure creator_file)
{
- string *tmp,full,base,path,date,creator,group;
- int size,dir,ftime;
- object ob;
-
- base=filedata[BASENAME];
- if (!(sizeof(base))||((!(flags&LS_A))&&(base[0]=='.')))
+ string base=filedata[BASENAME];
+ if (!(sizeof(base)) || ( (!(flags&LS_A)) && (base[0]=='.')) )
return 0;
- size=filedata[FILESIZE];
- path=filedata[PATHNAME];
- tmp=(string *)call_other(master(),"full_path_array",
- filedata[FULLNAME],getuid());
- full=sprintf("/%s",implode(tmp,"/"));
- dir=(size==-2);
- ob=find_object(full);
- ftime=filedata[FILEDATE];
- date=dtime(ftime);
- date=sprintf("%s %s %s",date[9..11],date[5..6],
- ((time()-ftime)<31536000?date[19..23]:(" "+date[13..16])));
- creator="";
- group="";
+ int size=filedata[FILESIZE];
+ string path=filedata[PATHNAME];
+ string *tmp=(string *)call_other(master(),"path_array",
+ filedata[FULLNAME],getuid(), 0);
+ string full=implode(tmp,"/");
+ int dir=(size==FSIZE_DIR);
+ object ob=find_object(full);
+ int ftime=filedata[FILEDATE];
+ string date;
+ if ((time()-ftime)<31536000) // ein Jahr
+ date=strftime("%b %e %Y", ftime);
+ else
+ date=strftime("%b %e %H:%M", ftime);
+
+ string creator="";
+ string group="";
if (flags&LS_U)
{
- creator=(string)call_other(master(),"creator_file",full);
+ creator=(string)call_other(master(),"creator_file", full);
switch(creator)
{
case ROOTID: creator="root"; break;
- case BACKBONEID: creator="daemon"; break;
+ case BACKBONEID: creator="std"; break;
+ case MAILID: creator="mail"; break;
+ case NEWSID: creator="news"; break;
+ case NOBODY: creator="nobody"; break;
+ case POLIZEIID: creator="polizei"; break;
+ case DOCID: creator="doc"; break;
+ case GUILDID: creator="gilde"; break;
+ case ITEMID: creator="items"; break;
default: if(!creator) creator="none"; break;
}
}
@@ -182,10 +184,10 @@
switch(tmp[0])
{
case WIZARDDIR: group="magier"; break;
- case "news": group="news"; break;
- case "mail": group="mail"; break;
- case "open": group="public"; break;
- case "p": group="project"; break;
+ case NEWSDIR: group="news"; break;
+ case MAILDIR: group="mail"; break;
+ case FTPDIR: group="public"; break;
+ case PROJECTDIR: group="project"; break;
case DOMAINDIR: if (sizeof(tmp)>1) { group=tmp[1]; break; }
default: group="mud"; break;
}
@@ -197,23 +199,24 @@
{
if (ob)
{
- if (size==-1)
+ if (size==FSIZE_NOFILE)
base=sprintf(colorstrings[VC],base);
else
base=sprintf(colorstrings[OBJ],base);
}
}
- return sprintf(("%c%c%c%c %3d"+((flags&LS_U)?" %-24.24s":"%-0.1s")+
- ((flags&LS_G)?" %-8.8s":"%0.1s")+" %8s %s %s\n"),
- (dir?'d':'-'),
+ return sprintf(("%c%c%c%c %3d" + ((flags&LS_U) ? " %-24.24s" : "%-0.1s")
+ +((flags&LS_G) ? " %-8.8s" : "%0.1s") + " %8s %s %s\n"),
+ (dir ? 'd' : '-'),
(!funcall(valid_read,full,getuid(),
- "read_file",this_object())?'-':'r'),
+ "read_file",this_object()) ? '-' : 'r'),
(!funcall(valid_write,full,getuid(),
- "write_file",this_object())?'-':'w'),
- (ob?'x':'-'),
- (dir?(sizeof((get_dir(full+"/*")||({}))-({".",".."}))):0),
- creator,group,(dir?"-":size==-1?"<vc>":to_string(size)),
- date,base);
+ "write_file",this_object()) ? '-' : 'w'),
+ (ob ? 'x' : '-'),
+ (dir ? (sizeof((get_dir(full+"/*")||({}))-({".",".."}))) : 0),
+ creator, group,
+ (dir ? "-" : size==FSIZE_NOFILE ? "<vc>" : to_string(size)),
+ date, base);
}
@@ -270,7 +273,7 @@
{
tmp=({});
size=args[i][FILESIZE];
- if (size==-2)
+ if (size==FSIZE_DIR)
{
tmp=file_list(({args[i][FULLNAME]+"/*"}),MODE_LSB,0,"/");
tmp=sort_array(tmp,sort_fun);
@@ -325,7 +328,7 @@
printf("%s: %s: Leere Datei.\n",query_verb()||"more",arg[FULLNAME]);
return 0;
}
- if (arg[FILESIZE]==-2)
+ if (arg[FILESIZE]==FSIZE_DIR)
printf("%s: %s ist ein Verzeichnis.\n",query_verb()||"more",arg[FULLNAME]);
else
printf("%s: %s: Datei existiert nicht.\n", query_verb()||"more",
@@ -460,8 +463,8 @@
while(i)
{
tmp2[(i-1)]=sprintf("%d: ",i)+tmp[(i<<1)-2];
- oldman_result[i,0]=tmp[(i<<1)-2];
- oldman_result[i,1]=tmp[(i<<1)-1];
+ oldman_result[i,0]=tmp[(i<<1)-2];
+ oldman_result[i,1]=tmp[(i<<1)-1];
i--;
}
printf("Es wurden folgende potentiell passenden Seiten gefunden:\n"
@@ -519,7 +522,7 @@
printf("showprops: %s: Es gibt kein Objekt diesen Namens.\n",str[0..<3]);
return 1;
}
- if (catch(call_other(str[0..<3], "???")))
+ if (catch(load_object(str)))
{
printf("showprops: %s: Datei konnte nicht geladen werden.\n",str);
return 1;
@@ -531,29 +534,16 @@
return 0;
}
list=inherit_list(find_object(str));
-#if __VERSION__ < "3.2.9"
- list=map(list,lambda(({'x}),({#'extract,'x,4,-2})));
- list+=map(list,lambda(({'x}),({#'[<,({#'old_explode,'x,"/"}),1})));
- list=map(m_indices(mkmapping(list)),lambda(({'x}),({#'+,({#'+,"/sys/",'x}),"h"})));
- list=filter(list,lambda(({'x}),({#'>,({#'file_size,'x}),0})) );
-#else
list=map(list,(: return $1[5..<2]+"h"; :));
list+=map(list,(: return explode($1,"/")[<1]; :));
list=map(m_indices(mkmapping(list)),(: return "/sys/"+$1; :));
list=filter(list,(: return file_size($1)>0; :));
-#endif
list=sort_array(list, #'<);
ausgabe="";
for (i=sizeof(list);i--;)
{
-#if __VERSION__ < "3.2.9"
- str=implode(filter(old_explode(read_file(list[i]), "\n"),
- lambda( ({ 'x }), ({#'==, ({#'extract, 'x, 0, 9}), "#define P_"}) ))
- , "\n");
-#else
str=implode(filter(explode(read_file(list[i]),"\n"),
(: return $1[0..9]=="#define P_";:)),"\n");
-#endif
if (str!="") ausgabe+=sprintf("%s\n%s\n\n", list[i], str);
}
if (ausgabe!="")
@@ -567,16 +557,6 @@
//############################### GREP ###################################
// ########
-#if __VERSION__ < "3.2.9"
-
-private int _grep_filter(string filename)
-{
- return (call_other("valid_write",filename,getuid(this_object()),
- "write_file",this_object())!=0);
-}
-
-#endif
-
//
// grep_file: Datei greppen
// rexpr: Regular Expression
@@ -589,19 +569,20 @@
int ptr,count,i,nol,match,index;
fullname=filedata[FULLNAME];
if ((flags&GREP_F)&&fullname=="/players/"+getuid()+"/grep.out")
- {
- write_file("/players/"+getuid()+"/grep.out",
- "Uebergehe grep.out ...\n");
- return RET_FAIL;
+ {
+ write_file("/players/"+getuid()+"/grep.out",
+ "Uebergehe grep.out ...\n");
+ return RET_FAIL;
}
switch(filedata[FILESIZE])
{
- case -2: return RET_FAIL;
- case -1: return ERROR(DOESNT_EXIST,fullname,RET_FAIL);
+ case FSIZE_DIR: return RET_FAIL;
+ case FSIZE_NOFILE: return ERROR(DOESNT_EXIST,fullname,RET_FAIL);
case 0: return RET_FAIL;
default: break;
}
- if (!MAY_READ(fullname)) return ERROR(NO_READ,fullname,RET_FAIL);
+ if (!MAY_READ(fullname))
+ return ERROR(NO_READ,fullname,RET_FAIL);
carry=""; result=({});
if (flags&GREP_I)
rexpr=lower_case(rexpr);
@@ -701,24 +682,16 @@
return USAGE("grep [-" GREP_OPTS
"] <regexp> <datei/verz> [<datei2> ... ] [<maske>]");
args=map(args,#'to_filename)-({0});
- /*
-#if __VERSION__ < "3.2.9"
- args=filter(args,#'_grep_filter);
-#else
- args=filter(args,(: return (valid_write($1,
- getuid(this_object()),"write_file",this_object())!=0):));
-#endif
- */
args=file_list(args,MODE_GREP,(flags&GREP_R?1:0),"/",mask);
if (!sizeof(args))
return printf("Keine passenden Dateien gefunden.\n"),1;
if (flags&GREP_I) rexpr=lower_case(rexpr);
if (flags&GREP_F)
{
- if (file_size("/players/"+getuid()+"/grep.out")==-2||
- !MAY_WRITE("/players/"+getuid()+"/grep.out"))
+ if (file_size("/players/"+getuid()+"/grep.out")==FSIZE_DIR
+ || !MAY_WRITE("/players/"+getuid()+"/grep.out"))
return printf("grep: Datei /players/%s/grep.out kann nicht "
- "geschrieben werden.\n",getuid()),1;
+ "geschrieben werden.\n",getuid()),1;
else
write_file("/players/"+getuid()+"/grep.out",
"Ausgabe von \"grep " + _unparsed_args() + "\":\n");