/* mr_trim_args: passed an argument vector, it will trim any trailing
- * spaces on the args by writing a null into the string.
+ * spaces on the args by writing a null into the string. If an argument
+ * appears to be binary instead of ASCII, it will not be trimmed.
*/
int mr_trim_args(argc, argv)
char **argv;
{
register char **arg;
- register char *p, *lastch;
+ register unsigned char *p, *lastch;
for (arg = argv; argc--; arg++) {
- for (lastch = p = *arg; *p; p++)
- if (!isspace(*p))
- lastch = p;
+ for (lastch = p = *arg; *p; p++) {
+ /* If any byte in the string has the high bit set, assume
+ * that it is binary and we do not want to trim it.
+ * Setting p = lastch will cause us not to trim the string
+ * when we break out of this inner loop.
+ */
+ if (*p >= 0x80) {
+ p = lastch;
+ break;
+ }
+ if (!isspace(*p))
+ lastch = p;
+ }
if (p != lastch) {
if (isspace(*lastch))
*lastch = 0;