In the first case, the first time, that the outer if statement becomes true, the code will go into the
while(1) loop and will be stuck there forever.
The second code is different, since the
while loop will check at each start of it's iteration, if the condition is still met. If not, it will exit, so not necessarily an infinite loop.
Going into an infinite loop, if something fails to initialize is often done in the microcontroller world, especially when initializing external hardware. A reset loop (restarting until it works) is mostly not fitting there, because often it is not just waiting for a resource to become free. Often this is used for serious problems, for example external hardware not being there or functioning. Imagine trying to use an external GPS chip, but the chip is not there. It should be there, since the device is build this way. Why should a reset loop be better here? The problem won't get away with time. Or imagine, that the initialization fails, because the GPS chip is broken. Trying to interface such a broken chip repeatedly might break even more things. Either way, someone has to look at this, to fix the problem. It will not go away by itself.
I would say, that the failed initialization in the library above is such a situation.