Funciones C tomando el parámetro de función void *

Antes tenía una estructura C

typedef struct c { int cc; }CS; 

Solía ​​llamar a una función de biblioteca decir int GetData (CS * x) que me estaba devolviendo la estructura C anterior con datos.

 GetData(CS *x) 

La función llamada solía ser como:

 CS CSobj; GetData(&CSObj); 

Ahora hay dos estructuras dicen C y D

 typedef struct c { int cc; }CS; CS CSobj; typedef struct d { int dc; int dd; }DS; DS DSobj; 

La función GetData () se ha modificado a GetData (void * x). Tengo que llamar a la función de biblioteca decir int GetData (void * x) que me devolverá una de las estructuras anteriores a través de ese parámetro void *. El tipo de retorno de la función indica qué estructura se devuelve.

El problema es al llamar a la función GetData () cómo y qué parámetro pasar, ya que no sé qué estructura devolverá la función. ¿Alguna forma de salir de este problema?

Podrías usar un sindicato

  // define union of two structs union DorC { DS DSobj; CS CSobj; } CorD; // call using union rc = GetData(&CorD); if (rc == Ctype) { // use CorD.CSobj; } else { // use CorD.DSobj; } 

Advertencia no probado syntax código comprobado!