It still seems kinda perverse to be copying all of these (especially as you're consequently imposing an artificial limit on how many args the updater can take).  Why not just remember .updater = argv+i+1 and avoid copying entirely ?  (At least in argument processing; the final code to exec might need to replace .update[0] with the path of the copied binary, but nothing prohibits modifying argv[].  You can then execv(.updater[0], .updater) and be done.)  Obviously, you'd do your access to .updater via functions on the configuration object.