Add a flag parameter to dotlock_create.
authorWerner Koch <wk@gnupg.org>
Wed, 28 Sep 2011 13:41:58 +0000 (15:41 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 28 Sep 2011 13:41:58 +0000 (15:41 +0200)
This allows us to extend this function in the future.

15 files changed:
common/ChangeLog
common/asshelp.c
common/dotlock.c
common/dotlock.h
common/t-dotlock.c
g10/gpg.c
g10/gpgv.c
g10/keydb.c
g10/keyring.c
g10/tdbio.c
g13/create.c
g13/g13.c
g13/mount.c
sm/gpgsm.c
sm/keydb.c

index 0f66a41..da016bd 100644 (file)
@@ -2,6 +2,7 @@
 
        * dotlock.c (dotlock_take, dotlock_take_unix, dotlock_take_w32):
        Implement arbitrary timeout values.
+       (dotlock_create): Add arg FLAGS for future extensions.
 
 2011-09-27  Werner Koch  <wk@g10code.com>
 
index 96d9a24..c5d8bdf 100644 (file)
@@ -287,7 +287,7 @@ lock_spawning (lock_spawn_t *lock, const char *homedir, const char *name,
   if (!fname)
     return gpg_error_from_syserror ();
 
-  *lock = dotlock_create (fname);
+  *lock = dotlock_create (fname, 0);
   xfree (fname);
   if (!*lock)
     return gpg_error_from_syserror ();
index e3e9fa3..37a1df3 100644 (file)
@@ -53,7 +53,7 @@
    At program initialization time, the module should be explicitly
    initialized:
 
-      dotlock_create (NULL);
+      dotlock_create (NULL, 0);
 
    This installs an atexit handler and may also initialize mutex etc.
    It is optional for non-threaded applications.  Only the first call
@@ -64,7 +64,7 @@
 
      dotlock_t h
 
-     h = dotlock_create (fname);
+     h = dotlock_create (fname, 0);
      if (!h)
        error ("error creating lock file: %s\n", strerror (errno));
 
@@ -656,17 +656,19 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
 #ifdef HAVE_W32CE_SYSTEM
     wchar_t *wname = utf8_to_wchar (h->lockname);
 
-    h->lockhd = INVALID_HANDLE_VALUE;
     if (wname)
       h->lockhd = CreateFile (wname,
+                              GENERIC_READ|GENERIC_WRITE,
+                              FILE_SHARE_READ|FILE_SHARE_WRITE,
+                              NULL, OPEN_ALWAYS, 0, NULL);
+    else
+      h->lockhd = INVALID_HANDLE_VALUE;
+    jnlib_free (wname);
 #else
     h->lockhd = CreateFile (h->lockname,
-#endif
                             GENERIC_READ|GENERIC_WRITE,
                             FILE_SHARE_READ|FILE_SHARE_WRITE,
                             NULL, OPEN_ALWAYS, 0, NULL);
-#ifdef HAVE_W32CE_SYSTEM
-    jnlib_free (wname);
 #endif
   }
   if (h->lockhd == INVALID_HANDLE_VALUE)
@@ -696,12 +698,15 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
    POSIX systems a temporary file ".#lk.<hostname>.pid[.threadid] is
    used.
 
+   FLAGS must be 0.
+
    The function returns an new handle which needs to be released using
    destroy_dotlock but gets also released at the termination of the
    process.  On error NULL is returned.
  */
+
 dotlock_t
-dotlock_create (const char *file_to_lock)
+dotlock_create (const char *file_to_lock, unsigned int flags)
 {
   static int initialized;
   dotlock_t h;
@@ -715,6 +720,12 @@ dotlock_create (const char *file_to_lock)
   if ( !file_to_lock )
     return NULL;  /* Only initialization was requested.  */
 
+  if (flags)
+    {
+      jnlib_set_errno (EINVAL);
+      return NULL;
+    }
+
   h = jnlib_calloc (1, sizeof *h);
   if (!h)
     return NULL;
index 5fb7891..666d0b7 100644 (file)
@@ -26,8 +26,8 @@ struct dotlock_handle;
 typedef struct dotlock_handle *dotlock_t;
 
 void dotlock_disable (void);
-dotlock_t dotlock_create (const char *file_to_lock);
-void dotlock_destroy ( dotlock_t h );
+dotlock_t dotlock_create (const char *file_to_lock, unsigned int flags);
+void dotlock_destroy (dotlock_t h);
 int dotlock_take (dotlock_t h, long timeout);
 int dotlock_release (dotlock_t h);
 void dotlock_remove_lockfiles (void);
index a352f6e..f81b952 100644 (file)
@@ -90,7 +90,7 @@ lock_and_unlock (const char *fname)
 {
   dotlock_t h;
 
-  h = dotlock_create (fname);
+  h = dotlock_create (fname, 0);
   if (!h)
     die ("error creating lock file for `%s': %s", fname, strerror (errno));
   inf ("lock created");
@@ -129,7 +129,7 @@ main (int argc, char **argv)
     sigaction (SIGINT, &nact, NULL);
   }
 
-  dotlock_create (NULL);  /* Initialize (optional).  */
+  dotlock_create (NULL, 0);  /* Initialize (optional).  */
 
   lock_and_unlock (fname);
 
index 51661b3..c31a558 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1969,7 +1969,7 @@ main (int argc, char **argv)
 
     gnupg_init_signals (0, emergency_cleanup);
 
-    dotlock_create (NULL); /* Register lock file cleanup. */
+    dotlock_create (NULL, 0); /* Register lock file cleanup. */
 
     opt.session_env = session_env_new ();
     if (!opt.session_env)
index 9328343..8ca6752 100644 (file)
@@ -507,9 +507,10 @@ dotlock_disable (void)
 }
 
 dotlock_t
-dotlock_create (const char *file_to_lock)
+dotlock_create (const char *file_to_lock, unsigned int flags)
 {
   (void)file_to_lock;
+  (void)flags;
   return NULL;
 }
 
index e4b9709..9b9b2ed 100644 (file)
@@ -136,7 +136,7 @@ maybe_create_keyring (char *filename, int force)
   /* To avoid races with other instances of gpg trying to create or
      update the keyring (it is removed during an update for a short
      time), we do the next stuff in a locked state. */
-  lockhd = dotlock_create (filename);
+  lockhd = dotlock_create (filename, 0);
   if (!lockhd)
     {
       /* A reason for this to fail is that the directory is not
index 480c0e9..4eb26aa 100644 (file)
@@ -306,7 +306,7 @@ keyring_lock (KEYRING_HANDLE hd, int yes)
             if (!keyring_is_writable(kr))
                 continue;
             if (!kr->lockhd) {
-                kr->lockhd = dotlock_create( kr->fname );
+                kr->lockhd = dotlock_create (kr->fname, 0);
                 if (!kr->lockhd) {
                     log_info ("can't allocate lock for `%s'\n", kr->fname );
                     rc = G10ERR_GENERAL;
index 968d06b..1ab11f2 100644 (file)
@@ -544,7 +544,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
            db_name = fname;
 #ifdef __riscos__
            if( !lockhandle )
-               lockhandle = dotlock_create (db_name);
+              lockhandle = dotlock_create (db_name, 0);
            if( !lockhandle )
                log_fatal( _("can't create lock for `%s'\n"), db_name );
             if( dotlock_make (lockhandle, -1) )
@@ -567,7 +567,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
 
 #ifndef __riscos__
            if( !lockhandle )
-               lockhandle = dotlock_create (db_name);
+              lockhandle = dotlock_create (db_name, 0);
            if( !lockhandle )
                log_fatal( _("can't create lock for `%s'\n"), db_name );
 #endif /* !__riscos__ */
@@ -608,7 +608,7 @@ open_db()
   assert( db_fd == -1 );
 
   if (!lockhandle )
-    lockhandle = dotlock_create (db_name);
+    lockhandle = dotlock_create (db_name, 0);
   if (!lockhandle )
     log_fatal( _("can't create lock for `%s'\n"), db_name );
 #ifdef __riscos__
index 60c1d3d..f907ddb 100644 (file)
@@ -246,7 +246,7 @@ g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys)
   /* 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);
+  lock = dotlock_create (filename, 0);
   if (!lock)
     return gpg_error_from_syserror ();
   if (dotlock_take (lock, 0))
index 972a7ea..8e5532c 100644 (file)
--- a/g13/g13.c
+++ b/g13/g13.c
@@ -383,7 +383,7 @@ main ( int argc, char **argv)
 
   gnupg_init_signals (0, emergency_cleanup);
 
-  dotlock_create (NULL); /* Register locking cleanup.  */
+  dotlock_create (NULL, 0); /* Register locking cleanup.  */
 
   opt.session_env = session_env_new ();
   if (!opt.session_env)
index 198fde0..62eeca1 100644 (file)
@@ -273,7 +273,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint)
     }
 
   /* Try to take a lock.  */
-  lock = dotlock_create (filename);
+  lock = dotlock_create (filename, 0);
   if (!lock)
     {
       xfree (mountpoint_buffer);
index 87f94e2..dc9f2e0 100644 (file)
@@ -928,7 +928,7 @@ main ( int argc, char **argv)
 
   gnupg_init_signals (0, emergency_cleanup);
 
-  dotlock_create (NULL); /* Register lockfile cleanup.  */
+  dotlock_create (NULL, 0); /* Register lockfile cleanup.  */
 
   opt.session_env = session_env_new ();
   if (!opt.session_env)
index 9d1a6ef..86301b3 100644 (file)
@@ -214,7 +214,7 @@ keydb_add_resource (const char *url, int force, int secret, int *auto_created)
               all_resources[used_resources].secret = secret;
 
               all_resources[used_resources].lockhandle
-                = dotlock_create (filename);
+                = dotlock_create (filename, 0);
               if (!all_resources[used_resources].lockhandle)
                 log_fatal ( _("can't create lock for `%s'\n"), filename);