Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: runtime/bin/main.cc

Issue 11275281: Update dart:io to convert strings between UTF8 and current code page (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "include/dart_api.h" 9 #include "include/dart_api.h"
10 #include "include/dart_debugger_api.h" 10 #include "include/dart_debugger_api.h"
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 } 224 }
225 return false; 225 return false;
226 } 226 }
227 227
228 228
229 static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) { 229 static void WriteToPerfEventsFile(const char* buffer, int64_t num_bytes) {
230 ASSERT(perf_events_symbols_file != NULL); 230 ASSERT(perf_events_symbols_file != NULL);
231 perf_events_symbols_file->WriteFully(buffer, num_bytes); 231 perf_events_symbols_file->WriteFully(buffer, num_bytes);
232 } 232 }
233 233
234 static bool Utf8ConvertArgv(int argc, char** argv) {
235 // Convert all the arguments to UTF8. On Windows, the arguments are
236 // encoded in the current code page and not UTF8.
Søren Gjesse 2012/11/13 12:48:45 Document return value.
Mads Ager (google) 2012/11/13 14:50:17 Done.
237 bool result = false;
238 for (int i = 0; i < argc; i++) {
239 char* arg = argv[i];
240 argv[i] = StringUtils::SystemStringToUtf8(arg);
241 if (argv[i] != arg) result = true;
Søren Gjesse 2012/11/13 12:48:45 Maybe change this to if (argv == 0) { result =
Mads Ager (google) 2012/11/13 14:50:17 Done.
242 }
243 return result;
244 }
245
234 246
235 // Parse out the command line arguments. Returns -1 if the arguments 247 // Parse out the command line arguments. Returns -1 if the arguments
236 // are incorrect, 0 otherwise. 248 // are incorrect, 0 otherwise.
237 static int ParseArguments(int argc, 249 static int ParseArguments(int argc,
238 char** argv, 250 char** argv,
239 CommandLineOptions* vm_options, 251 CommandLineOptions* vm_options,
240 char** executable_name, 252 char** executable_name,
241 char** script_name, 253 char** script_name,
242 CommandLineOptions* dart_options, 254 CommandLineOptions* dart_options,
243 bool* print_flags_seen) { 255 bool* print_flags_seen) {
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 char* script_name; 642 char* script_name;
631 CommandLineOptions vm_options(argc); 643 CommandLineOptions vm_options(argc);
632 CommandLineOptions dart_options(argc); 644 CommandLineOptions dart_options(argc);
633 bool print_flags_seen = false; 645 bool print_flags_seen = false;
634 646
635 // Perform platform specific initialization. 647 // Perform platform specific initialization.
636 if (!Platform::Initialize()) { 648 if (!Platform::Initialize()) {
637 fprintf(stderr, "Initialization failed\n"); 649 fprintf(stderr, "Initialization failed\n");
638 } 650 }
639 651
652 // On Windows, the argv strings are code page incoded and not
Søren Gjesse 2012/11/13 12:48:45 incoded -> encoded
Mads Ager (google) 2012/11/13 14:50:17 Done.
653 // utf8. We need to convert them to utf8.
654 bool argv_converted = Utf8ConvertArgv(argc, argv);
655
640 // Parse command line arguments. 656 // Parse command line arguments.
641 if (ParseArguments(argc, 657 if (ParseArguments(argc,
642 argv, 658 argv,
643 &vm_options, 659 &vm_options,
644 &executable_name, 660 &executable_name,
645 &script_name, 661 &script_name,
646 &dart_options, 662 &dart_options,
647 &print_flags_seen) < 0) { 663 &print_flags_seen) < 0) {
648 if (has_help_option) { 664 if (has_help_option) {
649 PrintUsage(); 665 PrintUsage();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 Dart_Handle library = Dart_RootLibrary(); 733 Dart_Handle library = Dart_RootLibrary();
718 if (Dart_IsNull(library)) { 734 if (Dart_IsNull(library)) {
719 return ErrorExit("Unable to find root library for '%s'\n", 735 return ErrorExit("Unable to find root library for '%s'\n",
720 script_name); 736 script_name);
721 } 737 }
722 // Set debug breakpoint if specified on the command line. 738 // Set debug breakpoint if specified on the command line.
723 if (breakpoint_at != NULL) { 739 if (breakpoint_at != NULL) {
724 result = SetBreakpoint(breakpoint_at, library); 740 result = SetBreakpoint(breakpoint_at, library);
725 if (Dart_IsError(result)) { 741 if (Dart_IsError(result)) {
726 return ErrorExit("Error setting breakpoint at '%s': %s\n", 742 return ErrorExit("Error setting breakpoint at '%s': %s\n",
727 breakpoint_at, 743 breakpoint_at,
728 Dart_GetError(result)); 744 Dart_GetError(result));
729 } 745 }
730 } 746 }
731 747
732 // Lookup and invoke the top level main function. 748 // Lookup and invoke the top level main function.
733 result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL); 749 result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL);
734 if (Dart_IsError(result)) { 750 if (Dart_IsError(result)) {
735 return ErrorExit("%s\n", Dart_GetError(result)); 751 return ErrorExit("%s\n", Dart_GetError(result));
736 } 752 }
737 // Keep handling messages until the last active receive port is closed. 753 // Keep handling messages until the last active receive port is closed.
738 result = Dart_RunLoop(); 754 result = Dart_RunLoop();
739 if (Dart_IsError(result)) { 755 if (Dart_IsError(result)) {
740 return ErrorExit("%s\n", Dart_GetError(result)); 756 return ErrorExit("%s\n", Dart_GetError(result));
741 } 757 }
742 758
743 Dart_ExitScope(); 759 Dart_ExitScope();
744 // Dump symbol information for the profiler. 760 // Dump symbol information for the profiler.
745 DumpPprofSymbolInfo(); 761 DumpPprofSymbolInfo();
746 // Shutdown the isolate. 762 // Shutdown the isolate.
747 Dart_ShutdownIsolate(); 763 Dart_ShutdownIsolate();
748 // Terminate process exit-code handler. 764 // Terminate process exit-code handler.
749 Process::TerminateExitCodeHandler(); 765 Process::TerminateExitCodeHandler();
766 // Free copied argument strings if converted.
767 if (argv_converted) {
768 for (int i = 0; i < argc; i++) free(argv[i]);
769 }
750 770
751 return 0; 771 return 0;
752 } 772 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698