Next: Complex Types, Previous: Arrays, Unions, and Enumerations, Up: Types [Index]

#### 2.3.5 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.type = FFI_TYPE_STRUCT;
          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() */
        }