diff --git a/MasterPassword/C/mpw-cli.c b/MasterPassword/C/mpw-cli.c
index 3f651baa..68f744a4 100644
--- a/MasterPassword/C/mpw-cli.c
+++ b/MasterPassword/C/mpw-cli.c
@@ -25,7 +25,7 @@
static void usage() {
- fprintf( stderr, "Usage: mpw [-u name] [-t type] [-c counter] site\n\n" );
+ fprintf( stderr, "Usage: mpw [-u name] [-t type] [-c counter] [-V version] [-v variant] [-C context] [-h] site\n\n" );
fprintf( stderr, " -u name Specify the full name of the user.\n"
" Defaults to %s in env.\n\n", MP_env_fullname );
fprintf( stderr, " -t type Specify the password's template.\n"
diff --git a/MasterPassword/C/mpw-types.c b/MasterPassword/C/mpw-types.c
index 92d5da5f..4020b1e4 100644
--- a/MasterPassword/C/mpw-types.c
+++ b/MasterPassword/C/mpw-types.c
@@ -21,15 +21,17 @@
const MPSiteType mpw_typeWithName(const char *typeName) {
+ // Lower-case and trim optionally leading "generated" string from typeName to standardize it.
+ size_t stdTypeNameOffset = 0;
size_t stdTypeNameSize = strlen( typeName );
- char stdTypeName[strlen( typeName )];
- if (stdTypeNameSize > strlen( "generated" ))
- strcpy( stdTypeName, typeName + strlen( "generated" ) );
- else
- strcpy( stdTypeName, typeName );
- for (char *tN = stdTypeName; *tN; ++tN)
- *tN = (char)tolower( *tN );
+ if (strcasestr(typeName, "generated" ) == typeName)
+ stdTypeNameSize -= (stdTypeNameOffset = strlen("generated"));
+ char stdTypeName[stdTypeNameSize + 1];
+ for (size_t c = 0; c < stdTypeNameSize; ++c)
+ stdTypeName[c] = (char)tolower( typeName[c + stdTypeNameOffset] );
+ stdTypeName[stdTypeNameSize] = '\0';
+ // Find what site type is represented by the type name.
if (0 == strcmp( stdTypeName, "x" ) || 0 == strcmp( stdTypeName, "max" ) || 0 == strcmp( stdTypeName, "maximum" ))
return MPSiteTypeGeneratedMaximum;
if (0 == strcmp( stdTypeName, "l" ) || 0 == strcmp( stdTypeName, "long" ))
@@ -47,8 +49,7 @@ const MPSiteType mpw_typeWithName(const char *typeName) {
if (0 == strcmp( stdTypeName, "p" ) || 0 == strcmp( stdTypeName, "phrase" ))
return MPSiteTypeGeneratedPhrase;
- fprintf( stderr, "Not a generated type name: %s", stdTypeName );
- abort();
+ ftl( "Not a generated type name: %s", stdTypeName );
}
inline const char **mpw_templatesForType(MPSiteType type, size_t *count) {
diff --git a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
index cefac5ed..5dffcea7 100644
--- a/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
+++ b/MasterPassword/ObjC/Mac/MPPasswordWindowController.m
@@ -605,6 +605,7 @@
CGDirectDisplayID displayID = [self.window.screen.deviceDescription[@"NSScreenNumber"] unsignedIntValue];
CGImageRef capturedImage = CGDisplayCreateImage( displayID );
if (!capturedImage || CGImageGetWidth( capturedImage ) <= 1) {
+ CFRelease( capturedImage );
wrn( @"Failed to capture screen image for display: %d", displayID );
return;
}
diff --git a/Scripts/updatePlist b/Scripts/updatePlist
index aabaf3e5..82b85c8d 100755
--- a/Scripts/updatePlist
+++ b/Scripts/updatePlist
@@ -51,10 +51,11 @@ setSettingWithTitle "Copyright" "$(getPlistWithKey NSHumanReadableCopyright)"
if [[ $DEPLOYMENT_LOCATION = YES ]]; then
# This build is a release. Do some release checks.
+ crashlyticsPlist="$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist"
passed=1
[[ $description != *-dirty ]] || \
{ passed=0; err 'ERROR: Cannot release a dirty version, first commit any changes.'; }
- [[ $(PlistBuddy -c "Print :'API Key'" "$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH/Crashlytics.plist") ]] || \
+ [[ -r "$crashlyticsPlist" && $(PlistBuddy -c "Print :'API Key'" "$crashlyticsPlist" 2>/dev/null) ]] || \
{ passed=0; err 'ERROR: Cannot release: Crashlytics API key is missing.'; }
(( passed )) || \
{ ftl "Failed to pass release checks. Fix the above errors and re-try. Aborting."; exit 1; }
diff --git a/Site/2013-05/img/c-cli.png b/Site/2013-05/img/c-cli.png
index 7f60eab2..1302622c 100644
Binary files a/Site/2013-05/img/c-cli.png and b/Site/2013-05/img/c-cli.png differ
diff --git a/Site/2013-05/index.html b/Site/2013-05/index.html
index 1a7bf01a..6a9a5f37 100644
--- a/Site/2013-05/index.html
+++ b/Site/2013-05/index.html
@@ -82,7 +82,7 @@
iPhone / iPad |
Mac |
Desktop (Java) |
- Terminal (Native C) |
+ Terminal (C) |
Android (Beta) |
Web (Beta)
diff --git a/Site/2013-05/masterpassword-android-2.2.apk b/Site/2013-05/masterpassword-android-2.2.apk
new file mode 100644
index 00000000..7f1df67b
Binary files /dev/null and b/Site/2013-05/masterpassword-android-2.2.apk differ
diff --git a/Site/2013-05/masterpassword-gui-2.2.jar b/Site/2013-05/masterpassword-gui-2.2.jar
new file mode 100644
index 00000000..c08f7e3e
Binary files /dev/null and b/Site/2013-05/masterpassword-gui-2.2.jar differ