aboutsummaryrefslogtreecommitdiffstats
path: root/g10/photoid.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/photoid.c')
-rw-r--r--g10/photoid.c57
1 files changed, 37 insertions, 20 deletions
diff --git a/g10/photoid.c b/g10/photoid.c
index 5dd4e436a..885bbca01 100644
--- a/g10/photoid.c
+++ b/g10/photoid.c
@@ -44,12 +44,12 @@
/* Generate a new photo id packet, or return NULL if canceled */
PKT_user_id *
-generate_photo_id(PKT_public_key *pk)
+generate_photo_id(PKT_public_key *pk,const char *photo_name)
{
PKT_user_id *uid;
int error=1,i;
unsigned int len;
- char *filename=NULL;
+ char *filename;
byte *photo=NULL;
byte header[16];
IOBUF file;
@@ -65,34 +65,43 @@ generate_photo_id(PKT_public_key *pk)
#define EXTRA_UID_NAME_SPACE 71
uid=xmalloc_clear(sizeof(*uid)+71);
- tty_printf(_("\nPick an image to use for your photo ID. "
- "The image must be a JPEG file.\n"
- "Remember that the image is stored within your public key. "
- "If you use a\n"
- "very large picture, your key will become very large as well!\n"
- "Keeping the image close to 240x288 is a good size to use.\n"));
+ if(photo_name && *photo_name)
+ filename=make_filename(photo_name,(void *)NULL);
+ else
+ {
+ tty_printf(_("\nPick an image to use for your photo ID."
+ " The image must be a JPEG file.\n"
+ "Remember that the image is stored within your public key."
+ " If you use a\n"
+ "very large picture, your key will become very large"
+ " as well!\n"
+ "Keeping the image close to 240x288 is a good size"
+ " to use.\n"));
+ filename=NULL;
+ }
while(photo==NULL)
{
- char *tempname;
-
- tty_printf("\n");
+ if(filename==NULL)
+ {
+ char *tempname;
- xfree(filename);
+ tty_printf("\n");
- tty_enable_completion(NULL);
+ tty_enable_completion(NULL);
- tempname=cpr_get("photoid.jpeg.add",
- _("Enter JPEG filename for photo ID: "));
+ tempname=cpr_get("photoid.jpeg.add",
+ _("Enter JPEG filename for photo ID: "));
- tty_disable_completion();
+ tty_disable_completion();
- filename=make_filename(tempname,(void *)NULL);
+ filename=make_filename(tempname,(void *)NULL);
- xfree(tempname);
+ xfree(tempname);
- if(strlen(filename)==0)
- goto scram;
+ if(strlen(filename)==0)
+ goto scram;
+ }
file=iobuf_open(filename);
if (file && is_secured_file (iobuf_get_fd (file)))
@@ -105,6 +114,8 @@ generate_photo_id(PKT_public_key *pk)
{
log_error(_("unable to open JPEG file `%s': %s\n"),
filename,strerror(errno));
+ xfree(filename);
+ filename=NULL;
continue;
}
@@ -116,6 +127,8 @@ generate_photo_id(PKT_public_key *pk)
_("Are you sure you want to use it? (y/N) ")))
{
iobuf_close(file);
+ xfree(filename);
+ filename=NULL;
continue;
}
}
@@ -131,6 +144,8 @@ generate_photo_id(PKT_public_key *pk)
log_error(_("`%s' is not a JPEG file\n"),filename);
xfree(photo);
photo=NULL;
+ xfree(filename);
+ filename=NULL;
continue;
}
@@ -153,6 +168,8 @@ generate_photo_id(PKT_public_key *pk)
free_attributes(uid);
xfree(photo);
photo=NULL;
+ xfree(filename);
+ filename=NULL;
continue;
}
}