diff options
author | reinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2003-09-19 08:40:32 +0000 |
---|---|---|
committer | reinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f> | 2003-09-19 08:40:32 +0000 |
commit | a47170396bc75a5e1f0414cd878b82249e07386d (patch) | |
tree | 06543ada3d62d66d6f665ee5bd103c7d6c6a14c0 /lock.c | |
parent | 2f8b80242a07e24a663dce4200e0104ec6f553e9 (diff) | |
download | lcd4linux-a47170396bc75a5e1f0414cd878b82249e07386d.tar.gz |
[lcd4linux @ 2003-09-19 08:40:32 by reinelt]
increased version number to 0.9.12
port locking is done as /var/lock/LCK..usb_tts_0 for /dev/usb/tts/0
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@246 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to '')
-rw-r--r-- | lock.c | 50 |
1 files changed, 35 insertions, 15 deletions
@@ -1,4 +1,4 @@ -/* $Id: lock.c,v 1.3 2001/04/27 05:04:57 reinelt Exp $ +/* $Id: lock.c,v 1.4 2003/09/19 08:40:32 reinelt Exp $ * * UUCP style locking * @@ -20,6 +20,12 @@ * * * $Log: lock.c,v $ + * Revision 1.4 2003/09/19 08:40:32 reinelt + * + * + * increased version number to 0.9.12 + * port locking is done as /var/lock/LCK..usb_tts_0 for /dev/usb/tts/0 + * * Revision 1.3 2001/04/27 05:04:57 reinelt * * replaced OPEN_MAX with sysconf() @@ -66,22 +72,29 @@ #include "lock.h" -pid_t lock_port (char *port) +pid_t lock_port (char *Port) { char lockfile[256]; char tempfile[256]; char buffer[16]; - char *p; + char *port, *p; int fd, len, pid; - if ((p=strrchr (port, '/'))==NULL) - p=port; - else - p++; + if (strncmp(Port, "/dev/", 5)==0) { + port=strdup(Port+5); + } else { + port=strdup(Port); + } + + while ((p=strchr(port, '/'))!=NULL) { + *p='_'; + } - snprintf(lockfile, sizeof(lockfile), LOCK, p); + snprintf(lockfile, sizeof(lockfile), LOCK, port); snprintf(tempfile, sizeof(tempfile), LOCK, "TMP.XXXXXX"); + free (port); + if ((fd=mkstemp(tempfile))==-1) { error ("mkstemp(%s) failed: %s", tempfile, strerror(errno)); return -1; @@ -157,17 +170,24 @@ pid_t lock_port (char *port) } -pid_t unlock_port (char *port) +pid_t unlock_port (char *Port) { char lockfile[256]; - char *p; + char *port, *p; - if ((p=strrchr (port, '/'))==NULL) - p=port; - else - p++; + if (strncmp(Port, "/dev/", 5)==0) { + port=strdup(Port+5); + } else { + port=strdup(Port); + } - snprintf(lockfile, sizeof(lockfile), LOCK, p); + while ((p=strchr(port, '/'))!=NULL) { + *p='_'; + } + + snprintf(lockfile, sizeof(lockfile), LOCK, port); unlink (lockfile); + free (port); + return 0; } |