TPCCLIB
Loading...
Searching...
No Matches
filename.c
Go to the documentation of this file.
1
5/*****************************************************************************/
6#include "libtpcmisc.h"
7/*****************************************************************************/
8
9/*****************************************************************************/
15 char *s
16) {
17 if(s==NULL || strlen(s)<1) return;
18 char *cptr;
19 cptr=strrchr(s, '/'); if(cptr==NULL) cptr=strrchr(s, '\\');
20 if(cptr==NULL) return;
21 cptr++;
22 int i, n=strlen(cptr);
23 for(i=0; i<n; i++, cptr++) s[i]=*cptr;
24 s[i]=(char)0;
25 return;
26}
27/*****************************************************************************/
28
29/*****************************************************************************/
36 char *s
37) {
38 if(s==NULL || strlen(s)<1) return(0);
39 char *cptr;
40 cptr=strrchr(s, '.'); if(cptr==NULL) return(0);
41 if(cptr[1]=='/' || cptr[1]=='\\') return(0);
42 *cptr=(char)0;
43 return(1);
44}
45/*****************************************************************************/
46
47/*****************************************************************************/
53 char *s
54) {
55 if(s==NULL || strlen(s)<1) return;
56 while(filenameRmExtension(s)) {}
57 return;
58}
59/*****************************************************************************/
60
61/*****************************************************************************/
68 const char *fname,
70 const char *key
71) {
72 if(fname==NULL || key==NULL) return(0);
73 char *key_ptr=NULL, *fname_ptr=NULL;
74
75 while((*key)&&(*fname)) {
76 if((*key=='?')||(*key==*fname)) {
77 key++; fname++;
78 } else if(*key=='*') {
79 if(*(key+1)==*fname) {key_ptr=(char*)key++; fname_ptr=(char*)fname+1;
80 } else {
81 fname++;
82 if(*(key+1)=='?') {key_ptr=(char*)key++; fname_ptr=(char*)fname;}
83 }
84 } else if((key_ptr!=NULL) && (*fname_ptr)) {
85 return(fnmatch(key_ptr, fname_ptr));
86 } else {
87 return(0);
88 }
89 }
90 if((*fname)&&(key_ptr!=NULL)) {return(fnmatch(key_ptr, fname_ptr));}
91 else {if(*key=='*') key++; return(*key==*fname);}
92}
93/*****************************************************************************/
94
95/*****************************************************************************/
102 const char *fname,
104 const char *key
105) {
106 if(fname==NULL || key==NULL) return(0);
107 char *key_ptr=NULL, *fname_ptr=NULL;
108
109 while((*key)&&(*fname)) {
110 if((*key=='?')||(toupper((int)*key)==toupper((int)*fname))) {
111 key++; fname++;
112 } else if(*key=='*') {
113 if(toupper((int)*(key+1))==toupper((int)*fname)) {
114 key_ptr=(char*)key++; fname_ptr=(char*)fname+1;
115 } else {
116 fname++;
117 if(*(key+1)=='?') {key_ptr=(char*)key++; fname_ptr=(char*)fname;}
118 }
119 } else if((key_ptr!=NULL) && (*fname_ptr)) {
120 return(fnmatch(key_ptr, fname_ptr));
121 } else {
122 return(0);
123 }
124 }
125 if((*fname)&&(key_ptr!=NULL)) {return(fnmatch(key_ptr, fname_ptr));}
126 else {if(*key=='*') key++; return(toupper((int)*key)==toupper((int)*fname));}
127}
128/*****************************************************************************/
129
130/*****************************************************************************/
141 char *s
142) {
143 if(s==NULL || strlen(s)<1) return((char*)NULL);
144 /* Identify path */
145 char *pptr=strrchr(s, '/'); if(pptr==NULL) pptr=strrchr(s, '\\');
146 if(pptr==NULL) pptr=s; else pptr++;
147 /* Search for the last '.' after the path */
148 char *cptr=strrchr(pptr, '.'); if(cptr==NULL) return(cptr);
149 /* If filename starts with '.', that is not counted as extension */
150 if(strlen(pptr)==strlen(cptr)) return((char*)NULL);
151 return(cptr);
152}
153/*****************************************************************************/
154
155/*****************************************************************************/
166 char *s
167) {
168 if(s==NULL || strlen(s)<1) return((char*)NULL);
169 /* Identify path */
170 char *pptr=strrchr(s, '/'); if(pptr==NULL) pptr=strrchr(s, '\\');
171 if(pptr==NULL) pptr=s; else pptr++;
172 /* Search for the last '.' after the path, ignoring first character
173 in case filename starts with '.' */
174 char *cptr=strchr(pptr+1, '.');
175 return(cptr);
176}
177/*****************************************************************************/
178
179/*****************************************************************************/
char * filenameGetExtension(char *s)
Get the last extension of a filename.
Definition filename.c:139
void filenameRmPath(char *s)
Definition filename.c:13
void filenameRmExtensions(char *s)
Definition filename.c:51
int filenameRmExtension(char *s)
Definition filename.c:34
char * filenameGetExtensions(char *s)
Get all extensions of a filename.
Definition filename.c:164
int fnmatch(const char *fname, const char *key)
Definition filename.c:66
int fncasematch(const char *fname, const char *key)
Definition filename.c:100
Header file for libtpcmisc.