- long width; + int width; and then:
- width = strtol(argv[pos++], NULL, 10); + width = (int)strtol(argv[pos++], NULL, 10); This is not right. You need to leave the type as long, and then range check it. I understand you are uncomfortable passing it later in an int context, where it gets truncated. But truncating it explicitly like that a cast is even worse. A huge number should not get bits chopped off and behave strangely, it should behave like the standard printf operation.