📄 mutils.c~
字号:
}
else
{
if ((char *) mutilsStristr(string, tempmask) ==
string + strlen(string) - strlen(tempmask))
{
free(tempmask);
return 1;
}
}
}
else if (lastchar == '*')
{
if ((char *) mutilsStristr(string, tempmask) == string)
{
free(tempmask);
return 1;
}
}
else
{
/*
** changed from strcmp(), patch sent my
** Takeshi OKURA <okura@osa.ncs.co.jp>
** Oct-30-1997
*/
if (!mutilsStrcasecmp(string, tempmask))
{
free(tempmask);
return 1;
}
}
free(tempmask);
return 0;
}
/*
** mutilsGetTIme()
** get current time, ex: Wed Jun 30 21:49:08 1993
**
** Parameters:
** none
**
** Return Values:
** pointer a string containing time
**
** Limitations and Comments:
** remove the trailing new line from ctime(). subsequent call will
** destroy the buffer. ctime() retuns pointer to a static buffer.
**
** Development History:
** who when why
** ma_muquit@fccc.edu Jul-31-1999 first cut
*/
char *mutilsGetTime ()
{
time_t
tm;
char
*times;
tm=time (NULL);
times=ctime(&tm);
times[(int) strlen(times)-1] = '\0';
return (times);
}
/* chop new line from a string */
/* string is modifiled */
char mutilsChopNL(string)
char
*string;
{
char
c;
char
*ptr;
c='\0';
if (string == NULL || *string == '\0')
return(c);
for (ptr = string; *ptr; ptr++);
if (ptr != string)
{
c = *(--ptr);
if (c == '\n')
{
*ptr='\0';
}
}
return (c);
}
/*
* mutilsStripLeadingSpace () - strips leading space/s from a string
*
* Description:
* This function strips leading spaces from a string and
* null terminates it.
*
* Input Parameters:
* char *str
*
* Output Parameters:
* char *str
*
* Return Values:
* one
*
* Side Effects:
* str is modified
*
* Limitations and Comments:
* str must points to a pre-allocated static or dynamic space
*
* Development History:
* who when why
* MA_Muquit@fccc.edu 18-Jun-96 first cut
*/
void mutilsStripLeadingSpace(char *s)
{
int i,
n=0;
char
*ls;
if (s == NULL || *s == '\0')
return;
for (i=0; i < (int) strlen(s); i++)
{
if ((s[i] == ' ' ) || (s[i] == '\t'))
n++;
else
break;
}
if (n)
{
ls= (char *) malloc(strlen(s)*sizeof(char)+1);
if (ls != (char *) NULL)
{
(void) strcpy (ls,s+n);
(void) strcpy (s,ls);
(void) free ((char *) ls);
}
}
}
/*
** mutilsStripTrailingSpace()
** strips trailing spaces at the end of a string.
**
** Parameters:
** char *str the string
**
** Return Values:
** none
**
** Limitations and Comments:
** the string is modified
**
**
** Development History:
** who when why
** ma_muquit@fccc.edu Jul-04-1998 first cut
*/
void mutilsStripTrailingSpace (char *str)
{
register int
i;
if (str == NULL || *str == '\0')
return;
for ((i=(int) strlen(str)-1); i >= 0; i--)
{
if ((str[i] == ' ') || (str[i] == '\t'))
{
str[i] = '\0';
}
else
break;
}
}
/*
** make a temporary filename
** filename - returns
*/
int mutilsTmpFilename(char *filename)
{
#define TMP_DIR "/tmp"
#define TMP_TEMPLATE "%s/editdb.XXXXXX"
char
*dir;
dir=(char *) getenv("TMPDIR");
if (dir == (char *) NULL)
dir=TMP_DIR;
(void) sprintf(filename,TMP_TEMPLATE,dir);
#ifdef HAVE_MKSTEMP
return(mkstemp(filename));
#else
return(mktemp(filename));
#endif /* ! HAVE_MKSTEMP */
}
/*
* basename() - return a file's basename
*
* RCS:
* $Revision: 1 $
* $Date: 2/24/04 8:38p $
*
* Security:
* Unclassified
*
* Description:
* Basename parses a char string containing a path name and
* returns a pointer to the file's base name.
*
* Input Parameters:
* char *path - the fully qualified path to parse
*
* Output Parameters:
* None.
*
* Return Values:
* (char *) - a pointer to the start of the base name within
* 'path'
*
* Side Effects:
* None.
*
* Limitations and Comments:
* Basename handles both DOS and UNIX path separators; it also
* handles the DOS device delimiter.
*
* I renamed it to mutilsBasename() as basename() will have collision
* now a days. -- mm, augh-11-1999
*
* Note that this function can return NULL.
*
* Development History:
* 3/26/92, jps, first cut
*/
char *mutilsBasename(path)
char
*path;
{
char
*cptr;
for (cptr = path + strlen(path); cptr >= path; --cptr)
{
switch (*cptr)
{
case ':':
case '/':
case '\\':
return ++cptr;
}
}
return (path);
}
/*
** mutilsDotLock()
** open a file for locking purpose. If the system is Unix, use
** Kernel lock on the file.
**
** Parameters:
** char *lockfile_path - full path of the lock file
** char *errbuf - feels this errbuf in case of error
**
** Return Values:
** none
**
** Limitations and Comments:
** if you're on Unix, make sure the partition is not NFS mounted, if i
** is NFS mounted, the counter might hang.
** errbuf must have enough space to hold the message
**
** Development History:
** who when why
** ma_muquit@fccc.edu Aug-16-1999 first cut
*/
static char
s_lockfile[BUFSIZ];
void mutilsDotLock(char *filepath,char *errbuf)
{
*errbuf='\0';
*s_lockfile='\0';
#ifdef SYS_WIN32
lock_fd=sopen(filepath,_O_RDWR|_O_CREAT,SH_DENYWR,_S_IREAD|_S_IWRITE);
#else
lock_fd=open(filepath,O_RDWR|O_CREAT,0644);
#endif
if (lock_fd < 0) /* open failed */
{
(void) sprintf(errbuf,"Could open counter database lock file for writing:\n%s",filepath);
return;
}
(void) strcpy(s_lockfile,filepath);
#ifdef SYS_UNIX
mutilsSetLock(lock_fd);
#endif
}
/* unlock the file */
void mutilsDotUnlock(int delete)
{
if (lock_fd >= 0)
{
/* closing also unlocks kernel locking */
(void) close(lock_fd);
lock_fd=(-1);
if (delete == 1)
unlink(s_lockfile);
}
}
#ifdef SYS_UNIX
void mutilsSetLock (int fd)
{
#ifdef HAVE_FLOCK
(void) flock(fd,LOCK_EX);
#else
lseek(fd,0L,0);
(void) lockf(fd,F_LOCK,0L);
#endif
}
void mutilsUnsetLock (int fd)
{
#ifdef HAVE_FLOCK
(void) flock(fd,LOCK_UN);
#else
lseek(fd,0L,0);
(void) lockf(fd,F_ULOCK,0L);
#endif
}
#endif /* SYS_UNIX */
/*
** mutilsWhich()
** returns 0 if the program is found in path
** -1 otherwise
**
** modified from: /usr3/doc/which-1.0/which.c on RH 5.2
*/
int mutilsWhich(char *name)
{
#ifndef X_OK
#define X_OK 0x01
#endif /* X_OK */
char
s,
*p,
*path,
szbuf[BUFSIZ];
int
found=0,
len;
/* check if the program exists and executable */
if (access(name,X_OK) == 0) /* found it */
return(0);
/* go through the PATH */
path=getenv("PATH");
if (path == NULL)
return(-1);
p=path;
found=0;
while (*p != '\0' && found == 0)
{
len=0;
while (*p != ':' && *p != '\0')
{
len++;
p++;
}
s=(char) *p;
*p='\0';
(void) sprintf(szbuf,"%s/%s",p-len,name);
*p=s;
if (*p)
p++;
if (access(szbuf,X_OK) == 0)
found=1;
}
if (found == 0)
found=(-1);
if (found == 1) /* found */
found=0;
return(found);
}
/* eat white space from a open FILE pointer */
/* return -1 if fp is NULL */
int mutilsEatWhitespace(FILE *fp)
{
int
c;
if (fp == NULL)
return(-1);
for(c =getc(fp);isspace(c) && ('\n' != c); c=getc(fp))
;
return (c);
}
/* eat comments space from a open FILE pointer */
/* this function is called after seeing the comment character, so the */
/* function actually eats the line till sees a new line */
/* return -1 if fp is NULL */
int mutilsEatComment(FILE *fp)
{
int
c;
if (fp == NULL)
return(-1);
for(c=getc(fp); ('\n' != c) && (EOF != c ) && (c > 0); c=getc(fp))
;
return(c);
}
/*
** mutilsGgetDirname()
** returns the base directory of file (Unix or Windows)
** if fails returns NULL
** Note: returns pointer to a malloc'd space, caller is responsible to
** free it.
*/
char *mutilsGetDirname(file)
char
*file;
{
char
*f,
*p;
int
len;
if (file == NULL || *file == '\0')
return (NULL);
f=strdup(file);
if (f == NULL)
return(NULL);
if ((p=strrchr(f,'/')) || (p=strrchr(f,'\\')))
{
*p='\0';
if (f)
return(f);
}
else
{
p=strdup("./");
return(p);
}
return (NULL);
}
#ifdef TEST
int main (int argc,char **argv)
{
int
rc;
rc=mutilsWhich(argv[1]);
(void) fprintf(stderr,"rc=%d\n",rc);
return(0);
}
#endif /* TEST */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -