From ebbc3e7cd2086a9f62a857dffe9ab0bd1f5da768 Mon Sep 17 00:00:00 2001 From: Benjamin Dobell Date: Fri, 8 Mar 2013 00:00:52 +1100 Subject: - Removed legacy command line hard-coded partition name parameters. - As a result of the above two points, there are no "known boot partitions", and hence boot partitions are not automatically flashed last. - Made partitions flash in the order in order in which partition arguments are specified. Hence, it's recommended that you specify boot partitions last. - Added --usb-level argument that can be used for debugging libusbx, or flashing issues in general. - Removed generally non-functional firmware dumping behaviour. - Removed auto-resume functionality - Although this feature was definitely nice to have; I believe it may be responsible for flashing compatibility issues for a variety of devices. - As a result of the above. In order perform another action after a --no-reboot action, you must provide the --resume flag. - Heimdall Frontend also has support for specifying the --resume flag via a GUI. Heimdall Frontend also tries to keep track of your actions and enable "Resume" automatically after a "No Reboot" action. - Refactored quite a few of the actions, and code responsible for flashing (particularly PIT file flashing). - Bumped version to 1.4RC3 *however* this commit is not yet an official release candidate. It's still a WIP. In particular build files still have not been updated for Linux and OS X. --- heimdall/source/Arguments.cpp | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'heimdall/source/Arguments.cpp') diff --git a/heimdall/source/Arguments.cpp b/heimdall/source/Arguments.cpp index 1c3a17e..7f2d9ee 100644 --- a/heimdall/source/Arguments.cpp +++ b/heimdall/source/Arguments.cpp @@ -24,20 +24,21 @@ #include "Interface.h" #include "Utility.h" +using namespace std; using namespace Heimdall; -FlagArgument *FlagArgument::ParseArgument(int argc, char **argv, int& argi) +FlagArgument *FlagArgument::ParseArgument(const std::string& name, int argc, char **argv, int& argi) { - return new FlagArgument(); + return new FlagArgument(name); } -StringArgument *StringArgument::ParseArgument(int argc, char **argv, int& argi) +StringArgument *StringArgument::ParseArgument(const std::string& name, int argc, char **argv, int& argi) { if (++argi < argc) { - return (new StringArgument(argv[argi])); + return (new StringArgument(name, argv[argi])); } else { @@ -48,7 +49,7 @@ StringArgument *StringArgument::ParseArgument(int argc, char **argv, int& argi) -UnsignedIntegerArgument *UnsignedIntegerArgument::ParseArgument(int argc, char **argv, int& argi) +UnsignedIntegerArgument *UnsignedIntegerArgument::ParseArgument(const std::string& name, int argc, char **argv, int& argi) { UnsignedIntegerArgument *unsignedIntegerArgument = nullptr; @@ -57,7 +58,7 @@ UnsignedIntegerArgument *UnsignedIntegerArgument::ParseArgument(int argc, char * unsigned int value; if (Utility::ParseUnsignedInt(value, argv[argi]) == kNumberParsingStatusSuccess) - unsignedIntegerArgument = new UnsignedIntegerArgument(value); + unsignedIntegerArgument = new UnsignedIntegerArgument(name, value); else Interface::Print("%s must be a positive integer.", argv[argi - 1]); } @@ -81,8 +82,8 @@ Arguments::Arguments(const map& argumentTypes, const map::const_iterator it = arguments.begin(); it != arguments.end(); it++) - delete it->second; + for (vector::const_iterator it = argumentVector.begin(); it != argumentVector.end(); it++) + delete *it; } bool Arguments::ParseArguments(int argc, char **argv, int argi) @@ -158,6 +159,10 @@ bool Arguments::ParseArguments(int argc, char **argv, int argi) } } + // We don't want to insert wild-cards into our argument map. + if (argumentName == "%d" || argumentName == "%s") + argumentName = nonwildcardArgumentName; + Argument *argument = nullptr; if (argumentTypeIt != argumentTypes.end()) @@ -165,15 +170,15 @@ bool Arguments::ParseArguments(int argc, char **argv, int argi) switch (argumentTypeIt->second) { case kArgumentTypeFlag: - argument = FlagArgument::ParseArgument(argc, argv, argi); + argument = FlagArgument::ParseArgument(argumentName, argc, argv, argi); break; case kArgumentTypeString: - argument = StringArgument::ParseArgument(argc, argv, argi); + argument = StringArgument::ParseArgument(argumentName, argc, argv, argi); break; case kArgumentTypeUnsignedInteger: - argument = UnsignedIntegerArgument::ParseArgument(argc, argv, argi); + argument = UnsignedIntegerArgument::ParseArgument(argumentName, argc, argv, argi); break; default: @@ -186,21 +191,19 @@ bool Arguments::ParseArguments(int argc, char **argv, int argi) Interface::Print("Unknown argument: %s\n\n", argv[argi]); } - // We don't want to insert wild-cards into our argument map. - if (argumentName == "%d" || argumentName == "%s") - argumentName = nonwildcardArgumentName; - if (argument) { - pair::iterator, bool> insertResult = arguments.insert(pair(argumentName, argument)); + pair::iterator, bool> insertResult = argumentMap.insert(pair(argumentName, argument)); if (!insertResult.second) { - Interface::Print("Duplicate argument: %s (%s)\n\n", argv[argi], insertResult.first->first.c_str()); + Interface::Print("Duplicate argument: %s (%s)\n\n", argv[argi], argumentName); delete argument; return (false); } + + argumentVector.push_back(argument); } else { -- cgit v1.1 From ef7c9a6377a80741921240a16d02ea09adf929f9 Mon Sep 17 00:00:00 2001 From: Benjamin Dobell Date: Sun, 10 Mar 2013 01:26:22 +1100 Subject: Fixed output bug attempting to log a std::string instead of a C-style string with printf. --- heimdall/source/Arguments.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'heimdall/source/Arguments.cpp') diff --git a/heimdall/source/Arguments.cpp b/heimdall/source/Arguments.cpp index 7f2d9ee..9a40540 100644 --- a/heimdall/source/Arguments.cpp +++ b/heimdall/source/Arguments.cpp @@ -197,7 +197,7 @@ bool Arguments::ParseArguments(int argc, char **argv, int argi) if (!insertResult.second) { - Interface::Print("Duplicate argument: %s (%s)\n\n", argv[argi], argumentName); + Interface::Print("Duplicate argument: %s (%s)\n\n", argv[argi], argumentName.c_str()); delete argument; return (false); -- cgit v1.1 From 07dcba54fc8cc5b7c6515305aa233e24a58adc94 Mon Sep 17 00:00:00 2001 From: Benjamin Dobell Date: Mon, 13 May 2013 00:08:30 +1000 Subject: Update copyright notices, version identifier and documentation for 1.4.0 release. --- heimdall/source/Arguments.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'heimdall/source/Arguments.cpp') diff --git a/heimdall/source/Arguments.cpp b/heimdall/source/Arguments.cpp index 9a40540..a37572d 100644 --- a/heimdall/source/Arguments.cpp +++ b/heimdall/source/Arguments.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2012 Benjamin Dobell, Glass Echidna +/* Copyright (c) 2010-2013 Benjamin Dobell, Glass Echidna Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal -- cgit v1.1