diff options
Diffstat (limited to 'src/lockfile.c')
-rw-r--r-- | src/lockfile.c | 235 |
1 files changed, 131 insertions, 104 deletions
diff --git a/src/lockfile.c b/src/lockfile.c index 646ba01..6b08ae0 100644 --- a/src/lockfile.c +++ b/src/lockfile.c @@ -11,6 +11,9 @@ static char rcsid[] = /* * $Log$ + * Revision 1.12 2008/03/03 06:04:42 james + * *** empty log message *** + * * Revision 1.11 2008/03/02 10:38:18 james * *** empty log message *** * @@ -129,10 +132,11 @@ void filelist_print (Filelist * fl, FILE * f) { Filelist_ent *fle; - if (!fl) { - fprintf (f, "(empty list)\n"); - return; - } + if (!fl) + { + fprintf (f, "(empty list)\n"); + return; + } for (fle = fl->head; fle; fle = fle->next) fprintf (f, "%s\n", fle->name); } @@ -147,14 +151,18 @@ chown_uucp (fd) static int uuid = -1, ugid; struct passwd *pw; - if (uuid < 0) { - if (pw = getpwnam ("uucp")) { - uuid = pw->pw_uid; - ugid = pw->pw_gid; - } else { - return -1; + if (uuid < 0) + { + if (pw = getpwnam ("uucp")) + { + uuid = pw->pw_uid; + ugid = pw->pw_gid; + } + else + { + return -1; + } } - } return fchown (fd, uuid, ugid); } @@ -181,25 +189,28 @@ lockfile_make (char *name) unlink (tmpfn); fd = open (tmpfn, O_WRONLY | O_CREAT | O_TRUNC, 0444); - if (fd < 0) { - unlink (tmpfn); - return -1; - } + if (fd < 0) + { + unlink (tmpfn); + return -1; + } write (fd, buf, i); fchmod (fd, 044); - if (chown_uucp (fd)) { - close (fd); - unlink (tmpfn); - return -1; - } + if (chown_uucp (fd)) + { + close (fd); + unlink (tmpfn); + return -1; + } close (fd); - if (link (tmpfn, name) < 0) { - unlink (tmpfn); - return -1; - } + if (link (tmpfn, name) < 0) + { + unlink (tmpfn); + return -1; + } unlink (tmpfn); return 0; @@ -218,27 +229,29 @@ lockfile_add_places (Filelist * fl, char *leaf) }; int i; - for (i = 0; i < (sizeof (lock_dirs) / sizeof (char *)); ++i) { - if (stat (lock_dirs[i], &stbuf)) - continue; - strcpy (buf, lock_dirs[i]); - strcat (buf, "/"); - strcat (buf, leaf); - filelist_add (fl, buf); - } + for (i = 0; i < (sizeof (lock_dirs) / sizeof (char *)); ++i) + { + if (stat (lock_dirs[i], &stbuf)) + continue; + strcpy (buf, lock_dirs[i]); + strcat (buf, "/"); + strcat (buf, leaf); + filelist_add (fl, buf); + } } static void do_tedious_mangling (Filelist * fl, char *buf, char *ptr, char inv, int lower) { - while (*ptr) { - if (lower && (*ptr >= 'A') && (*ptr <= 'Z')) - *ptr |= 32; - if (*ptr == '/') - *ptr = inv; - ptr++; - } + while (*ptr) + { + if (lower && (*ptr >= 'A') && (*ptr <= 'Z')) + *ptr |= 32; + if (*ptr == '/') + *ptr = inv; + ptr++; + } lockfile_add_places (fl, buf); } @@ -277,10 +290,11 @@ lockfile_add_name_from_path (Filelist * fl, char *file) ptr++; lockfile_regularize_and_add (fl, ptr); - if (!strncmp (ptr, "dev/", 4)) { - ptr += 4; - lockfile_regularize_and_add (fl, ptr); - } + if (!strncmp (ptr, "dev/", 4)) + { + ptr += 4; + lockfile_regularize_and_add (fl, ptr); + } } @@ -305,20 +319,21 @@ lockfile_check_dir_for_dev (Filelist * fl, char *dir, dev_t dev) if (!d) return; - while ((de = readdir (d))) { - strcpy (buf, dir); - strcat (buf, de->d_name); + while ((de = readdir (d))) + { + strcpy (buf, dir); + strcat (buf, de->d_name); - if (stat (buf, &ent_stat)) - continue; - if (!S_ISCHR (ent_stat.st_mode)) - continue; - if (ent_stat.st_rdev != dev) - continue; + if (stat (buf, &ent_stat)) + continue; + if (!S_ISCHR (ent_stat.st_mode)) + continue; + if (ent_stat.st_rdev != dev) + continue; - lockfile_add_name_from_path (fl, buf); + lockfile_add_name_from_path (fl, buf); - } + } closedir (d); } @@ -365,28 +380,31 @@ remove_stale_lock (char *path) apid[length] = 0; pid = 0; - if (length == sizeof (pid) || sscanf (apid, "%d", &pid) != 1 || pid == 0) { - pid = *((int *) apid); + if (length == sizeof (pid) || sscanf (apid, "%d", &pid) != 1 || pid == 0) + { + pid = *((int *) apid); #ifdef LOCK_ASCII - fprintf (stderr, - "compiled with ascii locks, found binary lock file (length=%d, pid=%d)!", - length, pid); + fprintf (stderr, + "compiled with ascii locks, found binary lock file (length=%d, pid=%d)!", + length, pid); #endif - } + } #ifdef LOCK_BINARY - else { - fprintf (stderr, - "compiled with binary locks, found ascii lock file (length=%d, pid=%d)!", - length, pid); - } + else + { + fprintf (stderr, + "compiled with binary locks, found ascii lock file (length=%d, pid=%d)!", + length, pid); + } #endif close (fd); - if ((kill (pid, 0) < 0) && (errno == ESRCH)) { - fprintf (stderr, "removing stale lock file %s\n", path); - unlink (path); - } + if ((kill (pid, 0) < 0) && (errno == ESRCH)) + { + fprintf (stderr, "removing stale lock file %s\n", path); + unlink (path); + } } @@ -396,11 +414,12 @@ lockfile_remove_stale (Filelist * fl) Filelist_ent *fle; struct stat buf; - for (fle = fl->head; fle; fle = fle->next) { - if (stat (fle->name, &buf)) - continue; - remove_stale_lock (fle->name); - } + for (fle = fl->head; fle; fle = fle->next) + { + if (stat (fle->name, &buf)) + continue; + remove_stale_lock (fle->name); + } } @@ -416,14 +435,16 @@ lockfile_lock (Filelist * fl) lockfile_remove_stale (fl); - for (fle = fl->head; fle; fle = fle->next) { - if (lockfile_make (fle->name)) { - fprintf (stderr, "Failed to get lockfile %s\n", fle->name); - filelist_free (ret); - return NULL; + for (fle = fl->head; fle; fle = fle->next) + { + if (lockfile_make (fle->name)) + { + fprintf (stderr, "Failed to get lockfile %s\n", fle->name); + filelist_free (ret); + return NULL; + } + filelist_add (ret, fle->name); } - filelist_add (ret, fle->name); - } return ret; } @@ -432,10 +453,11 @@ void lockfile_unlock (Filelist * fl) { - while (fl->head) { - unlink (fl->head->name); - filelist_remove (fl, fl->head); - } + while (fl->head) + { + unlink (fl->head->name); + filelist_remove (fl, fl->head); + } } @@ -452,10 +474,11 @@ serial_lock_check (Serial_lock * l) if (l->mode == SERIAL_LOCK_ACTIVE) return 0; - for (fle = l->locks_to_check->head; fle; fle = fle->next) { - if (!stat (fle->name, &buf)) - locks_found++; - } + for (fle = l->locks_to_check->head; fle; fle = fle->next) + { + if (!stat (fle->name, &buf)) + locks_found++; + } if (!locks_found) return 0; @@ -463,10 +486,11 @@ serial_lock_check (Serial_lock * l) gettimeofday (&now, NULL); timersub (&now, &l->last_stale_purge, &dif); - if (dif.tv_sec > STALE_CHECK_INTERVAL) { - lockfile_remove_stale (l->locks_to_check); - l->last_stale_purge = now; - } + if (dif.tv_sec > STALE_CHECK_INTERVAL) + { + lockfile_remove_stale (l->locks_to_check); + l->last_stale_purge = now; + } return 1; } @@ -477,14 +501,16 @@ serial_lock_free (Serial_lock * l) if (!l) return; - if (l->locks_held) { - lockfile_unlock (l->locks_held); - filelist_free (l->locks_held); - } + if (l->locks_held) + { + lockfile_unlock (l->locks_held); + filelist_free (l->locks_held); + } - if (l->locks_to_check) { - filelist_free (l->locks_to_check); - } + if (l->locks_to_check) + { + filelist_free (l->locks_to_check); + } free (l); } @@ -510,10 +536,11 @@ serial_lock_new (char *dev, int mode) return l; l->locks_held = lockfile_lock (l->locks_to_check); - if (!l->locks_held) { - serial_lock_free (l); - return NULL; - } + if (!l->locks_held) + { + serial_lock_free (l); + return NULL; + } return l; } |