comp.lang.ada
 help / color / mirror / Atom feed
From: lutz@iks-jena.de (Lutz Donnerhacke)
Subject: Defining the constaint = 0 mod 4?
Date: Thu, 4 Oct 2001 09:52:12 +0000 (UTC)
Date: 2001-10-04T09:52:12+00:00	[thread overview]
Message-ID: <slrn9rocaa.4a.lutz@taranis.iks-jena.de> (raw)

   subtype dirent_len_t is size_t range 13 .. NAME_MAX + 13;
   type dirent_t (d_reclen : dirent_len_t) is record
      d_ino    : inode_t;
      d_off    : off_t;
      d_name   : Interfaces.C.char_array (13 .. d_reclen);
   end record;
   for dirent_t'Alignment use 4;    
   --  Kernel enforces this manually by rounding d_reclen to a multiple of 4
   --  This prevents d_name : String (14 .. d_reclen); term : Char := NUL;
   for dirent_t use record
      d_ino    at 0 range 0 .. 31;
      d_off    at 4 range 0 .. 31;
      d_reclen at 8 range 0 .. 15;
   end record;
   pragma Pack (dirent_t);
			      
Any idea to express the comment as a constraint? The following does not work:

   subtype dirent_len_t is size_t range 0 .. NAME_MAX / 4;
   type dirent_t (d_reclen : dirent_len_t) is record
      d_ino    : inode_t;
      d_off    : off_t;
      d_name   : Interfaces.C.char_array (13 .. 4 * d_reclen);
      dummy    : array (1..2) of Boolean := False;
   end record;
   for dirent_t'Alignment use 4;    
   for dirent_t use record
      d_ino    at 0 range 0 .. 31;
      d_off    at 4 range 2 .. 31;
      dummy    at 7 range 0 .. 1;
      d_reclen at 8 range 0 .. 15;
   end record;
   for dirent_t'Bit_Order use High_Order_First;
  



                 reply	other threads:[~2001-10-04  9:52 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox