Previous: Structures, Up: Types


2.3.3 Type Example

The following example initializes a ffi_type object representing the tm struct from Linux's time.h.

Here is how the struct is defined:

     struct tm {
         int tm_sec;
         int tm_min;
         int tm_hour;
         int tm_mday;
         int tm_mon;
         int tm_year;
         int tm_wday;
         int tm_yday;
         int tm_isdst;
         /* Those are for future use. */
         long int __tm_gmtoff__;
         __const char *__tm_zone__;
     };

Here is the corresponding code to describe this struct to libffi:

         {
           ffi_type tm_type;
           ffi_type *tm_type_elements[12];
           int i;
     
           tm_type.size = tm_type.alignment = 0;
           tm_type.elements = &tm_type_elements;
     
           for (i = 0; i < 9; i++)
               tm_type_elements[i] = &ffi_type_sint;
     
           tm_type_elements[9] = &ffi_type_slong;
           tm_type_elements[10] = &ffi_type_pointer;
           tm_type_elements[11] = NULL;
     
           /* tm_type can now be used to represent tm argument types and
     	 return types for ffi_prep_cif() */
         }