Back to the main page.

Bug 2472 - void* does not work on VC2010

Status CLOSED FIXED
Reported 2014-02-12 12:52:00 +0100
Modified 2014-02-24 10:56:34 +0100
Product: FieldTrip
Component: realtime
Version: unspecified
Hardware: PC
Operating System: Mac OS
Importance: P5 normal
Assigned to: Robert Oostenveld
URL:
Tags:
Depends on:
Blocks:
See also:

Robert Oostenveld - 2014-02-12 12:52:33 +0100

On 12 Feb 2014, at 12:07, Arian van Dorsten wrote: Hierbij een 2-tal wijzigingen om e.e.a. onder VS2010 te laten compileren: file: endianutil.c error: 'void *' : unknown size ln 155: // ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, (void *)ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */ ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */ ln 232: // ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, (void *)ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */ ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */


Robert Oostenveld - 2014-02-12 12:52:55 +0100

Bedankt voor de suggestie. Die (void *) staat er vast niet voor niets, dus ik probeer het even te begrijpen. Hieronder mijn gedachtengang... Ik zie de volgende mac001> grep ft_swap_data *.c endianutil.c:void ft_swap_data(UINT32_T numel, UINT32_T datatype, void *data) { endianutil.c: ft_swap_data(edef->type_numel, edef->type_type, (char *) buf + offset); endianutil.c: ft_swap_data(edef->value_numel, edef->value_type, (char *) buf + offset + wst*edef->type_numel); endianutil.c: ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, (void *)ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */ endianutil.c: ft_swap_data(edef->type_numel, edef->type_type, (char *) buf + offset); endianutil.c: ft_swap_data(edef->value_numel, edef->value_type, (char *) buf + offset + wst*edef->type_numel); endianutil.c: ft_swap_data(ddef->nchans*ddef->nsamples, ddef->data_type, (void *)ddef + sizeof(datadef_t)); /* ddef+1 points to first data byte */ dus momenteel lijkt de (void *) niet consistent gebruikt te worden, en is er soms een (char *) in gebruik. Uit http://code.google.com/p/fieldtrip/source/list?path=/trunk/realtime/src/buffer/src/endianutil.c&start=8285 maak ik op dat het in http://code.google.com/p/fieldtrip/source/browse/trunk/realtime/src/buffer/src/endianutil.c?spec=svn8285&r=8285 gebeurt is. Dat is een commit van mij. Er staat weinig commentaar bij en het combineert verschillende (niet gerelateerde) problemen in een commit als "merged changes related to bug 1114, 2209, 1961 and 1792 into the svn repository". Tja, ik ben niet altijd even netjes in het toevoegen van commentaar :-( Maar http://bugzilla.fcdonders.nl/show_bug.cgi?id=1961 lijkt het meest waarschijnlijk hiermee te maken te hebben. Het betreft een stukje code (streaming naar/van arduino) wat een tijd low-priority op een hoekje van mijn laptop heeft gestaan. Weinig details dus. Ik herinner me nog wel dat op de arduino er iets aan de hand was met de endianness, volgens mij was dat http://bugzilla.fcdonders.nl/show_bug.cgi?id=1970 waar ik verder geen tijd aan wou besteden. Ik denk dat onder sommige compilers (misschien die voor de arduino, wat een aangepaste gcc is) de expressie ddef+sizeof(datadef_t) niet mag, omdat het verschillende types zijn. Ik denk dat de typecast (void *)ddef daarmee te maken heeft, omdat je bij een (void*) wel een getal mag optellen, mits de void* bestaat. Op VS2010 lijkt void* niet te bestaan. Als ik in http://code.google.com/p/fieldtrip/source/diff?spec=svn8285&r=8285&format=side&path=/trunk/realtime/src/buffer/src/endianutil.c&old_path=/trunk/realtime/src/buffer/src/endianutil.c&old=7123 kijk, zie ik dat een paar wijzigingen zijn gedaan waarin de (void*) is toegevoegd, terwijl op andere plekken in dezelfde file toen al (char*) werd gebruikt om hetzelfde probleem op te lossen. Ben je het er mee eens dat de juiste oplossing zou zijn om void* te vervangen in char*?


Robert Oostenveld - 2014-02-12 12:53:15 +0100

On 12 Feb 2014, at 12:41, Arian van Dorsten wrote: Ja (char*) is een prima oplossing lijkt me.


Robert Oostenveld - 2014-02-12 12:55:44 +0100

mac001> svn commit endianutil.c Sending endianutil.c Transmitting file data . Committed revision 9196. see http://code.google.com/p/fieldtrip/source/detail?r=9196


Robert Oostenveld - 2014-02-24 10:56:34 +0100

I closed several bugs at once that all have been resolved for some time. If you disagree, please reopen.