refactor(3p/mime4cl): use SB-POSIX for FILE-LENGTH
This is slightly better than the (mostly untested) mess we had before: Just implement the one thing we need using the tools the one implementation we support (SBCL) gives us. Eventually, we'll want to make this portable, probably using osicat. Unfortunately, packaging this requires support for cffi-grovel (b/383) which buildLisp lacks at the moment. Change-Id: I6960015f80e6a5dfde67baf55537c5274a19e4e2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11356 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org>
This commit is contained in:
		
							parent
							
								
									d13b0791c5
								
							
						
					
					
						commit
						5262e5bf6c
					
				
					 2 changed files with 5 additions and 43 deletions
				
			
		
							
								
								
									
										1
									
								
								third_party/lisp/mime4cl/default.nix
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								third_party/lisp/mime4cl/default.nix
									
										
									
									
										vendored
									
									
								
							|  | @ -10,6 +10,7 @@ depot.nix.buildLisp.library { | |||
|     depot.third_party.lisp.npg | ||||
|     depot.third_party.lisp.trivial-gray-streams | ||||
|     depot.third_party.lisp.qbase64 | ||||
|     { sbcl = depot.nix.buildLisp.bundled "sb-posix"; } | ||||
|   ]; | ||||
| 
 | ||||
|   srcs = [ | ||||
|  |  | |||
							
								
								
									
										47
									
								
								third_party/lisp/mime4cl/ex-sclf.lisp
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								third_party/lisp/mime4cl/ex-sclf.lisp
									
										
									
									
										vendored
									
									
								
							|  | @ -32,6 +32,8 @@ | |||
| 
 | ||||
| (defpackage :mime4cl-ex-sclf | ||||
|   (:use :common-lisp) | ||||
|   (:import-from :sb-posix :stat :stat-size) | ||||
| 
 | ||||
|   (:export | ||||
|    #:aif | ||||
|    #:awhen | ||||
|  | @ -62,8 +64,6 @@ | |||
|    #:save-file-excursion | ||||
|    #:read-file | ||||
| 
 | ||||
|    #:unix-file-stat | ||||
|    #:unix-stat | ||||
|    #:file-size | ||||
| 
 | ||||
|    #:promise | ||||
|  | @ -275,51 +275,12 @@ ELEMENT-TYPE." | |||
|   #-sbcl (let (#+cmu (lisp::*ignore-wildcards* t)) | ||||
|            (namestring pathname))) | ||||
| 
 | ||||
| (defstruct (unix-file-stat (:conc-name stat-)) | ||||
|   device | ||||
|   inode | ||||
|   links | ||||
|   atime | ||||
|   mtime | ||||
|   ctime | ||||
|   size | ||||
|   blksize | ||||
|   blocks | ||||
|   uid | ||||
|   gid | ||||
|   mode) | ||||
| 
 | ||||
| (defun unix-stat (pathname) | ||||
|   ;; this could be different depending on the unix systems | ||||
|   (multiple-value-bind (ok? device inode mode links uid gid rdev | ||||
|                             size atime mtime ctime | ||||
|                             blksize blocks) | ||||
|       (#+cmu unix:unix-lstat | ||||
|        #+sbcl sb-unix:unix-lstat | ||||
|        ;; TODO(sterni): ECL, CCL | ||||
|        (if (stringp pathname) | ||||
|            pathname | ||||
|            (native-namestring pathname))) | ||||
|     (declare (ignore rdev)) | ||||
|     (when ok? | ||||
|       (make-unix-file-stat :device device | ||||
|                            :inode inode | ||||
|                            :links links | ||||
|                            :atime atime | ||||
|                            :mtime mtime | ||||
|                            :ctime ctime | ||||
|                            :size size | ||||
|                            :blksize blksize | ||||
|                            :blocks blocks | ||||
|                            :uid uid | ||||
|                            :gid gid | ||||
|                            :mode mode)))) | ||||
| 
 | ||||
| ;; FILE-LENGTH is a bit idiosyncratic in this respect.  Besides, Unix | ||||
| ;; allows to get to know the file size without being able to open a | ||||
| ;; file; just ask politely. | ||||
| (defun file-size (pathname) | ||||
|   (stat-size (unix-stat pathname))) | ||||
|   #+sbcl (stat-size (unix-stat pathname)) | ||||
|   #-sbcl (error "nyi")) | ||||
| 
 | ||||
| ;; LAZY | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue