Trying to reason about error propagation and resource leakage within
the form submission code was impossible because of the
form_successful_controls_dom function.
This function was over six hundred lines long, had twenty six top
level local variables and six levels of indent in places.
This commit splits it out into thirteen shorter and more obvious
functions. The resulting operation is identical except errors are
properly propagated (all failures were reported as out of memory)
and resource management can be reasoned about.
The compiler appears to inline the entirety of the code from
form_submit() down excepting a handful of leaf functions. This
results in similar code output size as previous implementation.
The new implementation has a greater number of variables passed to sub
functions than desirable because multiple character sets are required
to encode names and values in the multipart data list. However as
noted the compiler effectively inlines all these functions so this
does not actually become a major problem.
Alter the handling of query values within nsurl to be like fragments.
This ensures callers never have to care about the query punctuation,
e.g. the question mark
This also means the strings generated will no longer have trailing
question marks which now conforms to behaviour in whatwg url spec
on url serializing in section 4.5
The use of gcc explicitly does not work on systems where the local
building system only has the clang compiler.
Framebuffer was the only user of the BUILD_CC target for local
tooling and its handling of flags was also improved.
Haven't successfully logged in with credentials featuring UTF-8 characters, but ASCII run through the conversion is working and UTF-8 usernames display correctly when the user is re-prompted.