You are right, and there are other issues:
- I don't return the proper return value (should not return the number of bytes from the color strings)
- I don't handle the case where writev() returns a number of bytes between 0 and count (e.g. You are writing 10Mb of data, a signal arrives, and you only wrote 5Mb -- the color thing will get all confused)