Под современными Линуксами командная оболочка берёт на себя функции разворачивания масок (wildcards) в список аргументов. Так что, если маски специально не экранировать, запускаемый процесс об их существовании ничего и не узнает.
А вторая вещь полностью подтвеждает слова WG на счёт появления экзотических проблем при переходе с MinGW на GCC4. Упёрся в какой-то непонятный полтергейст, приводящий к очистке одного из полей структуры при возврате из функции. На проблему с обработкой pointer aliasing не похоже, т.к. второе поле, доступ к которому осуществляется аналогично, обнулению не подвержено.
