00001
00014 #include <GKlib.h>
00015
00016
00017
00018
00019
00020
00021 int gk_fexists(char *fname)
00022 {
00023 struct stat status;
00024
00025 if (stat(fname, &status) == -1)
00026 return 0;
00027
00028 return S_ISREG(status.st_mode);
00029 }
00030
00031
00032
00033
00034
00035 int gk_dexists(char *dirname)
00036 {
00037 struct stat status;
00038
00039 if (stat(dirname, &status) == -1)
00040 return 0;
00041
00042 return S_ISDIR(status.st_mode);
00043 }
00044
00045
00046
00054
00055 intmax_t gk_getfsize(char *filename)
00056 {
00057 struct stat status;
00058
00059 if (stat(filename, &status) == -1)
00060 return -1;
00061
00062 return (intmax_t)(status.st_size);
00063 }
00064
00065
00066
00078
00079 void gk_getfilestats(char *fname, size_t *r_nlines, size_t *r_ntokens,
00080 size_t *r_max_nlntokens, size_t *r_nbytes)
00081 {
00082 size_t nlines=0, ntokens=0, max_nlntokens=0, nbytes=0, oldntokens=0, nread;
00083 int intoken=0;
00084 char buffer[2049], *cptr;
00085 FILE *fpin;
00086
00087 fpin = gk_fopen(fname, "r", "gk_GetFileStats");
00088
00089 while (!feof(fpin)) {
00090 nread = fread(buffer, sizeof(char), 2048, fpin);
00091 nbytes += nread;
00092
00093 buffer[nread] = '\0';
00094 for (cptr=buffer; *cptr!='\0'; cptr++) {
00095 if (*cptr == '\n') {
00096 nlines++;
00097 ntokens += intoken;
00098 intoken = 0;
00099 if (max_nlntokens < ntokens-oldntokens)
00100 max_nlntokens = ntokens-oldntokens;
00101 oldntokens = ntokens;
00102 }
00103 else if (*cptr == ' ' || *cptr == '\t') {
00104 ntokens += intoken;
00105 intoken = 0;
00106 }
00107 else {
00108 intoken = 1;
00109 }
00110 }
00111 }
00112 ntokens += intoken;
00113 if (max_nlntokens < ntokens-oldntokens)
00114 max_nlntokens = ntokens-oldntokens;
00115
00116 gk_fclose(fpin);
00117
00118 if (r_nlines != NULL)
00119 *r_nlines = nlines;
00120 if (r_ntokens != NULL)
00121 *r_ntokens = ntokens;
00122 if (r_max_nlntokens != NULL)
00123 *r_max_nlntokens = max_nlntokens;
00124 if (r_nbytes != NULL)
00125 *r_nbytes = nbytes;
00126 }
00127
00128
00129
00130
00131
00132
00133
00134
00135 char *gk_getbasename(char *path)
00136 {
00137 char *startptr, *endptr;
00138 char *basename;
00139
00140 if ((startptr = strrchr(path, '/')) == NULL)
00141 startptr = path;
00142 else
00143 startptr = startptr+1;
00144
00145 basename = gk_strdup(startptr);
00146
00147 if ((endptr = strrchr(basename, '.')) != NULL)
00148 *endptr = '\0';
00149
00150 return basename;
00151 }
00152
00153
00154
00155
00156
00157
00158
00159 char *gk_getextname(char *path)
00160 {
00161 char *startptr;
00162
00163 if ((startptr = strrchr(path, '.')) == NULL)
00164 return gk_strdup(path);
00165 else
00166 return gk_strdup(startptr+1);
00167 }
00168
00169
00170
00171
00172
00173 char *gk_getfilename(char *path)
00174 {
00175 char *startptr;
00176
00177 if ((startptr = strrchr(path, '/')) == NULL)
00178 return gk_strdup(path);
00179 else
00180 return gk_strdup(startptr+1);
00181 }
00182
00183
00184
00185
00186
00187
00188 char *getpathname(char *path)
00189 {
00190 char *endptr, *tmp;
00191
00192 if ((endptr = strrchr(path, '/')) == NULL) {
00193 return gk_strdup(".");
00194 }
00195 else {
00196 tmp = gk_strdup(path);
00197 *(strrchr(tmp, '/')) = '\0';
00198 return tmp;
00199 }
00200 }
00201
00202
00203
00204
00205
00206
00207 int gk_mkpath(char *pathname)
00208 {
00209 char tmp[2048];
00210
00211 sprintf(tmp, "mkdir -p %s", pathname);
00212 return system(tmp);
00213 }
00214
00215
00216
00217
00218
00219 int gk_rmpath(char *pathname)
00220 {
00221 char tmp[2048];
00222
00223 sprintf(tmp, "rm -r %s", pathname);
00224 return system(tmp);
00225 }