--- tinytest.c~	2011-05-25 16:51:16.000000000 -0400
+++ tinytest.c	2011-06-09 07:25:43.694800000 -0400
@@ -67,7 +67,7 @@
 
 #ifdef WIN32
 /** Pointer to argv[0] for win32. */
-static const char *commandname = NULL;
+static char *commandname = NULL;
 #endif
 
 static void usage(struct testgroup_t *groups, int list_groups)
@@ -291,7 +291,19 @@
 	int i, j, n=0;
 
 #ifdef WIN32
-	commandname = v[0];
+        const char* sp = strrchr (v[0], '.');
+        if (0 != sp) {
+           if (0 != stricmp (sp, ".exe")) { /* not exe extension */
+              sp = 0;
+           }
+        }
+        if (0 == sp) {
+           commandname = (char*) malloc (strlen(v[0]) + 5);
+           strcpy (commandname, v[0]);
+           strcat (commandname, ".exe");
+        }
+        else
+           commandname = strdup (v[0]);
 #endif
 	for (i=1; i<c; ++i) {
 		if (v[i][0] == '-') {
@@ -314,6 +326,7 @@
 				usage(groups, 1);
 			} else {
 				printf("Unknown option %s.  Try --help\n",v[i]);
+                                free (commandname);
 				return -1;
 			}
 		} else {
@@ -327,6 +340,7 @@
 			}
 			if (!_tinytest_set_flag(groups, test, flag)) {
 				printf("No such test as %s!\n", v[i]);
+                                free (commandname);
 				return -1;
 			}
 		}
@@ -354,6 +368,8 @@
 	else if (opt_verbosity >= 1)
 		printf("%d tests ok.  (%d skipped)\n", n_ok, n_skipped);
 
+        free (commandname);
+
 	return (n_bad == 0) ? 0 : 1;
 }
 
