commit 457c3bd5a0092d769da944883c662fc1639e0782
parent c260ea732839ceaa7c53baa81f7b27fe2cf9030d
Author: Alexander Burger <abu@software-lab.de>
Date: Sun, 23 Jun 2013 09:50:51 +0200
'flg' argument to 'info' -> call lstat()
Diffstat:
9 files changed, 165 insertions(+), 154 deletions(-)
diff --git a/CHANGES b/CHANGES
@@ -1,4 +1,5 @@
* DDjun13 picoLisp-3.1.3
+ 'info' optional 'flg' argument
'+Swap' relation prefix class
Allow unlimited number of coroutines
Default coroutine stack segment size 1 MB
diff --git a/doc/refI.html b/doc/refI.html
@@ -263,10 +263,12 @@ href="refO.html#offset">offset</a></code>.
-> 3
</code></pre>
-<dt><a name="info"><code>(info 'any) -> (cnt|T dat . tim)</code></a>
+<dt><a name="info"><code>(info 'any ['flg]) -> (cnt|T dat . tim)</code></a>
<dd>Returns information about a file with the name <code>any</code>: The current
size <code>cnt</code> in bytes, and the modification date and time (UTC). For
-directories, <code>T</code> is returned instead of the a size. See also <code><a
+directories, <code>T</code> is returned instead of the size. If <code>flg</code>
+is non-<code>NIL</code> and <code>any</code> is the name of a symbolic link,
+then the link itself is used, not the file that it refers to. See also <code><a
href="refD.html#dir">dir</a></code>, <code><a
href="refD.html#date">date</a></code>, <code><a
href="refT.html#time">time</a></code> and <code><a
diff --git a/lib/map b/lib/map
@@ -34,7 +34,7 @@ append (1339 . "@src64/subr.l")
apply (713 . "@src64/apply.l")
arg (2614 . "@src64/main.l")
args (2590 . "@src64/main.l")
-argv (3242 . "@src64/main.l")
+argv (3251 . "@src64/main.l")
as (139 . "@src64/flow.l")
asoq (3021 . "@src64/subr.l")
assoc (2986 . "@src64/subr.l")
@@ -89,7 +89,7 @@ circ (817 . "@src64/subr.l")
circ? (2403 . "@src64/subr.l")
clip (1800 . "@src64/subr.l")
close (4403 . "@src64/io.l")
-cmd (3224 . "@src64/main.l")
+cmd (3233 . "@src64/main.l")
cnt (1413 . "@src64/apply.l")
co (2548 . "@src64/flow.l")
commit (1403 . "@src64/db.l")
@@ -112,7 +112,7 @@ del (1986 . "@src64/sym.l")
delete (1402 . "@src64/subr.l")
delq (1453 . "@src64/subr.l")
diff (2590 . "@src64/subr.l")
-dir (3154 . "@src64/main.l")
+dir (3163 . "@src64/main.l")
dm (545 . "@src64/flow.l")
do (2141 . "@src64/flow.l")
e (2971 . "@src64/flow.l")
@@ -129,7 +129,7 @@ extern (1032 . "@src64/sym.l")
extra (1269 . "@src64/flow.l")
extract (1218 . "@src64/apply.l")
fifo (2097 . "@src64/sym.l")
-file (3101 . "@src64/main.l")
+file (3110 . "@src64/main.l")
fill (3256 . "@src64/subr.l")
filter (1161 . "@src64/apply.l")
fin (2034 . "@src64/subr.l")
@@ -240,7 +240,7 @@ onOff (1747 . "@src64/sym.l")
one (1780 . "@src64/sym.l")
open (4360 . "@src64/io.l")
opid (3245 . "@src64/flow.l")
-opt (3345 . "@src64/main.l")
+opt (3354 . "@src64/main.l")
or (1640 . "@src64/flow.l")
out (4236 . "@src64/io.l")
pack (1279 . "@src64/sym.l")
@@ -342,7 +342,7 @@ uppc (3469 . "@src64/sym.l")
use (1573 . "@src64/flow.l")
usec (2965 . "@src64/main.l")
val (1597 . "@src64/sym.l")
-version (3359 . "@src64/main.l")
+version (3368 . "@src64/main.l")
wait (3175 . "@src64/io.l")
when (1884 . "@src64/flow.l")
while (2061 . "@src64/flow.l")
diff --git a/src/main.c b/src/main.c
@@ -1,4 +1,4 @@
-/* 06may13abu
+/* 23jun13abu
* (c) Software Lab. Alexander Burger
*/
@@ -1092,18 +1092,20 @@ any doCtty(any ex) {
return T;
}
-// (info 'any) -> (cnt|T dat . tim)
+// (info 'any ['flg]) -> (cnt|T dat . tim)
any doInfo(any x) {
+ any y;
cell c1;
struct tm *p;
struct stat st;
- x = evSym(cdr(x));
+ y = evSym(x = cdr(x));
{
- char nm[pathSize(x)];
+ char nm[pathSize(y)];
- pathString(x, nm);
- if (stat(nm, &st) < 0)
+ pathString(y, nm);
+ x = cdr(x);
+ if ((isNil(EVAL(car(x)))? stat(nm, &st) : lstat(nm, &st)) < 0)
return Nil;
p = gmtime(&st.st_mtime);
Push(c1, boxCnt(p->tm_hour * 3600 + p->tm_min * 60 + p->tm_sec));
diff --git a/src/vers.h b/src/vers.h
@@ -1 +1 @@
-static byte Version[4] = {3,1,2,12};
+static byte Version[4] = {3,1,2,13};
diff --git a/src64/arch/emu.l b/src64/arch/emu.l
@@ -1,4 +1,4 @@
-# 23may13abu
+# 23jun13abu
# (c) Software Lab. Alexander Burger
# Byte order
@@ -772,6 +772,7 @@
(waitpid i i "int" i)
(free - p)
(stat i p "struct stat")
+ (lstat i p "struct stat")
(fcntl i i i p)
(pipe i "int")
(select i i "fd_set" "fd_set" "fd_set" (2 . -2))
diff --git a/src64/main.l b/src64/main.l
@@ -1,4 +1,4 @@
-# 28may13abu
+# 23jun13abu
# (c) Software Lab. Alexander Burger
(code 'Code)
@@ -3052,17 +3052,26 @@
pop X
ret
-# (info 'any) -> (cnt|T dat . tim)
+# (info 'any ['flg]) -> (cnt|T dat . tim)
(code 'doInfo 2)
push X
push Y
push Z
- ld E ((E CDR)) # Get arg
+ ld X (E CDR) # Args
+ ld E (X) # Get 'any'
call evSymE_E # Evaluate to a symbol
call pathStringE_SZ # Write to stack buffer
- ld E S # path name pointer
+ ld Y S # path name pointer
sub S (%% STAT) # 'stat' structure
- cc stat(E S) # Get status
+ ld X (X CDR) # Eval 'flg'
+ ld E (X)
+ eval
+ cmp E Nil # NIL?
+ if eq # Yes
+ cc stat(Y S) # Get status
+ else
+ cc lstat(Y S) # or link status
+ end
ld E Nil # Preload return value
nul4 # 'stat' OK?
if ns
diff --git a/src64/tags b/src64/tags
@@ -48,122 +48,119 @@
CHAR_LETTER63,1516
CHAR_DIGIT64,1537
-sys/x86-64.freeBsd.defs.l,1994
-ENOENT5,56
-EINTR6,71
-EBADF7,85
-EAGAIN8,99
-EACCES9,115
-EPIPE10,131
-ECONNRESET11,146
-O_RDONLY14,180
-O_WRONLY15,197
-O_RDWR16,214
-O_CREAT17,229
-O_EXCL18,247
-O_TRUNC19,265
-O_APPEND20,284
-F_GETFD21,301
-F_SETFD22,317
-FD_CLOEXEC23,333
-BUFSIZ26,361
-PIPE_BUF27,379
-MAXPATHLEN28,398
-stdin29,417
-stdout30,442
-stderr31,468
-RTLD_LAZY35,504
-RTLD_GLOBAL36,522
-FLOCK39,553
-L_TYPE40,568
-L_WHENCE41,584
-L_START42,602
-L_LEN43,618
-L_PID44,632
-SEEK_SET45,647
-SEEK_CUR46,664
-F_RDLCK47,681
-F_WRLCK48,697
-F_UNLCK49,713
-F_GETFL50,729
-F_SETFL51,745
-F_GETLK52,761
-F_SETLK53,778
-F_SETLKW54,795
-F_SETOWN55,813
-O_NONBLOCK56,830
-O_ASYNC57,849
-STAT60,874
-ST_MODE61,889
-ST_SIZE62,905
-ST_MTIME63,922
-S_IFMT64,940
-S_IFDIR65,959
-TMS68,988
-TMS_UTIME69,1001
-TMS_STIME70,1019
-TERMIOS73,1048
-C_IFLAG74,1065
-C_LFLAG75,1081
-C_CC76,1098
-ISIG77,1112
-VMIN78,1127
-VTIME79,1141
-TCSADRAIN80,1156
-SIGACTION83,1184
-SIGSET_T84,1203
-SA_HANDLER85,1221
-SA_MASK86,1240
-SA_FLAGS87,1257
-SIG_DFL88,1274
-SIG_IGN89,1290
-SIG_UNBLOCK90,1306
-SIGHUP91,1326
-SIGINT92,1341
-SIGUSR193,1356
-SIGUSR294,1373
-SIGPIPE95,1390
-SIGALRM96,1407
-SIGTERM97,1424
-SIGCHLD98,1441
-SIGCONT99,1458
-SIGSTOP100,1475
-SIGTSTP101,1492
-SIGTTIN102,1509
-SIGTTOU103,1526
-SIGIO104,1543
-SIGNALS105,1558
-WNOHANG108,1583
-WUNTRACED109,1599
-FD_SET112,1627
-TM_SEC115,1652
-TM_MIN116,1667
-TM_HOUR117,1682
-TM_MDAY118,1698
-TM_MON119,1715
-TM_YEAR120,1731
-D_NAME123,1755
-SOCK_STREAM126,1781
-SOCK_DGRAM127,1801
-AF_UNSPEC128,1820
-AF_INET6129,1838
-SOL_SOCKET130,1856
-SO_REUSEADDR131,1879
-IPPROTO_IPV6132,1900
-IPV6_V6ONLY133,1922
-INET6_ADDRSTRLEN134,1943
-NI_MAXHOST135,1969
-NI_NAMEREQD136,1991
-SOCKADDR_IN6137,2011
-SIN6_FAMILY138,2033
-SIN6_PORT139,2053
-SIN6_ADDR140,2071
-ADDRINFO141,2089
-AI_FAMILY142,2107
-AI_SOCKTYPE143,2125
-AI_ADDRLEN144,2145
-AI_ADDR145,2165
-AI_NEXT146,2182
+sys/x86-64.linux.defs.l,1959
+ENOENT5,59
+EINTR6,108
+EBADF7,155
+EAGAIN8,194
+EACCES9,227
+EPIPE10,268
+ECONNRESET11,303
+O_RDONLY14,365
+O_WRONLY15,382
+O_RDWR16,399
+O_CREAT17,414
+O_EXCL18,431
+O_TRUNC19,448
+O_APPEND20,466
+F_GETFD21,486
+F_SETFD22,502
+FD_CLOEXEC23,518
+BUFSIZ26,546
+PIPE_BUF27,564
+MAXPATHLEN29,585
+RTLD_LAZY32,613
+RTLD_GLOBAL33,631
+FLOCK36,662
+L_TYPE37,702
+L_WHENCE38,722
+L_START39,744
+L_LEN40,760
+L_PID41,775
+SEEK_SET42,790
+SEEK_CUR43,807
+F_RDLCK44,824
+F_WRLCK45,840
+F_UNLCK46,856
+F_GETFL47,872
+F_SETFL48,888
+F_GETLK49,904
+F_SETLK50,920
+F_SETLKW51,936
+F_SETOWN52,953
+O_NONBLOCK53,970
+O_ASYNC54,992
+STAT57,1019
+ST_MODE58,1061
+ST_SIZE59,1083
+ST_MTIME60,1100
+S_IFMT61,1118
+S_IFDIR62,1144
+TMS65,1180
+TMS_UTIME66,1214
+TMS_STIME67,1232
+TERMIOS70,1261
+C_IFLAG71,1304
+C_LFLAG72,1320
+C_CC73,1337
+ISIG74,1351
+VMIN75,1364
+VTIME76,1377
+TCSADRAIN77,1391
+SIGACTION80,1419
+SIGSET_T81,1462
+SA_HANDLER82,1481
+SA_MASK83,1500
+SA_FLAGS84,1516
+SIG_DFL86,1536
+SIG_IGN87,1552
+SIG_UNBLOCK88,1568
+SIGHUP90,1589
+SIGINT91,1615
+SIGUSR192,1630
+SIGUSR293,1647
+SIGPIPE94,1664
+SIGALRM95,1681
+SIGTERM96,1698
+SIGCHLD97,1715
+SIGCONT98,1732
+SIGSTOP99,1749
+SIGTSTP100,1766
+SIGTTIN101,1783
+SIGTTOU102,1800
+SIGIO103,1817
+SIGNALS104,1832
+WNOHANG107,1894
+WUNTRACED108,1910
+FD_SET111,1938
+TM_SEC114,1975
+TM_MIN115,1990
+TM_HOUR116,2005
+TM_MDAY117,2021
+TM_MON118,2038
+TM_YEAR119,2054
+D_NAME122,2078
+SOCK_STREAM125,2105
+SOCK_DGRAM126,2125
+AF_UNSPEC127,2144
+AF_INET6128,2162
+SOL_SOCKET129,2180
+SO_REUSEADDR130,2199
+IPPROTO_IPV6131,2220
+IPV6_V6ONLY132,2242
+INET6_ADDRSTRLEN133,2263
+NI_MAXHOST135,2290
+NI_NAMEREQD136,2312
+SOCKADDR_IN6138,2333
+SIN6_FAMILY139,2355
+SIN6_PORT140,2375
+SIN6_ADDR141,2393
+ADDRINFO143,2412
+AI_FAMILY144,2430
+AI_SOCKTYPE145,2448
+AI_ADDRLEN146,2468
+AI_ADDR147,2488
+AI_NEXT148,2505
./glob.l,4331
Data4,51
@@ -413,7 +410,7 @@ sys/x86-64.freeBsd.defs.l,1994
UndefErr1247,85443
DlErr1248,85472
-./main.l,2261
+./main.l,2242
Code4,51
Ret8,106
Retc10,127
@@ -512,7 +509,6 @@ sys/x86-64.freeBsd.defs.l,1994
putStringB2538,62459
begString2550,62673
endString_E2561,62899
-msec_A2576,63247
doArgs2590,63556
doNext2597,63670
doArg2614,63986
@@ -526,13 +522,13 @@ sys/x86-64.freeBsd.defs.l,1994
doPwd2983,73752
doCd2994,74007
doCtty3019,74623
-doInfo3056,75557
-doFile3101,76652
-doDir3154,77888
-doCmd3224,79506
-doArgv3242,79965
-doOpt3345,82511
-doVersion3359,82842
+doInfo3056,75564
+doFile3110,76822
+doDir3163,78058
+doCmd3233,79676
+doArgv3251,80135
+doOpt3354,82681
+doVersion3368,83012
./big.l,1059
zapZeroA_A6,106
@@ -1257,9 +1253,9 @@ sys/x86-64.freeBsd.defs.l,1994
getUdpZ_FB373,9872
putUdpBZ380,10017
-sys/x86-64.freeBsd.code.l,94
-errno_A5,64
-errnoC10,158
-wifstoppedS_F21,537
-wifsignaledS_F27,688
-wtermsigS_A36,897
+sys/x86-64.linux.code.l,94
+errno_A5,67
+errnoC10,169
+wifstoppedS_F16,287
+wifsignaledS_F21,413
+wtermsigS_A28,568
diff --git a/src64/version.l b/src64/version.l
@@ -1,6 +1,6 @@
-# 11jun13abu
+# 23jun13abu
# (c) Software Lab. Alexander Burger
-(de *Version 3 1 2 12)
+(de *Version 3 1 2 13)
# vi:et:ts=3:sw=3