Это очень хороший и правильный C, но передача структуры по значению, возможно, не будет хорошей идеей для больших структур или если вы намереваетесь изменить структуру в вызывающей программе:
Xyz s;
s = XyzPlusOne( s );
, в этом случае выбыло бы лучше передать структуру в качестве указателя и просто сказать:
Xyz s;
XyzPlusOne( & s );
С другой стороны, если вы хотите что-то вроде этого:
Xyz s1, s2;
...,
s2 = XyzPlusOne( s1 );
, тогда возвращение значения имеет смысл.