I'm working with a large, old C codebase (an interpreter) that uses global variables a great deal, with the result that I cannot have two instances of it at once. Is there a straightforward (ideally automated) approach to convert this code to something reentrant? i.e. some refactor tool that would make all globals part of a struct and prepend the pointer to all variables?
Could I convert to C++ and wrap the entire thing in a class definition?
                        
I would recommend to convert your project into C++11 project and change all your static vars into
threadlocal.This can be up to several days of work depending on the size of your project. In certain cases this will work.