updating pointer with a function

fluxia:
Why is it ok to do it in some case and not in others? I think I have my answer to this, in the first two functions for each case it returns a value, hence it exit the block. (?)

Yes, the 'return' statement prevents the 'case fall-through' (hint: you might want to Google that term).

Also I am not sure I understand why the type of this function is a constant. :-[

Because the function is returning a pointer to a c-string literal. It would be bad form to modify it via the pointer.