I assume that the obvious answer to this question is the question "why not fix the code to use the correct pointer type"?
EDIT
Well, I understand that you don’t want to complicate the code unnecessarily, but I don’t think that this is most of the complexity or even unnecessary.
Look at the open field in the Hardware_MouseDriver structure, which should be a pointer to a function that takes a pointer to void as its first argument.
To initialize this field, you use a pointer to the Hardware_MouseDrivers_GPM_Open function, and in another place a pointer to the Hardware_MouseDrivers_DevInput_Open function. None of them accepts a pointer to void as their first argument, and this, of course, is what the compiler warns about.
Now, if the void pointer is the same size as these pointers, and there are no other surprising differences between how they are stored and processed, calls to these functions using the open pointer will work as expected. This is likely to happen, and I think that with this type of low-level code, it is unlikely that anyone will send it a TOPS-20 or something like that. But there is no guarantee that this will work, and it looks (to me) weird. (And to the compiler, obviously!)
So, I suggest changing the code as follows:
static int Hardware_MouseDrivers_GPM_Open(Hardware_MouseDrivers_GPM *this, char *path) { printf("GPM: Opening %s...\n", path); this->path = path; }
just a little trickier:
static int Hardware_MouseDrivers_GPM_Open(void *arg1, char *path) { Hardware_MouseDrivers_GPM *this = arg1; printf("GPM: Opening %s...\n", path); this->path = path; }
I think this change would be simpler and less complicated than (1) disabling warnings, (2) documenting so readers can understand why this warning should not be important here, (3) documenting it is still why your readers really consider that you know what you are doing, and (4) handle problems that may arise if someone really portes your code to TOPS-20.