static Uint32 do_file_exists(const char* file_name, const char* path, const Uint32 size, char* buffer) { struct stat fstat; Uint32 found; safe_strncpy2(buffer, path, size, strlen(path)); safe_strcat(buffer, file_name, size); safe_strcat(buffer, ".xz", size); found = stat(buffer, &fstat) == 0; LOG_DEBUG("Checking file '%s': %s.", buffer, found ? "found" : "not found"); if (found) { return 1; } safe_strncpy2(buffer, path, size, strlen(path)); safe_strcat(buffer, file_name, size); safe_strcat(buffer, ".gz", size); found = stat(buffer, &fstat) == 0; LOG_DEBUG("Checking file '%s': %s.", buffer, found ? "found" : "not found"); if (found) { return 1; } safe_strncpy2(buffer, path, size, strlen(path)); safe_strcat(buffer, file_name, size); found = stat(buffer, &fstat) == 0; LOG_DEBUG("Checking file '%s': %s.", buffer, found ? "found" : "not found"); if (found) { return 1; } return 0; }
Uint32 check_alpha_image_name(const char* file_name, const Uint32 size, char* str) { char buffer[128]; Uint32 len, i; if (file_name == 0) { LOG_ERROR("Zero file name!"); return 0; } len = get_file_name_len(file_name); if (str == 0) { LOG_ERROR("Buffer is zero!"); return 0; } if ((len + 11) >= sizeof(buffer)) { LOG_ERROR("Buffer too small! %d bytes needed, but buffer is " "only %d bytes big!", len + 11, size); return 0; } for (i = 0; i < IMAGE_EXTENSIONS_MAX; i++) { safe_strncpy2(buffer, file_name, sizeof(buffer), len); safe_strcat(buffer, "_alpha", sizeof(buffer)); safe_strcat(buffer, image_extensions[i], sizeof(buffer)); if (el_file_exists(buffer) != 0) { len = strlen(buffer); safe_strncpy2(str, buffer, size, len); return 1; } } return 0; }
void load_filters_list (const char *file_name, char local) { int f_size; FILE *f = NULL; char *filter_list_mem; int istart, iend; char name[128]; size_t ret; f = open_file_config (file_name, "rb"); if (f == NULL) return; fseek (f, 0, SEEK_END); f_size = ftell (f); if (f_size <= 0) { fclose(f); return; } //ok, allocate memory for it filter_list_mem = (char *) calloc (f_size, 1); fseek (f, 0, SEEK_SET); ret = fread (filter_list_mem, 1, f_size, f); fclose (f); if (ret != f_size) { free (filter_list_mem); LOG_ERROR("%s read failed for file [%s]\n", __FUNCTION__, file_name); return; } istart = 0; while (istart < f_size) { // find end of the line for (iend = istart; iend < f_size; iend++) { if (filter_list_mem[iend] == '\n' || filter_list_mem[iend] == '\r') break; } // copy the line and process it if (iend > istart) { safe_strncpy2 (name, filter_list_mem+istart, sizeof (name), iend-istart); if (add_to_filter_list (name, local, 0) == -2) // -1 == already exists, -2 == list full { free (filter_list_mem); return; // filter list full } } // move to next line istart = iend+1; } free (filter_list_mem); }
// Now we have the data and a name, create a new window. // void Achievements_System::new_name(const char *player_name, int len) { if (achievements.empty()) { LOG_TO_CONSOLE(c_red1, xml_fail.c_str()); return; } if (textures.empty()) { LOG_TO_CONSOLE(c_red1, texture_fail.c_str()); return; } if (achievements_ctrl_click && !control_used) { last_data.clear(); return; } std::string name; if (player_name && (len > 0)) { char *tmp = new char[len+1]; safe_strncpy2(tmp, player_name, len+1, len); name = tmp; // check for already open window for player and delete it for (std::list<Achievements_Window *>::iterator i = windows.begin(); i!= windows.end(); ++i) if (*i && (*i)->get_name() == name) { delete *i; *i = 0; break; } } // remove any closed windows for (std::list<Achievements_Window *>::iterator i = windows.begin(); i!= windows.end(); ++i) if (*i && !(*i)->shown()) { delete *i; *i = 0; } windows.remove(0); if (last_data.empty()) return; // limit the number of windows so that we don't run out for everyone else if (windows.size() < max_windows) { windows.push_back(new Achievements_Window); windows.back()->set_achievements(last_data); windows.back()->set_name(name); windows.back()->open(win_pos_x, win_pos_y); } else LOG_TO_CONSOLE(c_red1, too_many.c_str()); last_data.clear(); }
/* display or test the md5sum of the current map or the specified file */ int command_ckdata(char *text, int len) { const int DIGEST_LEN = 16; Uint8 digest[DIGEST_LEN]; char digest_str[DIGEST_LEN*2+1]; char expected_digest_str[DIGEST_LEN*2+1]; char result_str[256]; char filename[256]; /* paramters are optional, first is expected checksum value, second is filename */ /* if only a filename is specfied, we display checksum rather than do match */ filename[0] = digest_str[0] = expected_digest_str[0] = '\0'; text = getparams(text); if (*text) { /* if we have at least one space and the first string is of digest length, assume we matching */ char *tempstr = safe_strcasestr(text, strlen(text), " ", 1); if ((tempstr != NULL) && (strlen(text) - strlen(tempstr) == DIGEST_LEN*2)) { safe_strncpy2(expected_digest_str, text, DIGEST_LEN*2+1, DIGEST_LEN*2 ); /* trim leading space from filename */ while (*tempstr == ' ') tempstr++; if (*tempstr) safe_strncpy(filename, tempstr, 256); } /* else we only have a filename */ else safe_strncpy(filename, text, 256 ); } /* if no parameters default to current map elm file */ else safe_strncpy(filename, continent_maps[cur_map].name, 256 ); /* calculate, display checksum if we're not matching */ if (*filename && el_file_exists(filename) && get_file_digest(filename, digest)) { int i; for(i=0; i<DIGEST_LEN; i++) sprintf(&digest_str[2*i], "%02x", (int)digest[i]); digest_str[DIGEST_LEN*2] = 0; if (! *expected_digest_str) { safe_snprintf(result_str, sizeof(result_str), "#ckdata %s %s", digest_str, filename ); LOG_TO_CONSOLE(c_grey1,result_str); } } /* show help if something fails */ else { LOG_TO_CONSOLE(c_red2, "ckdata: invalid file or command syntax."); LOG_TO_CONSOLE(c_red1, "Show current map (elm): #ckdata"); LOG_TO_CONSOLE(c_red1, "Show specified file: #ckdata file_name"); LOG_TO_CONSOLE(c_red1, "Check specified file: #ckdata expected_checksum file_name"); return 1; } /* if we have an expected value, compare then display an appropriate message */ if (*expected_digest_str) { if (my_strcompare(digest_str, expected_digest_str)) LOG_TO_CONSOLE(c_green2,"ckdata: File matches expected checksum"); else LOG_TO_CONSOLE(c_red2,"ckdata: File does not match expected checksum"); } return 1; } /* end command_ckdata() */
int is_astrology_message (const char * RawText) { char * tmp1,*tmp2; char str[50]; //check for predictors tmp1 = strstr (RawText,"20 Minutes: "); if(tmp1) { astrology_display_type = adtThreeProgressBars; memset(stone_name,0,50); RawText += 1; //parse predictors tmp2 = strchr (RawText, ','); safe_strncpy2 (str, RawText, sizeof (str), tmp2 - RawText); safe_snprintf (stone_name, sizeof(stone_name), "%s predictor", str); if(strstr(stone_name,"Attack bonus")) astrology_type = atAttPredictor; else if(strstr(stone_name,"Defense bonus")) astrology_type = atDefPredictor; else if(strstr(stone_name,"To hit bonus")) astrology_type = atHitPredictor; else if(strstr(stone_name,"To damage bonus")) astrology_type = atDamagePredictor; else if(strstr(stone_name,"Accuracy bonus")) astrology_type = atAccPredictor; else if(strstr(stone_name,"Magic bonus")) astrology_type = atMagicPredictor; else if(strstr(stone_name,"Harvest events increase")) astrology_type = atHarvPredictor; else if(strstr(stone_name,"Items Degrade")) astrology_type = atDegradePredictor; else if(strstr(stone_name,"Make rare")) astrology_type = atRarePredictor; else if(strstr(stone_name,"Failure")) astrology_type = atFailPredictor; tmp1 += strlen("20 Minutes: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"20 Minutes: %d",value1); tmp1 = strstr(RawText,"40 Minutes: ") + strlen("40 Minutes: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"40 Minutes: %d",value2); tmp1 = strstr(RawText,"60 Minutes: ") + strlen("60 Minutes: "); value3 = atoi(tmp1); safe_snprintf(text_item3,sizeof(text_item3),"60 Minutes: %d",value3); display_astrology_window(RawText); return 1; } //check for att/def indicator tmp1 = strstr(RawText,"Att: "); if(tmp1) { //parse att/def indicator astrology_display_type = adtTwoProgressBars; astrology_type = atAttDefIndicator; safe_snprintf(stone_name,sizeof(stone_name),"Att/Def indicator"); tmp1 += strlen("Att: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"Attack: %d",value1); tmp1 = strstr(tmp1,"Def: "); if(tmp1) tmp1 += strlen("Def: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"Defense: %d",value2); display_astrology_window(RawText); return 1; } //check for criticals indicator tmp1 = strstr(RawText,"To hit: "); if(tmp1) { //parse criticals indicator astrology_display_type = adtTwoProgressBars; astrology_type = atCriticalsIndicator; safe_snprintf(stone_name,sizeof(stone_name),"Criticals indicator"); tmp1 += strlen("To hit: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"To hit: %d",value1); tmp1 = strstr(tmp1,"To damage: "); if(tmp1) tmp1 += strlen("To damage: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"To damage: %d",value2); display_astrology_window(RawText); return 1; } //check for acc/magic indicator tmp1 = strstr(RawText,"Acc: "); if(tmp1) { //parse acc/magic indicator astrology_display_type = adtTwoProgressBars; astrology_type = atAccMagicIndicator; safe_snprintf(stone_name,sizeof(stone_name),"Acc/magic indicator"); tmp1 += strlen("Acc: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"Accuracy: %d",value1); tmp1 = strstr(tmp1,"Magic: "); if(tmp1) tmp1 += strlen("Magic: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"Magic: %d",value2); display_astrology_window(RawText); return 1; } //check for harv/degrade indicator tmp1 = strstr(RawText,"Harvest Events Increase: "); if(tmp1) { //parse harv/degrade indicator astrology_display_type = adtTwoProgressBars; astrology_type = atHarvDegrIndicator; safe_snprintf(stone_name,sizeof(stone_name),"Harvest events inc./degrade indicator"); tmp1 += strlen("Harvest Events Increase: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"Harvest events increase: %d",value1); tmp1 = strstr(tmp1,"Degrade: "); if(tmp1) tmp1 += strlen("Degrade: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"Degrade: %d",value2); display_astrology_window(RawText); return 1; } //check for rare/failure indicator tmp1 = strstr(RawText,"Make rare: "); if(tmp1) { //parse rare/failure indicator astrology_display_type = adtTwoProgressBars; astrology_type = atRareFailIndicator; safe_snprintf(stone_name,sizeof(stone_name),"Make rare/failure indicator"); tmp1 += strlen("Make rare: "); value1 = atoi(tmp1); safe_snprintf(text_item1,sizeof(text_item1),"Make rare: %d",value1); tmp1 = strstr(tmp1,"Failure: "); if(tmp1) tmp1 += strlen("Failure: "); value2 = atoi(tmp1); safe_snprintf(text_item2,sizeof(text_item2),"Failure: %d",value2); display_astrology_window(RawText); return 1; } return 0; }
void set_knowledge_string(const Uint8 *in_data, int data_length) { safe_strncpy2(raw_knowledge_string, (const char *)in_data, TEXTBUFSIZE, data_length); }