int showfile(char **, char *);
int smatch(char *, struct swit *);
char *snprintb(char *, size_t, unsigned, char *);
-int ssequal(char *, char *);
+int isprefix(char *, char *);
int stringdex(char *, char *);
char *trimcpy(unsigned char *);
int unputenv(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 ssequal.c strcasecmp.c \
+ smatch.c snprintb.c isprefix.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;
+}
/* hack for "cur-name", "cur-n", etc. */
if (!strcmp(cp, "cur"))
return 0;
- if (ssequal("cur:", cp)) /* this code need to be rewritten... */
+ if (isprefix("cur:", cp)) /* this code need to be rewritten... */
return 0;
/* Check for sequence negation */
- if ((dp = context_find(nsequence)) && *dp != '\0' && ssequal(dp, cp)) {
+ if ((dp = context_find(nsequence)) && *dp != '\0' &&
+ isprefix(dp, cp)) {
inverted = 1;
cp += strlen(dp);
}
name = m_mailpath(buffer);
compath(name);
snprintf(buffer, sizeof(buffer), "%s/", m_maildir(""));
- if (ssequal(buffer, name)) {
+ if (isprefix(buffer, name)) {
cp = name;
name = getcpy(name + strlen(buffer));
free(cp);
len = strlen(substr);
for (; swp->sw; swp++) {
/* null matches all strings */
- if (!*substr || (ssequal(substr, swp->sw) && len >= swp->minchars)) {
+ if (!*substr || (isprefix(substr, swp->sw) && 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 (ssequal("atr-", np->n_name)
+ if (isprefix("atr-", np->n_name)
&& (j = strlen(np->n_name) - plen) > alen
&& *(np->n_name + j) == '-'
&& strcmp(mp->foldpath, np->n_name + j + 1)
+++ /dev/null
-/*
-** ssequal.c -- check if a string is a substring 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 CODE DOES NOT WORK AS ADVERTISED.
-** It is actually checking if s1 is a PREFIX of s2.
-** All calls to this function need to be checked to see
-** if that needs to be changed. Prefix checking is cheaper, so
-** should be kept if it's sufficient.
-*/
-
-/*
-** Check if s1 is a substring of s2.
-** If yes, then return 1, else return 0.
-*/
-
-int
-ssequal(char *s1, char *s2)
-{
- if (!s1)
- s1 = "";
- if (!s2)
- s2 = "";
-
- while (*s1)
- if (*s1++ != *s2++)
- return 0;
- return 1;
-}
atrlen = strlen(atrcur);
for (np = m_defs; np; np = np->n_next)
- if (ssequal(atrcur, np->n_name)
- && !ssequal(nmhdir, np->n_name + atrlen))
+ if (isprefix(atrcur, np->n_name)
+ && !isprefix(nmhdir, np->n_name + atrlen))
BuildFolderList(np->n_name + atrlen, 0);
}
atrlen = strlen(atrcur);
for (np = m_defs; np; np = np->n_next)
- if (ssequal(atrcur, np->n_name)
- && !ssequal(nmhdir, np->n_name + atrlen))
+ if (isprefix(atrcur, np->n_name)
+ && !isprefix(nmhdir, np->n_name + atrlen))
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 (ssequal("atr-", np->n_name) &&
+ if (isprefix("atr-", np->n_name) &&
(j = strlen(np->n_name) - plen) > alen &&
*(np->n_name + j) == '-' &&
strcmp(cp, np->n_name + j + 1) == 0) {
&& chdir(maildir =
concat(m_maildir(""), "/", NULL)) != NOTOK) {
mp->foldpath = concat(mp->foldpath, "/", NULL);
- cp = ssequal(maildir, mp->foldpath)
+ cp = isprefix(maildir, mp->foldpath)
? mp->foldpath + strlen(maildir)
: mp->foldpath;
for (msgnum = procp; msgnum < vecp; msgnum++)