diff options
Diffstat (limited to 'gnu/libexec/uucp/libunix/lcksys.c')
-rw-r--r-- | gnu/libexec/uucp/libunix/lcksys.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/gnu/libexec/uucp/libunix/lcksys.c b/gnu/libexec/uucp/libunix/lcksys.c index c1b0efa..ab2e2c8 100644 --- a/gnu/libexec/uucp/libunix/lcksys.c +++ b/gnu/libexec/uucp/libunix/lcksys.c @@ -8,21 +8,39 @@ #include "sysdep.h" #include "system.h" -/* Get the name of a system lock file. */ +/* Do the actual lock or unlock. */ -static char *zssys_lock_name P((const struct uuconf_system *qsys, char *z)); +static boolean fslock_sys P((boolean, const char *)); -#define LOCKNAMELEN (sizeof "LCK..12345678") - -static char * -zssys_lock_name (qsys, z) - const struct uuconf_system *qsys; - char *z; +static boolean +fslock_sys (flock, zname) + boolean flock; + const char *zname; { - strcpy (z, "LCK.."); - strncpy (z + sizeof "LCK.." - 1, qsys->uuconf_zname, 8); - z[sizeof "LCK.." - 1 + 8] = '\0'; - return z; + size_t clen; + char *z; + boolean fret; + + clen = strlen (zname); + +#if ! HAVE_LONG_FILE_NAMES + if (clen > 8) + clen = 8; +#endif + + z = zbufalc (sizeof "LCK.." + clen); + memcpy (z, "LCK..", sizeof "LCK.." - 1); + memcpy (z + sizeof "LCK.." - 1, zname, clen); + z[sizeof "LCK.." - 1 + clen] = '\0'; + + if (flock) + fret = fsdo_lock (z, FALSE, (boolean *) NULL); + else + fret = fsdo_unlock (z, FALSE); + + ubuffree (z); + + return fret; } /* Lock a remote system. */ @@ -31,9 +49,7 @@ boolean fsysdep_lock_system (qsys) const struct uuconf_system *qsys; { - char ab[LOCKNAMELEN]; - - return fsdo_lock (zssys_lock_name (qsys, ab), FALSE, (boolean *) NULL); + return fslock_sys (TRUE, qsys->uuconf_zname); } /* Unlock a remote system. */ @@ -42,7 +58,5 @@ boolean fsysdep_unlock_system (qsys) const struct uuconf_system *qsys; { - char ab[LOCKNAMELEN]; - - return fsdo_unlock (zssys_lock_name (qsys, ab), FALSE); + return fslock_sys (FALSE, qsys->uuconf_zname); } |