isprefix() had been ssequal(), which had not been what it advertised to be.
Now, all this is gone.
We could get problems if one of the arguments is NULL, as isprefix()
handled this situation, but strncmp() does not. It appears as if this case
does not show up in the code.
int showfile(char **, char *);
int smatch(char *, struct swit *);
char *snprintb(char *, size_t, unsigned, char *);
-int isprefix(char *, char *);
int stringdex(char *, char *);
char *toabsdir(char *);
char *trimcpy(unsigned char *);
seq_del.c seq_getnum.c seq_list.c seq_nameok.c \
seq_print.c seq_read.c seq_save.c seq_setcur.c \
seq_setprev.c seq_setunseen.c showfile.c signals.c \
- smatch.c snprintb.c isprefix.c strcasecmp.c \
+ smatch.c snprintb.c strcasecmp.c \
strindex.c trimcpy.c uprf.c vfgets.c fmt_def.c \
m_msgdef.c mf.c utils.c m_mktemp.c
+++ /dev/null
-/*
-** isprefix.c -- check if a string is a PREFIX of another
-**
-** This code is Copyright (c) 2002, by the authors of nmh. See the
-** COPYRIGHT file in the root directory of the nmh distribution for
-** complete copyright information.
-*/
-
-#include <h/mh.h>
-
-/*
-** This function had been named ssequal(). It had advertised it would
-** check for substring matching, but actually checked prefix matching.
-** The latter being the thing wanted. Hence, only the name and the
-** descriptions were wrong. I fixed this.
-** -- markus schnalke <meillo@marmaro.de>, 2011-11
-*/
-
-/*
-** Check if s1 is a PREFIX of s2.
-** If yes, then return 1, else return 0.
-*/
-int
-isprefix(char *s1, char *s2)
-{
- if (!s1)
- s1 = "";
- if (!s2)
- s2 = "";
-
- while (*s1)
- if (*s1++ != *s2++)
- return 0;
- return 1;
-}
if (!(dp = context_find(nsequence))) {
dp = seq_neg; /* use default */
}
- if (dp && *dp && isprefix(dp, cp)) {
+ if (*dp && strncmp(cp, dp, strlen(dp))==0) {
inverted = 1;
cp += strlen(dp);
}
len = strlen(substr);
for (; swp->sw; swp++) {
/* null matches all strings */
- if (!*substr || (isprefix(substr, swp->sw) && len >= swp->minchars)) {
+ if (!*substr || (strncmp(swp->sw, substr, len)==0 &&
+ len >= swp->minchars)) {
optno = 0;
/* next switch */
if ((sp = (&swp[1])->sw)) {
plen = strlen(mp->foldpath) + 1;
for (np = m_defs; np; np = np->n_next) {
- if (isprefix("atr-", np->n_name)
+ if (strncmp(np->n_name, "atr-", alen)==0
&& (j = strlen(np->n_name) - plen) > alen
&& *(np->n_name + j) == '-'
&& strcmp(mp->foldpath, np->n_name + j + 1)
atrlen = strlen(atrcur);
for (np = m_defs; np; np = np->n_next)
- if (isprefix(atrcur, np->n_name)
- && !isprefix(nmhdir, np->n_name + atrlen))
+ if (strncmp(np->n_name, atrcur, atrlen)==0
+ && strncmp(np->n_name+atrlen, nmhdir, strlen(nmhdir))!=0)
+ /* Why do we exclude absolute path names? --meillo */
BuildFolderList(np->n_name + atrlen, 0);
}
atrlen = strlen(atrcur);
for (np = m_defs; np; np = np->n_next)
- if (isprefix(atrcur, np->n_name)
- && !isprefix(nmhdir, np->n_name + atrlen))
+ if (strncmp(np->n_name, atrcur, atrlen)==0 &&
+ strncmp(np->n_name+atrlen, nmhdir, strlen(nmhdir))!=0)
+ /* Why do we exclude absolute path names? --meillo */
get_folder_info(np->n_name + atrlen, NULL);
}
** "atr-something-folderpath", and remove them.
*/
for (np = m_defs, pp = NULL; np; np = np->n_next) {
- if (isprefix("atr-", np->n_name) &&
+ if (strncmp(np->n_name, "atr-", alen)==0 &&
(j = strlen(np->n_name) - plen) > alen &&
*(np->n_name + j) == '-' &&
strcmp(cp, np->n_name + j + 1) == 0) {
&& chdir(maildir =
concat(toabsdir("+"), "/", NULL)) != NOTOK) {
mp->foldpath = concat(mp->foldpath, "/", NULL);
- cp = isprefix(maildir, mp->foldpath)
- ? mp->foldpath + strlen(maildir)
- : mp->foldpath;
+ cp = (strncmp(mp->foldpath, maildir, strlen(maildir))==0) ?
+ mp->foldpath + strlen(maildir) :
+ mp->foldpath;
for (msgnum = procp; msgnum < vecp; msgnum++)
vec[msgnum] = concat(cp, vec[msgnum], NULL);
}