I'm fairly certain that last one is UB in C. The result of an assignment operator is not an lvalue, and even if it were it's UB (at least in C99) to modify the stored value of an object more than once between two adjacent sequence points. It might work in C++, though.
When it comes to their trademarks Valve can’t take a fully hands-off approach without negative consequences. Either they explicitly endorse the use of the Portal name and other branding, in which case they’re encouraging and aiding the project and could potentially be caught up in any lawsuit from Nintendo, or they say nothing and allow the trademark to lapse from non-enforcement, or they prohibit the project from using the Portal branding and enforce that prohibition with a lawsuit if needed. Unfortunately for the project, only one of these options retains their trademark and doesn’t set them up for a fight with Nintendo.