TPCCLIB
Loading...
Searching...
No Matches
filename.c
Go to the documentation of this file.
1
4/*****************************************************************************/
5#include "tpcclibConfig.h"
6/*****************************************************************************/
7#include <stdio.h>
8#include <stdlib.h>
9#include <time.h>
10#include <string.h>
11#include "tpcextensions.h"
12/*****************************************************************************/
13
14/*****************************************************************************/
22 char *s
23) {
24 if(s==NULL || strnlen(s, 1)<1) return;
25 char *cptr;
26 cptr=strrchr(s, '/'); if(cptr==NULL) cptr=strrchr(s, '\\');
27 if(cptr==NULL) return;
28 cptr++;
29 int i, n=strlen(cptr);
30 for(i=0; i<n; i++, cptr++) s[i]=*cptr;
31 s[i]=(char)0;
32 return;
33}
34/*****************************************************************************/
35
36/*****************************************************************************/
46 char *s
47) {
48 if(s==NULL) return;
49 unsigned int len=strnlen(s, FILENAME_MAX);
50 if(len==0) return;
51 //if(len==1) {s[0]='.'; return;}
52 char *cptr;
53 cptr=strrchr(s, '/'); if(cptr==NULL) cptr=strrchr(s, '\\');
54 if(cptr!=NULL) {
55 *cptr=(char)0;
56 if(strcmp(s, "/")==0 || strcmp(s, "\\")==0) s[0]=(char)0;
57 return;
58 }
59 if(strcmp(s, "..")==0) return;
60 s[0]='.'; s[1]=(char)0;
61 return;
62}
63/*****************************************************************************/
64
65/*****************************************************************************/
73 char *s
74) {
75 if(s==NULL || strnlen(s, 1)<1) return(0);
76 char *cptr;
77 cptr=strrchr(s, '.'); if(cptr==NULL) return(0);
78 if(cptr[1]=='/' || cptr[1]=='\\') return(0);
79 *cptr=(char)0;
80 return(1);
81}
82/*****************************************************************************/
83
84/*****************************************************************************/
91 char *s
92) {
93 if(s==NULL || strnlen(s, 1)<1) return;
94 while(filenameRmExtension(s)) {}
95 return;
96}
97/*****************************************************************************/
98
99/*****************************************************************************/
106 const char *fname,
108 const char *key
109) {
110 if(fname==NULL || key==NULL) return(0);
111 char *key_ptr=NULL, *fname_ptr=NULL;
112
113 while((*key)&&(*fname)) {
114 if((*key=='?')||(*key==*fname)) {
115 key++; fname++;
116 } else if(*key=='*') {
117 if(*(key+1)==*fname) {key_ptr=(char*)key++; fname_ptr=(char*)fname+1;
118 } else {
119 fname++;
120 if(*(key+1)=='?') {key_ptr=(char*)key++; fname_ptr=(char*)fname;}
121 }
122 } else if((key_ptr!=NULL) && (*fname_ptr)) {
123 return(fnmatch(key_ptr, fname_ptr));
124 } else {
125 return(0);
126 }
127 }
128 if((*fname)&&(key_ptr!=NULL)) {return(fnmatch(key_ptr, fname_ptr));}
129 else {if(*key=='*') key++; return(*key==*fname);}
130}
131/*****************************************************************************/
132
133/*****************************************************************************/
141 const char *fname,
143 const char *key
144) {
145 if(fname==NULL || key==NULL) return(0);
146 char *key_ptr=NULL, *fname_ptr=NULL;
147
148 while((*key)&&(*fname)) {
149 if((*key=='?')||(toupper((int)*key)==toupper((int)*fname))) {
150 key++; fname++;
151 } else if(*key=='*') {
152 if(toupper((int)*(key+1))==toupper((int)*fname)) {
153 key_ptr=(char*)key++; fname_ptr=(char*)fname+1;
154 } else {
155 fname++;
156 if(*(key+1)=='?') {key_ptr=(char*)key++; fname_ptr=(char*)fname;}
157 }
158 } else if((key_ptr!=NULL) && (*fname_ptr)) {
159 return(fnmatch(key_ptr, fname_ptr));
160 } else {
161 return(0);
162 }
163 }
164 if((*fname)&&(key_ptr!=NULL)) {return(fnmatch(key_ptr, fname_ptr));}
165 else {if(*key=='*') key++; return(toupper((int)*key)==toupper((int)*fname));}
166}
167/*****************************************************************************/
168
169/*****************************************************************************/
180 const char *s
181) {
182 if(s==NULL || strnlen(s, 1)<1) return((char*)NULL);
183 /* Identify path */
184 char *pptr=strrchr(s, '/'); if(pptr==NULL) pptr=strrchr(s, '\\');
185 if(pptr==NULL) pptr=(char*)s; else pptr++;
186 /* Search for the last '.' after the path */
187 char *cptr=strrchr(pptr, '.'); if(cptr==NULL) return(cptr);
188 /* If file name starts with '.', that is not counted as extension */
189 if(strlen(pptr)==strlen(cptr)) return((char*)NULL);
190 return(cptr);
191}
192/*****************************************************************************/
193
194/*****************************************************************************/
205 const char *s
206) {
207 if(s==NULL || strnlen(s, 1)<1) return((char*)NULL);
208 /* Identify path */
209 char *pptr=strrchr(s, '/'); if(pptr==NULL) pptr=strrchr(s, '\\');
210 if(pptr==NULL) pptr=(char*)s; else pptr++;
211 /* Search for the last '.' after the path, ignoring first character in case file name starts with '.' */
212 char *cptr=strchr(pptr+1, '.');
213 return(cptr);
214}
215/*****************************************************************************/
216
217/*****************************************************************************/
void filenameRmFile(char *s)
Definition filename.c:44
char * filenameGetExtensions(const char *s)
Get all extensions of a file name.
Definition filename.c:203
char * filenameGetExtension(const char *s)
Get the last extension of a file name.
Definition filename.c:178
void filenameRmPath(char *s)
Definition filename.c:20
void filenameRmExtensions(char *s)
Definition filename.c:89
int filenameRmExtension(char *s)
Definition filename.c:71
int fnmatch(const char *fname, const char *key)
Definition filename.c:104
int fncasematch(const char *fname, const char *key)
Definition filename.c:139
size_t strnlen(const char *s, size_t n)
Definition stringext.c:566
Header file for library libtpcextensions.