Authen-TacacsPlus
view release on metacpan or search on metacpan
tacpluslib/utils.c view on Meta::CPAN
len = strlen(substring);
if (len > (int) strlen(string)) {
return(NULL);
}
if (strncmp(substring, string, len)) {
/* no match */
return(NULL);
}
return(string + len);
}
#ifdef NEED_BZERO
int
bzero(p, len)
register char *p;
int len;
{
register int n;
if ((n = len) <= 0)
return;
do
*p++ = 0;
while (--n);
}
int
bcopy(s1, s2, len)
register char *s1, *s2;
int len;
{
register int n;
if ((n = len) <= 0)
return;
do
*s2++ = *s1++;
while (--n);
}
int
bcmp(s1,s2,n)
char *s1,*s2;
int n;
{
while (n-- > 0) {
if (*s1++ != *s2++) {
return(1);
}
}
return 0;
}
#endif /* NEED_BZERO */
/* Lock a file descriptor using fcntl. Returns 1 on successfully
acquiring the lock. The lock dies when we close the file, so
there's currently no separate unlock procedure.
Note that if the locked file is on an NFS-mounted partition, you
are at the mercy of SUN's lockd, which is probably a bad idea */
int
tac_lockfd(filename,lockfd)
char *filename;
int lockfd;
{
int tries;
struct flock flock;
int status;
flock.l_type = F_WRLCK;
flock.l_whence = SEEK_SET; /* relative to bof */
flock.l_start = 0L; /* from offset zero */
flock.l_len = 0L; /* lock to eof */
for (tries = 0; tries < 60; tries++) {
errno = 0;
status = fcntl(lockfd, F_SETLK, &flock);
if (status == -1) {
if (errno == EACCES || errno == EAGAIN) {
sleep(1);
continue;
} else {
syslog(LOG_ERR, "fcntl lock error status %d on %s %d %s",
status, filename, lockfd, strerror(errno));
return(0);
}
}
/* successful lock */
break;
}
if (errno != 0) {
syslog(LOG_ERR, "Cannot lock %s fd %d in %d tries %s",
filename, lockfd, tries+1, strerror(errno));
return(0);
}
return(1);
}
( run in 0.985 second using v1.01-cache-2.11-cpan-bbe5e583499 )