aboutsummaryrefslogtreecommitdiffstats
path: root/g13/create.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-02-02 08:03:37 +0000
committerWerner Koch <[email protected]>2016-02-13 16:06:39 +0000
commitdc1dbc43a6bfb2f3e6a1cc2ca089e0318b3af0ed (patch)
tree40b62847151302949de2e4385c6f2201b7f95fab /g13/create.c
parentg13: Return an error for non-existing device. (diff)
downloadgnupg-dc1dbc43a6bfb2f3e6a1cc2ca089e0318b3af0ed.tar.gz
gnupg-dc1dbc43a6bfb2f3e6a1cc2ca089e0318b3af0ed.zip
g13: Re-factor high level create code.
* g13/create.c (g13_create_container): Factor some code out to ... * g13/backend.c (be_take_lock_for_create): new. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g13/create.c')
-rw-r--r--g13/create.c31
1 files changed, 3 insertions, 28 deletions
diff --git a/g13/create.c b/g13/create.c
index 91b290cd1..3dac903df 100644
--- a/g13/create.c
+++ b/g13/create.c
@@ -239,35 +239,10 @@ g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys)
if (!keys)
return gpg_error (GPG_ERR_NO_PUBKEY);
- /* A quick check to see that no container with that name already
- exists. */
- if (!access (filename, F_OK))
- return gpg_error (GPG_ERR_EEXIST);
-
- /* Take a lock and proceed with the creation. If there is a lock we
- immediately return an error because for creation it does not make
- sense to wait. */
- lock = dotlock_create (filename, 0);
- if (!lock)
- return gpg_error_from_syserror ();
- if (dotlock_take (lock, 0))
- {
- err = gpg_error_from_syserror ();
- goto leave;
- }
- else
- err = 0;
-
- /* Check again that the file does not exist. */
- {
- struct stat sb;
+ err = be_take_lock_for_create (ctrl, filename, &lock);
+ if (err)
+ goto leave;
- if (!stat (filename, &sb))
- {
- err = gpg_error (GPG_ERR_EEXIST);
- goto leave;
- }
- }
/* And a possible detached file or directory may not exist either. */
err = be_get_detached_name (ctrl->conttype, filename,
&detachedname, &detachedisdir);