Changeset 8437 for trunk/module-webif-tpl.c
- Timestamp:
- 02/27/13 15:12:32 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-webif-tpl.c
r8436 r8437 230 230 /* Returns an unparsed template either from disk or from internal templates. 231 231 Note: You must free() the result after using it and you may get NULL if an error occured!*/ 232 static char *__tpl_getUnparsedTpl(const char* name, bool removeHeader) {232 char *tpl_getUnparsedTpl(const char* name, int8_t removeHeader, const char* subdir) { 233 233 int32_t i; 234 234 const struct tpl *tpl = NULL; … … 245 245 if (tpl && cfg.http_tpl) { 246 246 char path[255]; 247 if (strlen(tpl_getFilePathInSubdir(cfg.http_tpl, "", name, ".tpl", path, 255)) > 0 && file_exists(path)) 247 if ((strlen(tpl_getFilePathInSubdir(cfg.http_tpl, subdir, name, ".tpl", path, 255)) > 0 && file_exists(path)) 248 || (strlen(subdir) > 0 249 #ifdef TOUCH 250 && strcmp(subdir, TOUCH_SUBDIR) 251 #endif 252 && strlen(tpl_getFilePathInSubdir(cfg.http_tpl, "" , name, ".tpl", path, 255)) > 0 && file_exists(path))) 248 253 { 249 254 FILE *fp; … … 292 297 } 293 298 294 char *tpl_getUnparsedTpl(const char* name) {295 return __tpl_getUnparsedTpl(name, true);296 }297 298 299 /* Returns the specified template with all variables/other templates replaced or an 299 300 empty string if the template doesn't exist. Do not free the result yourself, it 300 301 will get automatically cleaned up! */ 301 302 char *tpl_getTpl(struct templatevars *vars, const char* name) { 302 char *tplorg = tpl_getUnparsedTpl(name );303 char *tplorg = tpl_getUnparsedTpl(name, 1, tpl_getVar(vars, "SUBDIR")); 303 304 if (!tplorg) return ""; 304 305 char *tplend = tplorg + strlen(tplorg); … … 371 372 372 373 /* Checks all disk templates in a directory if they are still current or may need upgrade! */ 373 void tpl_check DiskRevisions(void) {374 if (!cfg.http_tpl)375 return;374 void tpl_checkOneDirDiskRevisions(const char* subdir) { 375 char dirpath[255] = "\0"; 376 snprintf(dirpath, 255, "%s%s", cfg.http_tpl ? cfg.http_tpl : "", subdir); 376 377 int32_t i; 377 378 char path[255]; 378 379 for(i = 0; i < tpls_count; ++i) { 379 380 const struct tpl *tpl = &tpls[i]; 380 if (strncmp(tpl->tpl_name, "IC", 2) != 0 && strlen(tpl_getTplPath(tpl->tpl_name, cfg.http_tpl, path, 255)) > 0 && file_exists(path)) {381 if (strncmp(tpl->tpl_name, "IC", 2) != 0 && strlen(tpl_getTplPath(tpl->tpl_name, dirpath, path, 255)) > 0 && file_exists(path)) { 381 382 int8_t error = 1; 382 char *tplorg = __tpl_getUnparsedTpl(tpl->tpl_name, false); // Do not strip the header383 char *tplorg = tpl_getUnparsedTpl(tpl->tpl_name, 0, subdir); 383 384 unsigned long checksum = 0, curchecksum = crc32(0L, (unsigned char*)tpl->tpl_data, tpl->tpl_data_len); 384 385 char *pch1 = strstr(tplorg,"<!--OSCam"); … … 402 403 if (error) cs_log("If you are sure that it is current, add the following line at the beginning of the template to suppress this warning: <!--OSCam;%lu;%s;%s-->", curchecksum, CS_VERSION, CS_SVN_VERSION); 403 404 free(tplorg); 405 } 406 } 407 } 408 409 /* Checks whether disk templates need upgrade - including sub-directories */ 410 void tpl_checkDiskRevisions(void) { 411 char subdir[255]; 412 char dirpath[255]; 413 if (cfg.http_tpl) { 414 tpl_checkOneDirDiskRevisions(""); 415 DIR *hdir; 416 struct dirent entry; 417 struct dirent *result; 418 struct stat s; 419 if ((hdir = opendir(cfg.http_tpl)) != NULL) { 420 while(cs_readdir_r(hdir, &entry, &result) == 0 && result != NULL) { 421 if (strcmp(".", entry.d_name) == 0 || strcmp("..", entry.d_name) == 0) { 422 continue; 423 } 424 snprintf(dirpath, 255, "%s%s", cfg.http_tpl, entry.d_name); 425 if (stat(dirpath, &s) == 0) { 426 if (s.st_mode & S_IFDIR) { 427 snprintf(subdir, 255, 428 #ifdef WIN32 429 "%s\\" 430 #else 431 "%s/" 432 #endif 433 , entry.d_name); 434 tpl_checkOneDirDiskRevisions(subdir); 435 } 436 } 437 } 438 closedir(hdir); 404 439 } 405 440 }
Note:
See TracChangeset
for help on using the changeset viewer.