mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-24 05:55:59 +03:00
lock: Use wide char types for lock functions.
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
parent
70495d3ede
commit
9f9209bba0
1 changed files with 29 additions and 12 deletions
|
@ -126,12 +126,21 @@ static pid_t _csync_lock_read(const char *lockfile) {
|
|||
ssize_t rc;
|
||||
int fd;
|
||||
pid_t pid;
|
||||
mbchar_t *wlockfile;
|
||||
|
||||
/* Read PID from existing lock */
|
||||
#ifdef _WIN32
|
||||
_fmode = _O_BINARY;
|
||||
_fmode = _O_BINARY;
|
||||
#endif
|
||||
if ((fd = open(lockfile, O_RDONLY)) < 0) {
|
||||
|
||||
wlockfile = c_utf8_to_locale(lockfile);
|
||||
if (wlockfile == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = _topen(wlockfile, O_RDONLY);
|
||||
c_free_locale_string(wlockfile);
|
||||
if (fd < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -159,15 +168,18 @@ static pid_t _csync_lock_read(const char *lockfile) {
|
|||
|
||||
/* Check if process is still alive */
|
||||
if (kill(pid, 0) < 0 && errno == ESRCH) {
|
||||
/* Process is dead. Remove stale lock. */
|
||||
if (unlink(lockfile) < 0) {
|
||||
strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
|
||||
"Unable to remove stale lock %s - %s",
|
||||
lockfile,
|
||||
errbuf);
|
||||
}
|
||||
return -1;
|
||||
/* Process is dead. Remove stale lock. */
|
||||
wlockfile = c_utf8_to_locale(lockfile);
|
||||
|
||||
if (_tunlink(wlockfile) < 0) {
|
||||
strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
|
||||
"Unable to remove stale lock %s - %s",
|
||||
lockfile,
|
||||
errbuf);
|
||||
}
|
||||
c_free_locale_string(wlockfile);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return pid;
|
||||
|
@ -187,16 +199,21 @@ int csync_lock(const char *lockfile) {
|
|||
|
||||
void csync_lock_remove(const char *lockfile) {
|
||||
char errbuf[256] = {0};
|
||||
mbchar_t *wlockfile;
|
||||
|
||||
/* You can't remove the lock if it is from another process */
|
||||
if (_csync_lock_read(lockfile) == getpid()) {
|
||||
wlockfile = c_utf8_to_locale(lockfile);
|
||||
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Removing lock file: %s", lockfile);
|
||||
if (unlink(lockfile) < 0) {
|
||||
if (_tunlink(wlockfile) < 0) {
|
||||
strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
|
||||
"Unable to remove lock %s - %s",
|
||||
lockfile,
|
||||
errbuf);
|
||||
}
|
||||
c_free_locale_string(wlockfile);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue