Следующий скрипт Coccinelle преобразует любой sizeof(struct_ptr->field_name) / sizeof(uint16_t)
в JUNKSIZE(field_name)
, что здорово.
@@
typedef My_Struct_Type_t;
typedef uint16_t;
My_Struct_Type_t *H;
identifier I;
@@
-sizeof(H->I) / sizeof(uint16_t)
+JUNKSIZE(I)
Так, например,
My_Struct_Type_t *sptr = ...;
...
SomeFunction(..., sizeof(sptr->field1) / sizeof(uint16_t), ...);
... преобразуетсяto ...
My_Struct_Type_t *sptr = ...;
...
SomeFunction(..., JUNKSIZSE(field1), ...);
Где я борюсь, это если фрагмент для преобразования такой:
My_Struct_Type_t *sptr = ...;
...
SomeFunction(..., sizeof(sptr->field1.nested_field1) / sizeof(uint16_t), ...);
Я не могу сопоставить nested_field1
.
I 'мы пытались трактовать I
как выражение, а не как идентификатор, но это не работает. Кто-нибудь знает, есть ли способ сделать это, то есть преобразовать sizeof(sptr->field1.nested_field1) / sizeof(uint16_t)
в JUNKSIZE(field1.nested_field1)
?. Спасибо:)