[Solution suggested by Sakthi Kumar]
In a common header:
add
#define MAX_OBJ 50
typedef struct {
int num_items;
queryForItems items[MAX_OBJ];
} query_arg_t;
In driver
case QUERY_GET_VARIABLES:
q = kmalloc(sizeof(query_arg_t), GFP_KERNEL);
q->num_items = 3;
memcpy(q->items, queryForItems, sizeof(queryForItems) * q->num_items);
if (copy_to_user((query_arg_t *)arg, q, sizeof(query_arg_t))) {
return -EACCES;
}
break;
In user app:
query_arg_t *q;
q = malloc(sizeof(query_arg_t));
if (ioctl(fd, QUERY_GET_VARIABLES, q) == -1)
{
perror("query_apps ioctl get");
} else {
printf("=====================\n");
printf("option: %s \n", q->items[i].status);