[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs util.c
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs util.c |
Date: |
Mon, 23 Dec 2013 23:39:02 +0000 |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 13/12/23 23:39:02
Modified files:
. : util.c
Log message:
changed match_extension utility function
* allow multiple extensions eg: |tar.gz|
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/util.c?cvsroot=qemacs&r1=1.55&r2=1.56
Patches:
Index: util.c
===================================================================
RCS file: /sources/qemacs/qemacs/util.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- util.c 3 Dec 2013 17:35:06 -0000 1.55
+++ util.c 23 Dec 2013 23:39:02 -0000 1.56
@@ -344,16 +344,41 @@
return dest;
}
+/* Return 1 iff filename extension appears in | separated list extlist.
+ * Initial and final | do not match an empty extension, but || does.
+ * Multiple tacked extensions may appear un extlist eg. |tar.gz|
+ * Initial dots do not account as extension delimiters.
+ * . and .. do not have an empty extension, nor do they match ||
+ */
int match_extension(const char *filename, const char *extlist)
{
- const char *r;
+ const char *base = get_basename(filename);
+ int len;
+ const char *p, *q;
- r = get_extension(filename);
- if (*r == '.') {
- return strfind(extlist, r + 1);
- } else {
+ while (*base == '.')
+ base++;
+ len = strlen(base);
+ if (len == 0)
return 0;
+
+ for (p = q = extlist;; p++) {
+ int c = *p;
+ if (c == '|' || c == '\0') {
+ int len1 = p - q;
+ if (len1 != 0 || (q != extlist && c != '\0')) {
+ if (len > len1 && base[len - len1 - 1] == '.'
+ && !memcmp(base + (len - len1), q, len1)) {
+ return 1;
}
+ }
+ if (c == '|')
+ q = p + 1;
+ else
+ break;
+ }
+ }
+ return 0;
}
/* Remove trailing slash from path, except for / directory */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs util.c,
Charlie Gordon <=