diff --git a/programs/wince_main.c b/programs/wince_main.c
index 832f9b5..30a8a3c 100644
--- a/programs/wince_main.c
+++ b/programs/wince_main.c
@@ -1,46 +1,46 @@
-/*
- *  Windows CE console application entry point
- *
+/*
+ *  Windows CE console application entry point
+ *
  *  Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
- *
- *  This file is part of mbed TLS (https://tls.mbed.org)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#if defined(_WIN32_WCE)
-
-#include <windows.h>
-
-extern int main( int, const char ** );
-
-int _tmain( int argc, _TCHAR* targv[] )
-{
-    char **argv;
-    int i;
-
-    argv = ( char ** ) calloc( argc, sizeof( char * ) );
-
-    for ( i = 0; i < argc; i++ ) {
-        size_t len;
-        len = _tcslen( targv[i] ) + 1;
-        argv[i] = ( char * ) calloc( len, sizeof( char ) );
-        wcstombs( argv[i], targv[i], len );
-    }
-
-    return main( argc, argv );
-}
-
-#endif  /* defined(_WIN32_WCE) */
+ *
+ *  This file is part of mbed TLS (https://tls.mbed.org)
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#if defined(_WIN32_WCE)
+
+#include <windows.h>
+
+extern int main( int, const char ** );
+
+int _tmain( int argc, _TCHAR* targv[] )
+{
+    char **argv;
+    int i;
+
+    argv = ( char ** ) calloc( argc, sizeof( char * ) );
+
+    for ( i = 0; i < argc; i++ ) {
+        size_t len;
+        len = _tcslen( targv[i] ) + 1;
+        argv[i] = ( char * ) calloc( len, sizeof( char ) );
+        wcstombs( argv[i], targv[i], len );
+    }
+
+    return main( argc, argv );
+}
+
+#endif  /* defined(_WIN32_WCE) */
