mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-08 22:55:42 +01:00
alsactl: Store lockfile in /var/lock, add -D option to specify the lock dir
It can not be generally assumed that the directories in which asound.state resides are writable. Use /var/lock and allow users to alter this path. Signed-off-by: Julian Scheel <julian@jusst.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
0d46081679
commit
2607d8deee
3 changed files with 18 additions and 3 deletions
|
@ -38,6 +38,9 @@
|
|||
#ifndef SYS_PIDFILE
|
||||
#define SYS_PIDFILE "/var/run/alsactl.pid"
|
||||
#endif
|
||||
#ifndef SYS_LOCKPATH
|
||||
#define SYS_LOCKPATH "/var/lock"
|
||||
#endif
|
||||
|
||||
int debugflag = 0;
|
||||
int force_restore = 1;
|
||||
|
@ -46,6 +49,7 @@ int do_lock = 0;
|
|||
int use_syslog = 0;
|
||||
char *command;
|
||||
char *statefile = NULL;
|
||||
char *lockpath = SYS_LOCKPATH;
|
||||
|
||||
#define TITLE 0x0100
|
||||
#define HEADER 0x0200
|
||||
|
@ -71,6 +75,7 @@ static struct arg args[] = {
|
|||
{ HEADER, NULL, "Available state options:" },
|
||||
{ FILEARG | 'f', "file", "configuration file (default " SYS_ASOUNDRC ")" },
|
||||
{ 'l', "lock", "use file locking to serialize concurrent access" },
|
||||
{ FILEARG | 'D', "lock-dir", "directory to use for lock files (default " SYS_LOCKPATH ")" },
|
||||
{ 'F', "force", "try to restore the matching controls as much as possible" },
|
||||
{ 0, NULL, " (default mode)" },
|
||||
{ 'g', "ignore", "ignore 'No soundcards found' error" },
|
||||
|
@ -232,6 +237,8 @@ int main(int argc, char *argv[])
|
|||
case 'l':
|
||||
do_lock = 1;
|
||||
break;
|
||||
case 'D':
|
||||
lockpath = optarg;
|
||||
case 'F':
|
||||
force_restore = 1;
|
||||
break;
|
||||
|
|
|
@ -5,6 +5,7 @@ extern int do_lock;
|
|||
extern int use_syslog;
|
||||
extern char *command;
|
||||
extern char *statefile;
|
||||
extern char *lockpath;
|
||||
|
||||
void info_(const char *fcn, long line, const char *fmt, ...);
|
||||
void error_(const char *fcn, long line, const char *fmt, ...);
|
||||
|
|
|
@ -36,17 +36,24 @@ static int state_lock_(const char *file, int lock, int timeout)
|
|||
struct flock lck;
|
||||
struct stat st;
|
||||
char lcktxt[12];
|
||||
char *filename;
|
||||
char *nfile;
|
||||
|
||||
if (!do_lock)
|
||||
return 0;
|
||||
nfile = malloc(strlen(file) + 6);
|
||||
|
||||
/* only use the actual filename, not the path */
|
||||
filename = strrchr(file, '/');
|
||||
if (!filename)
|
||||
filename = file;
|
||||
|
||||
nfile = malloc(strlen(lockpath) + strlen(filename) + 7);
|
||||
if (nfile == NULL) {
|
||||
error("No enough memory...");
|
||||
return -ENOMEM;
|
||||
}
|
||||
strcpy(nfile, file);
|
||||
strcat(nfile, ".lock");
|
||||
|
||||
sprintf(nfile, "%s/%s.lock", lockpath, filename);
|
||||
lck.l_type = lock ? F_WRLCK : F_UNLCK;
|
||||
lck.l_whence = SEEK_SET;
|
||||
lck.l_start = 0;
|
||||
|
|
Loading…
Reference in a new issue