Changeset 2606
- Timestamp:
- 01/15/08 22:30:51 (1 year ago)
- Files:
-
- trunk/tendra/mk/def/def.linux.mk (modified) (1 diff)
- trunk/tendra/src/producers/ada/libgela/gela-source_buffers-unix.adb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/tendra/mk/def/def.linux.mk
r2605 r2606 101 101 102 102 # Which of Gela.Source_Buffers.* Ada will use: 103 # ADA_INPUT_BUFFER?= Unix104 ADA_INPUT_BUFFER?= Portable103 # ADA_INPUT_BUFFER?= Portable 104 ADA_INPUT_BUFFER?= Unix trunk/tendra/src/producers/ada/libgela/gela-source_buffers-unix.adb
r2604 r2606 5 5 6 6 function open 7 (path : C.char_array;8 flags : C.int)9 return HANDLE;7 (path : C.char_array; 8 flags : C.int) 9 return HANDLE; 10 10 pragma Import (C, open, "open"); 11 11 12 12 function close 13 (fd : HANDLE)14 return C.int;13 (fd : HANDLE) 14 return C.int; 15 15 pragma Import (C, close, "close"); 16 16 17 17 O_RDONLY : constant := 0; 18 18 OPEN_FAILED : constant := -1; 19 SEEK_END : constant := 2; 19 20 20 type Stat_Struct is record 21 st_dev : C.unsigned_long; 22 st_ino : C.unsigned_long; 23 st_mode : C.unsigned; 24 st_nlink : C.unsigned; 25 st_uid : C.unsigned; 26 st_gid : C.unsigned; 27 st_rdev : C.unsigned_long; 28 st_size : C.long; 29 st_blksize : C.unsigned_long; 30 st_blocks : C.unsigned_long; 31 st_atime : C.long; 32 st_mtime : C.long; 33 st_ctime : C.long; 34 end record; 35 pragma Convention (C, Stat_Struct); 21 --type off_t is range -2 ** 63 .. 2 ** 63 - 1; 22 type off_t is range -2 ** 31 .. 2 ** 31 - 1; 36 23 37 type Stat_Struct_Access is access all Stat_Struct; 38 pragma Convention (C, Stat_Struct_Access); 39 40 function fstat 41 (filedes : HANDLE; 42 buf : Stat_Struct_Access) 43 return C.int; 44 pragma Import (C, fstat, "fstat"); 24 function lseek 25 (filedes : HANDLE; 26 Offset : off_t; 27 whence : C.int) 28 return off_t; 29 pragma Import (C, lseek, "lseek"); 45 30 46 31 function mmap 47 (start : System.Address;48 length : C.size_t;49 prot : C.int;50 flags : C.int;51 fd : HANDLE;52 offset : C.ptrdiff_t)53 return System.Address;32 (start : System.Address; 33 length : C.size_t; 34 prot : C.int; 35 flags : C.int; 36 fd : HANDLE; 37 offset : C.ptrdiff_t) 38 return System.Address; 54 39 pragma Import (C, mmap, "mmap"); 55 40 … … 58 43 59 44 function munmap 60 (start : System.Address;61 length : C.size_t)62 return C.int;45 (start : System.Address; 46 length : C.size_t) 47 return C.int; 63 48 pragma Import (C, munmap, "munmap"); 64 49 … … 79 64 Storage_Elements.To_Address (-1); 80 65 81 Stat : aliased Stat_Struct; 82 Size : unsigned_long := 0; 66 Size : off_t; 83 67 begin 84 68 This.Internal_File := open (To_C (Name), O_RDONLY); … … 88 72 end if; 89 73 90 if fstat (This.Internal_File, Stat'Unchecked_Access) /= 0 then 91 Close (This); 92 raise Use_Error; 93 end if; 74 Size := lseek (This.Internal_File, 0, SEEK_END); 94 75 95 Size := unsigned_long (Stat.st_size); 96 97 if Size > unsigned_long (Offset'Last) then 76 if Size = -1 or Size > off_t (Offset'Last) then 98 77 Close (This); 99 78 raise Use_Error;