[OpenBIOS] r719 - in ofw/fs: . ext2fs jffs2
svn at openbios.org
svn at openbios.org
Wed Nov 7 23:34:42 CET 2007
Author: wmb
Date: 2007-11-07 23:34:41 +0100 (Wed, 07 Nov 2007)
New Revision: 719
Added:
ofw/fs/unixtime.fth
Modified:
ofw/fs/ext2fs/dir.fth
ofw/fs/ext2fs/methods.fth
ofw/fs/jffs2/jffs2.fth
Log:
Factored out the conversion routines to and from Unix time values
(seconds since 1 Jan 1970) so only one copy is needed.
This helps with OLPC trac 4707, avoiding the need for a third
copy of those routines.
Modified: ofw/fs/ext2fs/dir.fth
===================================================================
--- ofw/fs/ext2fs/dir.fth 2007-11-07 07:56:38 UTC (rev 718)
+++ ofw/fs/ext2fs/dir.fth 2007-11-07 22:34:41 UTC (rev 719)
@@ -47,50 +47,11 @@
\
\ After this point, the code should be independent of the disk format!
-\ time stamps
-
-\ date&time is number of seconds since 1970
-create days/month
-\ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 31 c, 28 c, 31 c, 30 c, 31 c, 30 c, 31 c, 31 c, 30 c, 31 c, 30 c, 31 c,
-
-: >d/m ( day-in-year -- day month )
- 12 0 do
- days/month i ca+ c@ 2dup < if
- drop 1+ i 1+ leave
- then
- -
- loop
-;
-: sec>time&date ( seconds -- s m h d m y )
- 60 u/mod 60 u/mod 24 u/mod ( s m h days )
- [ 365 4 * 1+ ] literal /mod >r ( s m h day-in-cycle ) ( r: cycles )
- dup [ 365 365 + 31 + 29 + ] literal
- 2dup = if \ exactly leap year Feb 29
- 3drop 2 29 2 ( s m h year-in-cycle d m )
- else
- > if 1- then \ after leap year
- 365 u/mod ( s m h day-in-year year-in-cycle )
- swap >d/m ( s m h year-in-cycle d m )
- then
- rot r> 4 * + 1970 + ( s m h d m y )
-;
-: timestamp ( s m h d m y -- seconds ) \ since 1970
- d# 1970 - 4 /mod [ d# 365 4 * 1+ ] literal * ( s m h d m yrs days )
- swap d# 365 * + ( s m h d m days )
- swap 1- 0 ?do i days/month + c@ + loop ( s m h d days )
- + 1- ( s m h days )
- d# 24 * + d# 60 * + d# 60 * +
-;
-
-\ e.g. time&date timestamp
-\ timestamp sec>time&date should have no net effect
-
: init-inode ( mode inode# -- )
inode >r ( mode )
r@ /inode erase ( mode )
r@ short! ( )
- time&date timestamp ( time )
+ time&date >unix-seconds ( time )
dup r@ 2 la+ int! ( time ) \ set access time
dup r@ 3 la+ int! ( time ) \ set creation time
r@ 4 la+ int! ( ) \ set modification time
@@ -256,7 +217,7 @@
inode# inode /inode 6 /l* /string erase
\ delete inode, and set its deletion time.
- time&date timestamp ( time )
+ time&date >unix-seconds ( time )
inode# inode 5 la+ int! update
inode# free-inode
;
@@ -292,7 +253,7 @@
: file-info ( id -- false | id' s m h d m y len attributes name$ true )
inode# >r file-handle to inode# ( id )
- 1+ file-sec sec>time&date file-size file-attr file-name true
+ 1+ file-sec unix-seconds> file-size file-attr file-name true
r> to inode#
;
Modified: ofw/fs/ext2fs/methods.fth
===================================================================
--- ofw/fs/ext2fs/methods.fth 2007-11-07 07:56:38 UTC (rev 718)
+++ ofw/fs/ext2fs/methods.fth 2007-11-07 22:34:41 UTC (rev 719)
@@ -71,7 +71,7 @@
drop bfbase @ bsize free-mem \ Registered with initbuf
modified? if
false to modified?
- time&date timestamp file-handle inode 4 la+ int! update
+ time&date >unix-seconds file-handle inode 4 la+ int! update
then
;
Modified: ofw/fs/jffs2/jffs2.fth
===================================================================
--- ofw/fs/jffs2/jffs2.fth 2007-11-07 07:56:38 UTC (rev 718)
+++ ofw/fs/jffs2/jffs2.fth 2007-11-07 22:34:41 UTC (rev 719)
@@ -1465,37 +1465,6 @@
file-size
;
-\ This code is copied from ext2fs and could be shared
-decimal
-\ date&time is number of seconds since 1970
-create days/month
-\ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
- 31 c, 28 c, 31 c, 30 c, 31 c, 30 c, 31 c, 31 c, 30 c, 31 c, 30 c, 31 c,
-
-: >d/m ( day-in-year -- day month )
- 12 0 do
- days/month i ca+ c@ 2dup < if
- drop 1+ i 1+ leave
- then
- -
- loop
-;
-: sec>time&date ( seconds -- s m h d m y )
- 60 u/mod 60 u/mod 24 u/mod ( s m h days )
- [ 365 4 * 1+ ] literal /mod >r ( s m h day-in-cycle ) ( r: cycles )
- dup [ 365 365 + 31 + 29 + ] literal
- 2dup = if \ exactly leap year Feb 29
- 3drop 2 29 2 ( s m h year-in-cycle d m )
- else
- > if 1- then \ after leap year
- 365 u/mod ( s m h day-in-year year-in-cycle )
- swap >d/m ( s m h year-in-cycle d m )
- then
- rot r> 4 * + 1970 + ( s m h d m y )
-;
-hex
-\ End of common code
-
: next-file-info ( id -- false | id' s m h d m y len attributes name$ true )
dup 0= if drop prep-dirents minodes then ( tdirent )
dup next-minode = if drop false exit then ( tdirent )
@@ -1507,7 +1476,7 @@
0 ( ... attributes r: tdirent )
else ( id' rinode r: tdirent )
>r ( id' r: tdirent rinode )
- r@ rimtime@ sec>time&date ( id' s m h d m y r: tdirent rinode )
+ r@ rimtime@ unix-seconds> ( id' s m h d m y r: tdirent rinode )
r@ riisize@ ( id' s m h d m y len r: tdirent rinode )
r> rimode@ ( id' s m h d m y len mode r: tdirent )
then
Added: ofw/fs/unixtime.fth
===================================================================
--- ofw/fs/unixtime.fth (rev 0)
+++ ofw/fs/unixtime.fth 2007-11-07 22:34:41 UTC (rev 719)
@@ -0,0 +1,66 @@
+\ See license at end of file
+purpose: Convert Unix seconds to time and date
+
+decimal
+\ date&time is number of seconds since 1970
+create days/month
+\ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+ 31 c, 28 c, 31 c, 30 c, 31 c, 30 c, 31 c, 31 c, 30 c, 31 c, 30 c, 31 c,
+
+: >d/m ( day-in-year -- day month )
+ 12 0 do
+ days/month i ca+ c@ 2dup < if
+ drop 1+ i 1+ leave
+ then
+ -
+ loop
+;
+: unix-seconds> ( seconds -- s m h d m y )
+ 60 u/mod 60 u/mod 24 u/mod ( s m h days )
+ [ 365 4 * 1+ ] literal /mod >r ( s m h day-in-cycle ) ( r: cycles )
+ dup [ 365 365 + 31 + 29 + ] literal
+ 2dup = if \ exactly leap year Feb 29
+ 3drop 2 29 2 ( s m h year-in-cycle d m )
+ else
+ > if 1- then \ after leap year
+ 365 u/mod ( s m h day-in-year year-in-cycle )
+ swap >d/m ( s m h year-in-cycle d m )
+ then
+ rot r> 4 * + 1970 + ( s m h d m y )
+;
+: >unix-seconds ( s m h d m y -- seconds ) \ since 1970
+ d# 1970 - 4 /mod [ d# 365 4 * 1+ ] literal * ( s m h d m yrs days )
+ swap d# 365 * + ( s m h d m days )
+ swap 1- 0 ?do i days/month + c@ + loop ( s m h d days )
+ + 1- ( s m h days )
+ d# 24 * + d# 60 * + d# 60 * +
+;
+
+\ e.g. time&date >unix-seconds
+\ >unix-seconds unix-seconds> should have no net effect
+
+hex
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2006 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END
More information about the OpenBIOS
mailing list