From 81c033d7dc01d3e2c137da7cf94806a833833952 Mon Sep 17 00:00:00 2001 From: rob Date: Sat, 27 Aug 2022 21:38:56 +1000 Subject: [PATCH] Removed sprintf() usage Now conpiles properly on linux again --- .gitignore | 1 + Makefile | 2 +- io.c | 316 +++++++++++++++++++++++++++-------------------------- lf.c | 145 ++++++++++++------------ map.c | 2 +- move.c | 8 +- nexus.c | 32 +++--- objects.c | 68 ++++++------ save.c | 3 +- shops.c | 38 +++---- spell.c | 117 ++++++++++---------- text.c | 1 + vault.c | 1 + 13 files changed, 371 insertions(+), 363 deletions(-) diff --git a/.gitignore b/.gitignore index 1f650a6..21e9b39 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ nexus *.o +*.swp diff --git a/Makefile b/Makefile index b272677..15bed01 100755 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ CFLAGS=-fdiagnostics-color=always -g -Wall -Werror -Wno-format-truncation -Wno-unused-but-set-variable nexus: ai.o astar.o attack.o data.o flag.o god.o io.o lf.o map.o move.o nexus.o objects.o save.o shops.o spell.o text.o vault.o ai.h attack.h data.h defs.h flag.h god.h io.h lf.h map.h move.h nexus.h objects.h save.h shops.h spell.h text.h vault.h - gcc $(CFLAGS) -o nexus ai.o astar.o attack.o data.o flag.o god.o io.o lf.o map.o move.o nexus.o objects.o save.o shops.o spell.o text.o vault.o -lncurses -lsqlite3 + gcc $(CFLAGS) -o nexus ai.o astar.o attack.o data.o flag.o god.o io.o lf.o map.o move.o nexus.o objects.o save.o shops.o spell.o text.o vault.o -lm -lncurses -lsqlite3 ai.o: ai.c ai.h attack.h astar.h data.h defs.h flag.h god.h io.h lf.h map.h move.h ai.h objects.h save.h shops.h spell.h text.h vault.h gcc $(CFLAGS) -c -o ai.o ai.c diff --git a/io.c b/io.c index f83bcff..0f55481 100755 --- a/io.c +++ b/io.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -555,7 +556,7 @@ void animsky(cell_t *src, char ch, int colour) { char askchar(char *prompt, char *validchars, char *def, int showchars, int maycancel) { char buf[BUFLEN]; - char msghistbuf[BUFLEN]; + char msghistbuf[BIGBUFLEN]; char *p; char temp[2]; char ch; @@ -747,7 +748,7 @@ cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t while (!finished) { int dir; char ch; - char groundbuf[BUFLEN],fullbuf[BUFLEN]; + char groundbuf[BUFLEN],fullbuf[BIGBUFLEN]; int valid = B_TRUE; drawstatus(); @@ -1159,7 +1160,7 @@ cell_t *real_askcoords(char *prompt, char *subprompt, int targettype, lifeform_t wclear(msgwin); if (subprompt) { - char fullline[BUFLEN]; + char fullline[BIGBUFLEN]; wmove(msgwin, 0, 0); sprintf(fullline, "%s%s", subprompt, fullbuf); textwithcol(msgwin, fullline); @@ -2664,7 +2665,7 @@ int announceflagloss(lifeform_t *lf, flag_t *f) { msg("^%cYour %s vanishes!", getlfcol(lf, CC_BAD), f->text); donesomething = B_TRUE; } else { - char text[BUFLEN]; + char text[BIGBUFLEN]; sprintf(text,"%s%s %s vanishes!", lfname, getpossessive(lfname), f->text); capitalise(text); msg("^%c%s", getlfcol(lf, CC_BAD), text); @@ -3495,7 +3496,7 @@ object_t *doaskobject(obpile_t *op, char *prompt, char *noobtext, int *count, in int defcount = 0; object_t *mylist[MAXPILEOBS+1]; char myletters[MAXPILEOBS+1]; - char msghistbuf[BUFLEN],numstring[BUFLEN],fullprompt[BUFLEN]; + char msghistbuf[BIGBUFLEN],numstring[BUFLEN],fullprompt[BUFLEN]; char obname[BUFLEN]; int firstob = 0; int nextpage = -1; @@ -3785,7 +3786,7 @@ int askobjectmulti(obpile_t *op, char *prompt, condset_t *cs, int includenothing int selected[MAXPILEOBS+1]; int selcount[MAXPILEOBS+1]; char myletters[MAXPILEOBS+1]; - char msghistbuf[BUFLEN],numstring[BUFLEN]; + char msghistbuf[BIGBUFLEN],numstring[BUFLEN]; char pbuf[BUFLEN]; char altprompt[BUFLEN]; int firstob = 0; @@ -4607,9 +4608,9 @@ void docommslf(lifeform_t *lf, char ch, lifeform_t *lf2, cell_t *targc) { killflagsofid(lf->flags, F_TARGETLF); aiattack(lf, lf2, DEF_AIFOLLOWTIME); } else { - char saybuf[BUFLEN]; + char saybuf[BIGBUFLEN]; getlfnamea(lf2, lfname2); - sprintf(saybuf, "I can't see %s!", lfname2); + snprintf(saybuf, BIGBUFLEN, "I can't see %s!", lfname2); say(lf, saybuf, SV_TALK); } } @@ -4648,7 +4649,7 @@ void docommslf(lifeform_t *lf, char ch, lifeform_t *lf2, cell_t *targc) { char why[BUFLEN]; getobname(oo, ooname, oo->amt); if (getoboffermod(oo,lf, why) > 0) { - sprintf(buf, "%s (%s)", ooname, why); + snprintf(buf, BUFLEN, "%s (%s)", ooname, why); addchoice(&prompt, oo->letter, buf, NULL, oo, NULL); } } @@ -5385,30 +5386,30 @@ void docomms_areadangers(char *who, flagpile_t *fp, lifeform_t *lf) { if (showit) { char lfname[BUFLEN]; char *p; - char text[BUFLEN]; + char text[BIGBUFLEN]; real_getlfnamea(c->lf, lfname, NULL, B_SHOWALL, B_REALRACE); if (lfhasflag(c->lf, F_NAME)) { switch(rnd(1,2)) { case 1: - sprintf(text, "\"%s is living nearby...\"", lfname); + snprintf(text, BIGBUFLEN, "\"%s is living nearby...\"", lfname); break; case 2: - sprintf(text, "\"%s dwells nearby...\"", lfname); + snprintf(text, BIGBUFLEN, "\"%s dwells nearby...\"", lfname); break; } } else { switch(rnd(1,4)) { case 1: - sprintf(text, "\"There is %s living nearby...\"", lfname); + snprintf(text, BIGBUFLEN, "\"There is %s living nearby...\"", lfname); break; case 2: - sprintf(text, "\"%s dwells nearby...\"", lfname); + snprintf(text, BIGBUFLEN, "\"%s dwells nearby...\"", lfname); break; case 3: - sprintf(text, "\"%s has made its lair here...\"", lfname); + snprintf(text, BIGBUFLEN, "\"%s has made its lair here...\"", lfname); break; case 4: - sprintf(text, "\"I spotted %s nearby...\"", lfname); + snprintf(text, BIGBUFLEN, "\"I spotted %s nearby...\"", lfname); break; } } @@ -5908,7 +5909,7 @@ void lfstatheading(char *headstr, int offset) { } char *makedesc_god(lifeform_t *god, char *retbuf) { - char thisline[BUFLEN]; + char thisline[BIGBUFLEN]; char godname[BUFLEN]; flag_t *f, *retflag[MAXCANDIDATES]; int nretflags,i; @@ -5919,7 +5920,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { strcpy(retbuf, ""); // title - sprintf(thisline, "%s likes ", godname); + snprintf(thisline, BIGBUFLEN, "%s likes ", godname); getflags(god->flags, retflag, &nretflags, F_GODLIKES, F_NONE); for (i = 0; i < nretflags; i++) { f = retflag[i]; @@ -5936,7 +5937,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { strcat(thisline, ".\n\n"); strncat(retbuf, thisline, HUGEBUFLEN); - sprintf(thisline, "%s dislikes ", godname); + snprintf(thisline, BIGBUFLEN, "%s dislikes ", godname); getflags(god->flags, retflag, &nretflags, F_GODDISLIKES, F_NONE); for (i = 0; i < nretflags; i++) { f = retflag[i]; @@ -5954,7 +5955,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { strncat(retbuf, thisline, HUGEBUFLEN); if (hasflag(god->flags, F_GODBATTLE)) { - sprintf(thisline, "During battle, %s will respond to prayers by ", godname); + snprintf(thisline, BIGBUFLEN, "During battle, %s will respond to prayers by ", godname); getflags(god->flags, retflag, &nretflags, F_GODBATTLE, F_NONE); for (i = 0; i < nretflags; i++) { f = retflag[i]; @@ -5969,13 +5970,13 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } } } else { - sprintf(thisline, "During battle, %s will not respond to prayers", godname); + snprintf(thisline, BIGBUFLEN, "During battle, %s will not respond to prayers", godname); } strcat(thisline, ".\n\n"); strncat(retbuf, thisline, HUGEBUFLEN); if (hasflag(god->flags, F_GODNOBATTLE)) { - sprintf(thisline, "Outside of battle, %s will respond to prayers by ", godname); + snprintf(thisline, BIGBUFLEN, "Outside of battle, %s will respond to prayers by ", godname); getflags(god->flags, retflag, &nretflags, F_GODNOBATTLE, F_NONE); for (i = 0; i < nretflags; i++) { f = retflag[i]; @@ -5990,7 +5991,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } } } else { - sprintf(thisline, "Outside of battle, %s will not respond to prayers", godname); + snprintf(thisline, BIGBUFLEN, "Outside of battle, %s will not respond to prayers", godname); } strcat(thisline, ".\n\n"); strncat(retbuf, thisline, HUGEBUFLEN); @@ -5999,7 +6000,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { // note: we manually handle SACRIFICEOBWITHFLAG getflags(god->flags, retflag, &nretflags, F_SACRIFICEOB, F_SACRIFICEOBCLASS, F_SACRIFICEOBBLESSED, F_SACRIFICEOBWITHFLAG,F_NONE); if (nretflags == 0) { - sprintf(thisline, "%s does not accept sacrifices.\n", godname); + snprintf(thisline, BIGBUFLEN, "%s does not accept sacrifices.\n", godname); strncat(retbuf, thisline, HUGEBUFLEN); } else { int i; @@ -6013,13 +6014,13 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } else { sprintf(name, "all %s", oc->name); } - sprintf(thisline, "%s accepts the sacrifice of %s.\n",godname, name); + snprintf(thisline, BIGBUFLEN, "%s accepts the sacrifice of %s.\n",godname, name); strncat(retbuf, thisline, HUGEBUFLEN); } getflags(god->flags, retflag, &nretflags, F_SACRIFICEOB, F_NONE); for (i = 0; i < nretflags; i++) { if (i == 0) { - sprintf(thisline, "%s accepts the sacrifice of:\n", godname); + snprintf(thisline, BIGBUFLEN, "%s accepts the sacrifice of:\n", godname); strncat(retbuf, thisline, HUGEBUFLEN); } @@ -6029,7 +6030,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { ot = findot(retflag[i]->val[0]); text = strdup(ot->name); makeplural(&text); - sprintf(thisline, "- %s", text); + snprintf(thisline, BIGBUFLEN, "- %s", text); free(text); if ((god->race->id == R_GODPURITY) && (retflag[i]->val[0] == OT_CORPSE)){ strcat(thisline, " of evil creatures"); @@ -6039,25 +6040,25 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } else { raceclass_t *rc; rc = findraceclass(retflag[i]->val[1]); - sprintf(thisline, "- %s corpses\n", rc->name); + snprintf(thisline, BIGBUFLEN, "- %s corpses\n", rc->name); strncat(retbuf, thisline, HUGEBUFLEN); } } getflags(god->flags, retflag, &nretflags, F_SACRIFICEOBBLESSED, F_NONE); for (i = 0; i < nretflags; i++) { if (i == 0) { - sprintf(thisline, "%s accepts the sacrifice of:\n", godname); + snprintf(thisline, BIGBUFLEN, "%s accepts the sacrifice of:\n", godname); strncat(retbuf, thisline, HUGEBUFLEN); } switch (retflag[i]->val[0]) { case B_BLESSED: - sprintf(thisline, "- known blessed objects\n"); + snprintf(thisline, BIGBUFLEN, "- known blessed objects\n"); break; case B_CURSED: - sprintf(thisline, "- known cursed objects\n"); + snprintf(thisline, BIGBUFLEN, "- known cursed objects\n"); break; default: - sprintf(thisline, "- known uncursed objects\n"); + snprintf(thisline, BIGBUFLEN, "- known uncursed objects\n"); break; } strncat(retbuf, thisline, HUGEBUFLEN); @@ -6065,19 +6066,19 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { getflags(god->flags, retflag, &nretflags, F_SACRIFICEOBWITHFLAG, F_NONE); for (i = 0; i < nretflags; i++) { if (i == 0) { - sprintf(thisline, "%s accepts the sacrifice of:\n", godname); + snprintf(thisline, BIGBUFLEN, "%s accepts the sacrifice of:\n", godname); strncat(retbuf, thisline, HUGEBUFLEN); } strcpy(thisline, ""); switch (retflag[i]->val[0]) { case F_BATTLESPOILS: - sprintf(thisline, "- untouched battle spoils\n"); + snprintf(thisline, BIGBUFLEN, "- untouched battle spoils\n"); break; case F_FLAMMABLE: - sprintf(thisline, "- flammable objects\n"); + snprintf(thisline, BIGBUFLEN, "- flammable objects\n"); break; case F_GEM: - sprintf(thisline, "- gems\n"); + snprintf(thisline, BIGBUFLEN, "- gems\n"); break; default: break; @@ -6087,7 +6088,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } } if (hasflag(god->flags, F_SACRIFICEOBMAGIC)) { - sprintf(thisline, "%s accepts the sacrifice of all magical objects.\n",godname); + snprintf(thisline, BIGBUFLEN, "%s accepts the sacrifice of all magical objects.\n",godname); strncat(retbuf, thisline, HUGEBUFLEN); } } @@ -6096,7 +6097,7 @@ char *makedesc_god(lifeform_t *god, char *retbuf) { } char *makedesc_job(job_t *j, char *retbuf) { - char thisline[BUFLEN]; + char thisline[BIGBUFLEN]; skill_t *sk; enum ATTRIB a; int count = 0; @@ -6124,19 +6125,19 @@ char *makedesc_job(job_t *j, char *retbuf) { } } if (count == 3) { - sprintf(thisline, "Alignment:Any"); + snprintf(thisline, BIGBUFLEN, "Alignment:Any"); } else { - sprintf(thisline, "Alignment:%s", choices); + snprintf(thisline, BIGBUFLEN, "Alignment:%s", choices); } } else { char *p; p = strdup(getalignmentname(f->val[0])); capitalise(p); - sprintf(thisline, "Alignment:%s",p); + snprintf(thisline, BIGBUFLEN, "Alignment:%s",p); free(p); } } else { - sprintf(thisline, "Alignment:Any"); + snprintf(thisline, BIGBUFLEN, "Alignment:Any"); } strcat(thisline, " "); @@ -6145,13 +6146,13 @@ char *makedesc_job(job_t *j, char *retbuf) { char buf[BUFLEN]; f = hasflagval(j->flags, F_JOBATTRMOD, a, NA, NA, NULL); if (f && (f->val[1] != 0)) { - char buf2[BUFLEN]; + char buf2[BIGBUFLEN]; if (f->val[1] > 0) { sprintf(buf, "^%d+%d^n", C_GREEN, f->val[1]); } else if (f->val[1] < 0) { sprintf(buf, "^%d%d^n", C_RED, f->val[1]); } - sprintf(buf2, "%s:%s ", getattrabbrev(a), buf); + snprintf(buf2, BIGBUFLEN, "%s:%s ", getattrabbrev(a), buf); strcat(thisline, buf2); } } @@ -6419,7 +6420,7 @@ char *makedesc_ob(object_t *o, char *retbuf) { char sizebuf[BUFLEN]; sprintf(sizebuf, "%s", getsizetext(twohandf->val[0] + 1)); capitalise(sizebuf); - sprintf(buf2, "@%s creatures can weild it in one hand.\n", sizebuf); + snprintf(buf2, BUFLEN, "@%s creatures can weild it in one hand.\n", sizebuf); strncat(retbuf, buf2, HUGEBUFLEN); } @@ -6527,11 +6528,11 @@ char *makedesc_ob(object_t *o, char *retbuf) { char sizebuf[BUFLEN]; sprintf(sizebuf, "%s", getsizetext(twohandf->val[0] + 1)); capitalise(sizebuf); - sprintf(buf2, "@%s creatures can weild it in one hand.\n", sizebuf); + snprintf(buf2, BUFLEN, "@%s creatures can weild it in one hand.\n", sizebuf); strcat(buf, buf2 ); } - sprintf(buf2, "@It has a base Damage Rating of %d",dr); + snprintf(buf2, BUFLEN, "@It has a base Damage Rating of %d",dr); strcat(buf, buf2); strncat(retbuf, buf, HUGEBUFLEN); @@ -7226,11 +7227,11 @@ char *makedesc_ob(object_t *o, char *retbuf) { amt = adjustarmourpenalty(player, f->val[1]); amt2 = adjustarmourpenalty(player, f->val[2]); if (amt > 0) { - sprintf(buf2, "^B%s lowers your accuracy by %d. (Armour skill penalty)^n\n", buf, getaccuracymodnum(amt)); + snprintf(buf2, BUFLEN, "^B%s lowers your accuracy by %d. (Armour skill penalty)^n\n", buf, getaccuracymodnum(amt)); strncat(retbuf, buf2, HUGEBUFLEN); } if (amt2 > 0) { - sprintf(buf2, "^B%s lowers your evasion by %d. (Armour skill penalty)^n\n", buf, amt2); + snprintf(buf2, BUFLEN, "^B%s lowers your evasion by %d. (Armour skill penalty)^n\n", buf, amt2); strncat(retbuf, buf2, HUGEBUFLEN); } break; @@ -7238,169 +7239,169 @@ char *makedesc_ob(object_t *o, char *retbuf) { amt = adjustshieldpenalty(player, f->val[1]); amt2 = adjustshieldpenalty(player, f->val[2]); if (amt > 0) { - sprintf(buf2, "^B%s lowers your attack accuracy by %d. (Shields skill too low)^n\n", buf, getaccuracymodnum(amt)); + snprintf(buf2, BUFLEN, "^B%s lowers your attack accuracy by %d. (Shields skill too low)^n\n", buf, getaccuracymodnum(amt)); strncat(retbuf, buf2, HUGEBUFLEN); } if (amt2 > 0) { - sprintf(buf2, "^B%s lowers your evasion by %d. (Shields skill penalty)^n\n", buf, amt2); + snprintf(buf2, BUFLEN, "^B%s lowers your evasion by %d. (Shields skill penalty)^n\n", buf, amt2); strncat(retbuf, buf2, HUGEBUFLEN); } break; case F_ANONYMOUS: - sprintf(buf2, "%s obscures your identity.\n", buf); + snprintf(buf2, BUFLEN, "%s obscures your identity.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_ARBOOST: - sprintf(buf2, "%s %s your Armour Rating.\n", buf, (f->val[0] >= 0) ? "increases" : "decreases"); + snprintf(buf2, BUFLEN, "%s %s your Armour Rating.\n", buf, (f->val[0] >= 0) ? "increases" : "decreases"); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_ATTRMOD: - sprintf(buf2, "%s %s your %s.\n", buf, (f->val[2] > 0) ? "increases" : "decreases", getattrname(f->val[1])); + snprintf(buf2, BUFLEN, "%s %s your %s.\n", buf, (f->val[2] > 0) ? "increases" : "decreases", getattrname(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_ATTRSET: - sprintf(buf2, "%s modifies your %s.\n", buf, getattrname(f->val[1])); + snprintf(buf2, BUFLEN, "%s modifies your %s.\n", buf, getattrname(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_AWARENESS: - sprintf(buf2, "%s grants you heightened awareness.\n", buf); + snprintf(buf2, BUFLEN, "%s grants you heightened awareness.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_BLIND: - sprintf(buf2, "%s prevents you from seeing anything.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from seeing anything.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_BREATHWATER: - sprintf(buf2, "%s allows you to breath normally while underwater.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to breath normally while underwater.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_CONTROL: - sprintf(buf2, "%s lets you control teleportation and polymorphic effects.\n", buf); + snprintf(buf2, BUFLEN, "%s lets you control teleportation and polymorphic effects.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_CONSUMESOULS: - sprintf(buf2, "%s allows you to consume the souls of nearby dead.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to consume the souls of nearby dead.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DEAF: - sprintf(buf2, "%s prevents you from hearing anything.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from hearing anything.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DETECTLIFE: - sprintf(buf2, "%s lets you detect nearby lifeforms.\n", buf); + snprintf(buf2, BUFLEN, "%s lets you detect nearby lifeforms.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DETECTOBS: - sprintf(buf2, "%s lets you detect nearby objects.\n", buf); + snprintf(buf2, BUFLEN, "%s lets you detect nearby objects.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DETECTMAGIC: - sprintf(buf2, "%s will detect magical enchantments on objects.\n", buf); + snprintf(buf2, BUFLEN, "%s will detect magical enchantments on objects.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DETECTMETAL: - sprintf(buf2, "%s will detect nearby metal.\n", buf); + snprintf(buf2, BUFLEN, "%s will detect nearby metal.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DODGES: - sprintf(buf2, "%s lets you use remaining stamina to dodge fatal attacks.\n", buf); + snprintf(buf2, BUFLEN, "%s lets you use remaining stamina to dodge fatal attacks.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_ENHANCESEARCH: - sprintf(buf2, "%s enhances your searching ability.\n", buf); + snprintf(buf2, BUFLEN, "%s enhances your searching ability.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_ENHANCESMELL: - sprintf(buf2, "%s enhances your sense of smell.\n", buf); + snprintf(buf2, BUFLEN, "%s enhances your sense of smell.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DISEASEIMMUNE: - sprintf(buf2, "%s makes you immune to disease.\n", buf); + snprintf(buf2, BUFLEN, "%s makes you immune to disease.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DTIMMUNE: - sprintf(buf2, "%s makes you immune to %s.\n", buf, getdamnamenoun(f->val[1])); + snprintf(buf2, BUFLEN, "%s makes you immune to %s.\n", buf, getdamnamenoun(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DTRESIST: - sprintf(buf2, "%s makes you resistant to %s.\n", buf, getdamnamenoun(f->val[1])); + snprintf(buf2, BUFLEN, "%s makes you resistant to %s.\n", buf, getdamnamenoun(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DTVULN: - sprintf(buf2, "%s renders you vulnerable to %s.\n", buf, getdamnamenoun(f->val[1])); + snprintf(buf2, BUFLEN, "%s renders you vulnerable to %s.\n", buf, getdamnamenoun(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_DRUNK: - sprintf(buf2, "%s makes you tipsy.\n", buf); + snprintf(buf2, BUFLEN, "%s makes you tipsy.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_EXTRAINFO: - sprintf(buf2, "%s provides enhanced knowledge to you.\n", buf); + snprintf(buf2, BUFLEN, "%s provides enhanced knowledge to you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_EXTRADAM: - sprintf(buf2, "%s will cause you to deal additional %s damage on each attack.\n", buf, + snprintf(buf2, BUFLEN, "%s will cause you to deal additional %s damage on each attack.\n", buf, getdamname(f->val[0])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_WOUNDING: - sprintf(buf2, "%s will grant +%d extra damage on all attacks.\n", buf, f->val[0]); + snprintf(buf2, BUFLEN, "%s will grant +%d extra damage on all attacks.\n", buf, f->val[0]); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_EXTRALUCK: - sprintf(buf2, "%s will give you a bonus to all skill checks.\n", buf); + snprintf(buf2, BUFLEN, "%s will give you a bonus to all skill checks.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_EXTRAMP: - sprintf(buf2, "%s will increase your mana pool by %d%%.\n", buf, f->val[0]); + snprintf(buf2, BUFLEN, "%s will increase your mana pool by %d%%.\n", buf, f->val[0]); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FEARLESS: - sprintf(buf2, "%s will reder you fearless.\n", buf); + snprintf(buf2, BUFLEN, "%s will reder you fearless.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FASTACT: - sprintf(buf2, "%s will speed up your actions.\n", buf); + snprintf(buf2, BUFLEN, "%s will speed up your actions.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FASTMETAB: - sprintf(buf2, "%s will increase your metabolic rate.\n", buf); + snprintf(buf2, BUFLEN, "%s will increase your metabolic rate.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FASTMOVE: - sprintf(buf2, "%s will speed up your movement.\n", buf); + snprintf(buf2, BUFLEN, "%s will speed up your movement.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FLYING: - sprintf(buf2, "%s will allow you to fly.\n", buf); + snprintf(buf2, BUFLEN, "%s will allow you to fly.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FREEZINGTOUCH: - sprintf(buf2, "%s will cause objects you touch to turn to ice.\n", buf); + snprintf(buf2, BUFLEN, "%s will cause objects you touch to turn to ice.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_FROZEN: - sprintf(buf2, "%s turns you to ice.\n", buf); + snprintf(buf2, BUFLEN, "%s turns you to ice.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_GRAVBOOSTED: - sprintf(buf2, "%s increases gravity around you.\n", buf); + snprintf(buf2, BUFLEN, "%s increases gravity around you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_GRAVLESSENED: - sprintf(buf2, "%s decreases gravity around you.\n", buf); + snprintf(buf2, BUFLEN, "%s decreases gravity around you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_HOTFEET: - sprintf(buf2, "%s causes your feet to constantly burn.\n", buf); + snprintf(buf2, BUFLEN, "%s causes your feet to constantly burn.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_INVISIBLE: - sprintf(buf2, "%s renders you invisible to normal sight.\n", buf); + snprintf(buf2, BUFLEN, "%s renders you invisible to normal sight.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_INVULNERABLE: - sprintf(buf2, "%s protects you from all physical harm.\n", buf); + snprintf(buf2, BUFLEN, "%s protects you from all physical harm.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_CANWILL: @@ -7409,14 +7410,14 @@ char *makedesc_ob(object_t *o, char *retbuf) { char sname[BUFLEN]; strcpy(sname, ot->name); capitalise(sname); - sprintf(buf2, "%s allows you to %s '%s' at will.\n", buf, + snprintf(buf2, BUFLEN, "%s allows you to %s '%s' at will.\n", buf, (ot->obclass->id == OC_SPELL) ? "cast" : "use the ability", sname); strncat(retbuf, buf2, HUGEBUFLEN); } break; case F_CAFFEINATED: - sprintf(buf2, "%s acts as a stimulant.\n", buf); + snprintf(buf2, BUFLEN, "%s acts as a stimulant.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_CANCAST: @@ -7425,106 +7426,106 @@ char *makedesc_ob(object_t *o, char *retbuf) { char sname[BUFLEN]; strcpy(sname, ot->name); capitalise(sname); - sprintf(buf2, "%s allows you to cast '%s'.\n", buf, sname); + snprintf(buf2, BUFLEN, "%s allows you to cast '%s'.\n", buf, sname); strncat(retbuf, buf2, HUGEBUFLEN); } break; case F_DAYBOOST: if (f->val[0] > 0) { - sprintf(buf2, "%s grants a +%d accuracy bonus during daytime.\n", buf,getaccuracymodnum(f->val[0])); + snprintf(buf2, BUFLEN, "%s grants a +%d accuracy bonus during daytime.\n", buf,getaccuracymodnum(f->val[0])); } else { - sprintf(buf2, "%s imposes a -%d accuracy penalty during daytime.\n", buf, getaccuracymodnum(abs(f->val[0]))); + snprintf(buf2, BUFLEN, "%s imposes a -%d accuracy penalty during daytime.\n", buf, getaccuracymodnum(abs(f->val[0]))); } break; case F_DETECTAURAS: - sprintf(buf2, "%s allows you to detect blessings or curses.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to detect blessings or curses.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_HOLYAURA: - sprintf(buf2, "%s surrounds you with a holy aura.\n", buf); + snprintf(buf2, BUFLEN, "%s surrounds you with a holy aura.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_LEARNBOOST: - sprintf(buf2, "%s grants a bonus to earned experience points.\n", buf); + snprintf(buf2, BUFLEN, "%s grants a bonus to earned experience points.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_LEVITATING: - sprintf(buf2, "%s causes you to levitate.\n", buf); + snprintf(buf2, BUFLEN, "%s causes you to levitate.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MAGICBOOST: - sprintf(buf2, "%s boosts the power of your spells by %d.\n", buf, f->val[1]); + snprintf(buf2, BUFLEN, "%s boosts the power of your spells by %d.\n", buf, f->val[1]); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MINDSHIELD: - sprintf(buf2, "%s protects you from psionic attacks.\n", buf); + snprintf(buf2, BUFLEN, "%s protects you from psionic attacks.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MISCASTCHANCE: - sprintf(buf2, "%s causes your spells to become unreliable.\n", buf); + snprintf(buf2, BUFLEN, "%s causes your spells to become unreliable.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MEDITATES: - sprintf(buf2, "%s allows you to retain awareness while resting.", buf); + snprintf(buf2, BUFLEN, "%s allows you to retain awareness while resting.", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MAGSHIELD: - sprintf(buf2, "%s surrounds you with a magnetic shield.\n", buf); + snprintf(buf2, BUFLEN, "%s surrounds you with a magnetic shield.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_MUTABLE: - sprintf(buf2, "%s allows your body to mutate.\n", buf); + snprintf(buf2, BUFLEN, "%s allows your body to mutate.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_NAUSEATED: - sprintf(buf2, "%s causes you to feel nauseated.\n", buf); + snprintf(buf2, BUFLEN, "%s causes you to feel nauseated.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_NIGHTBOOST: if (f->val[0] > 0) { - sprintf(buf2, "%s grants a +%d accuracy bonus at night.\n", buf,getaccuracymodnum(f->val[0])); + snprintf(buf2, BUFLEN, "%s grants a +%d accuracy bonus at night.\n", buf,getaccuracymodnum(f->val[0])); } else { - sprintf(buf2, "%s imposes a -%d accuracy penalty at night.\n", buf, getaccuracymodnum(abs(f->val[0]))); + snprintf(buf2, BUFLEN, "%s imposes a -%d accuracy penalty at night.\n", buf, getaccuracymodnum(abs(f->val[0]))); } break; case F_NONCORPOREAL: - sprintf(buf2, "%s makes you non-corporeal.\n", buf); + snprintf(buf2, BUFLEN, "%s makes you non-corporeal.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_PAIN: - sprintf(buf2, "%s causes you intense pain.\n", buf); + snprintf(buf2, BUFLEN, "%s causes you intense pain.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_PARALYZED: - sprintf(buf2, "%s paralyzes you.\n", buf); + snprintf(buf2, BUFLEN, "%s paralyzes you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_PHOTOMEM: - sprintf(buf2, "%s prevents you from forgetting your surroundings.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from forgetting your surroundings.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_POLYIMMUNE: - sprintf(buf2, "%s prevents you from being polymorphed.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from being polymorphed.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SIXTHSENSE: - sprintf(buf2, "%s warns you about nearby enemies.\n", buf); + snprintf(buf2, BUFLEN, "%s warns you about nearby enemies.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_STABILITY: - sprintf(buf2, "%s prevents you from slipping over.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from slipping over.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_STAMBOOST: - sprintf(buf2, "%s boosts your stamina by %d.\n", buf, f->val[1]); + snprintf(buf2, BUFLEN, "%s boosts your stamina by %d.\n", buf, f->val[1]); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_STENCH: - sprintf(buf2, "%s makes you smell bad.\n", buf); + snprintf(buf2, BUFLEN, "%s makes you smell bad.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_PRODUCESLIGHT: - sprintf(buf2, "%s produces light out to %d metre%s.\n", buf, + snprintf(buf2, BUFLEN, "%s produces light out to %d metre%s.\n", buf, f->val[1], (f->val[1] == 1) ? "" : "s"); strncat(retbuf, buf2, HUGEBUFLEN); break; @@ -7532,21 +7533,21 @@ char *makedesc_ob(object_t *o, char *retbuf) { loctext = strdup(f->text); p = readuntil(dicetext, loctext, '^'); readuntil(retalname, p, '^'); - sprintf(buf2, "%s protects you with %s.\n", buf, retalname); + snprintf(buf2, BUFLEN, "%s protects you with %s.\n", buf, retalname); strncat(retbuf, buf2, HUGEBUFLEN); free(loctext); break; case F_PROTALIGN: - sprintf(buf2, "%s repels attacks from %s aligned creatures.\n", buf, + snprintf(buf2, BUFLEN, "%s repels attacks from %s aligned creatures.\n", buf, getalignmentname(f->val[1])); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_RAGE: - sprintf(buf2, "%s makes you enraged.\n", buf); + snprintf(buf2, BUFLEN, "%s makes you enraged.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_REFLECTION: - sprintf(buf2, "%s reflects all projectiles back to their source.\n", buf); + snprintf(buf2, BUFLEN, "%s reflects all projectiles back to their source.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_REGENERATES: @@ -7559,73 +7560,73 @@ char *makedesc_ob(object_t *o, char *retbuf) { } else { // >= 4 strcpy(buf3, "extremely quickly"); } - sprintf(buf2, "%s allows you to regenerate health%s.\n", buf,buf3); + snprintf(buf2, BUFLEN, "%s allows you to regenerate health%s.\n", buf,buf3); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_RESISTMAG: - sprintf(buf2, "%s grants you %s immunity to magic.\n", buf, + snprintf(buf2, BUFLEN, "%s grants you %s immunity to magic.\n", buf, (f->val[0] >= 10) ? "strong" : "minor"); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_RISEASGHOST: - sprintf(buf2, "%s cause you to rise as a ghost after death.\n", buf); + snprintf(buf2, BUFLEN, "%s cause you to rise as a ghost after death.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SEEINVIS: - sprintf(buf2, "%s allows you to see invisible things.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to see invisible things.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SEEINDARK: - sprintf(buf2, "%s allows you to see in the dark.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to see in the dark.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SHADOWED: - sprintf(buf2, "%s prevents distant creatures from seeing you.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents distant creatures from seeing you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SILENCED: - sprintf(buf2, "%s prevents you from making sounds.\n", buf); + snprintf(buf2, BUFLEN, "%s prevents you from making sounds.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SILENTMOVE: - sprintf(buf2, "%s allows you to move silently.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to move silently.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SLOWACT: - sprintf(buf2, "%s will slow down your actions.\n", buf); + snprintf(buf2, BUFLEN, "%s will slow down your actions.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SLOWMETAB: - sprintf(buf2, "%s will decrease your metabolic rate.\n", buf); + snprintf(buf2, BUFLEN, "%s will decrease your metabolic rate.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SLOWMOVE: - sprintf(buf2, "%s will slow down your movement.\n", buf); + snprintf(buf2, BUFLEN, "%s will slow down your movement.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_SPIDERCLIMB: - sprintf(buf2, "%s allows you to adhere to walls.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to adhere to walls.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_TREMORSENSE: - sprintf(buf2, "%s allows you to 'see' by sensing vibrations around you.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to 'see' by sensing vibrations around you.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_TRUESTRIKE: - sprintf(buf2, "%s makes your attacks automatically hit.\n", buf); + snprintf(buf2, BUFLEN, "%s makes your attacks automatically hit.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_WINDSHIELD: - sprintf(buf2, "%s will surround you with a cyclonic shield.\n", buf); + snprintf(buf2, BUFLEN, "%s will surround you with a cyclonic shield.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_VISRANGEMOD: - sprintf(buf2, "%s %s your vision range by %d metre%s.\n", buf, (f->val[1] > 0) ? "increases" : "decreases", + snprintf(buf2, BUFLEN, "%s %s your vision range by %d metre%s.\n", buf, (f->val[1] > 0) ? "increases" : "decreases", abs(f->val[1]), (abs(f->val[1]) == 1) ? "" : "s" ); strncat(retbuf, buf2, HUGEBUFLEN); break; case F_XRAYVIS: - sprintf(buf2, "%s allows you to see through walls.\n", buf); + snprintf(buf2, BUFLEN, "%s allows you to see through walls.\n", buf); strncat(retbuf, buf2, HUGEBUFLEN); break; } @@ -8027,10 +8028,10 @@ char *makedesc_race(enum RACE rid, char *retbuf, int showextra, int forplayersel if (basedamagetype(n) != n) continue; if (isimmuneto(r->flags, n, B_FALSE)) { if (first) { - sprintf(buf2, "Immune to: %s", getdamname(n)); + snprintf(buf2, BUFLEN, "Immune to: %s", getdamname(n)); first = B_FALSE; } else { - sprintf(buf2, ", %s", getdamname(n)); + snprintf(buf2, BUFLEN, ", %s", getdamname(n)); } strcat(buf, buf2); } @@ -8051,10 +8052,10 @@ char *makedesc_race(enum RACE rid, char *retbuf, int showextra, int forplayersel if (basedamagetype(n) != n) continue; if (isresistantto(r->flags, n, B_FALSE)) { if (first) { - sprintf(buf2, "Resistant to: %s", getdamname(n)); + snprintf(buf2, BUFLEN, "Resistant to: %s", getdamname(n)); first = B_FALSE; } else { - sprintf(buf2, ", %s", getdamname(n)); + snprintf(buf2, BUFLEN, ", %s", getdamname(n)); } strcat(buf, buf2); } @@ -8182,10 +8183,10 @@ char *makedesc_race(enum RACE rid, char *retbuf, int showextra, int forplayersel if (basedamagetype(n) != n) continue; if (isvulnto(r->flags, n, B_FALSE)) { if (first) { - sprintf(buf2, "Vulnerable to: %s", getdamname(n)); + snprintf(buf2, BUFLEN, "Vulnerable to: %s", getdamname(n)); first = B_FALSE; } else { - sprintf(buf2, ", %s", getdamname(n)); + snprintf(buf2, BUFLEN, ", %s", getdamname(n)); } strcat(buf, buf2); } @@ -8240,8 +8241,9 @@ char *makedesc_race(enum RACE rid, char *retbuf, int showextra, int forplayersel case F_VEGETARIAN: if (lorelev >= PR_ADEPT) sprintf(buf, "Will not eat meat."); break; case F_VISRANGEMOD: if (lorelev >= PR_BEGINNER) { - if (f->val[0] < 0) sprintf(buf, "Reduced vision range (%d)", f->val[0]); break; + if (f->val[0] < 0) sprintf(buf, "Reduced vision range (%d)", f->val[0]); } + break; case F_PARTVEGETARIAN: if (lorelev >= PR_ADEPT) sprintf(buf, "Will only eat meat when hungry."); break; default: break; @@ -8272,7 +8274,7 @@ char *makedesc_race(enum RACE rid, char *retbuf, int showextra, int forplayersel objecttype_t *ot; ot = findot(f->val[0]); if (ot) { - sprintf(buf2, "Its blood can be bottled to create %s %s.", + snprintf(buf2, BUFLEN, "Its blood can be bottled to create %s %s.", needan(ot->name) ? "an" : "a", ot->name); strcat(buf, buf2); @@ -8412,7 +8414,7 @@ char *makedesc_spell(objecttype_t *ot, char *retbuf) { } assert(strlen(schoollist)); - sprintf(buf, "It is a level %d %s spell.\n",f->val[0], schoollist); + snprintf(buf, BUFLEN, "It is a level %d %s spell.\n",f->val[0], schoollist); strncat(retbuf, buf, BUFLEN); } @@ -8493,7 +8495,7 @@ char *makedesc_spell(objecttype_t *ot, char *retbuf) { } if (minrange != 0) { char buf2[BUFLEN]; - sprintf(buf2, " (minimum %d)", minrange); + snprintf(buf2, BUFLEN, " (minimum %d)", minrange); strcat(buf, buf2); } strcat(buf, ".\n"); @@ -9048,7 +9050,7 @@ void doenter(lifeform_t *lf) { if (enterob) { char ch,obname[BUFLEN],buf[BUFLEN]; getobname(enterob,obname, 1); - sprintf(buf, "Enter %s?", obname); + snprintf(buf, BUFLEN, "Enter %s?", obname); ch = askchar(buf, "yn","n", B_TRUE, B_FALSE); if (ch == 'y') { shop(lf, enterob); @@ -10247,7 +10249,7 @@ void dumpcols(void) { void dumpskills(void) { skill_t *sk; - char buf[BUFLEN],thisline[BUFLEN]; + char buf[BUFLEN],thisline[BIGBUFLEN]; int count = 0; // max skillname length: 21 (sorcery:translocation) // use blocks of 26 @@ -10274,7 +10276,7 @@ void dumpskills(void) { case 5: strcpy(lev, "Exp"); break; case 6: strcpy(lev, "Mst"); break; } - sprintf(buf, "%21s:%3s ",sk->name, lev); + snprintf(buf, BUFLEN, "%21s:%3s ",sk->name, lev); strcat(thisline, buf); if (count == 3) { count = 0; @@ -12353,7 +12355,7 @@ void showlfarmour(lifeform_t *lf) { sprintf(rhs, "(using two-handed weapon)"); } else { getobname(o, obname, o->amt); - sprintf(rhs, "%c - %s",o->letter, obname); + snprintf(rhs, BUFLEN, "%c - %s",o->letter, obname); if (outerob && (outerob != o)) { char outerobname[BUFLEN]; @@ -13536,7 +13538,7 @@ void showlfstats(lifeform_t *lf, int showall) { count = 0; for (dounknown = 0; dounknown <= 1; dounknown++) { for (sk = firstskill ; sk ; sk = sk->next) { - char thisline[BUFLEN]; + char thisline[BIGBUFLEN]; int printed = B_FALSE; slev = getskill(lf, sk->id); @@ -13549,7 +13551,7 @@ void showlfstats(lifeform_t *lf, int showall) { basecolour = 'h'; } // known skill - sprintf(thisline, "^%c%-21s^%c[^%d", basecolour, sk->name, basecolour, + snprintf(thisline, BIGBUFLEN, "^%c%-21s^%c[^%d", basecolour, sk->name, basecolour, getskilllevelcolour(slev)); max = getmaxskilllevel(player, sk->id); for (i = PR_NOVICE; i <= PR_MASTER; i++) { @@ -13858,14 +13860,14 @@ void showlfstats(lifeform_t *lf, int showall) { objecttype_t *sp; sp = findot(f->val[0]); if (sp) { - char thisline[BUFLEN]; + char thisline[BIGBUFLEN]; char desc[BUFLEN]; if (nfound == 0) { effectline(&stopnow, &count, offset, &nextoffset, headinglines, mainwin, &y, &x, 0, "%s %s the following spells active:", you(lf), isplayer(lf) ? "have" : "has"); } - sprintf(thisline, " - %s %s (consuming %d MP", sp->name, roman(f->val[2]), f->val[1]); + snprintf(thisline, BIGBUFLEN, " - %s %s (consuming %d MP", sp->name, roman(f->val[2]), f->val[1]); getspelldesc(f->val[0], f->val[2], desc); if (strlen(desc)) { strcat(thisline, ", "); diff --git a/lf.c b/lf.c index cf1fd48..3e593e7 100755 --- a/lf.c +++ b/lf.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -3060,18 +3061,18 @@ int continuerepairing(lifeform_t *lf, flag_t *repairflag) { limit(&(f->val[0]), NA, f->val[1]); if (f->val[0] == f->val[1]) { if (isplayer(lf)) { - char obname[BUFLEN],withbuf[BUFLEN]; + char obname[BUFLEN],withbuf[BIGBUFLEN]; real_getobname(o, obname, o->amt, B_PREMODS, B_NOCONDITION, B_BLINDADJUST, B_BLESSINGS, B_NOUSED, B_NOSHOWALL); - if (helpob) sprintf(withbuf, " (with %s)", helpobname); + if (helpob) snprintf(withbuf, BIGBUFLEN, " (with %s)", helpobname); else strcpy(withbuf, ""); msg("You finish repairing your %s%s.", noprefix(obname), withbuf); } else if (cansee(player, lf)) { - char obname[BUFLEN],withbuf[BUFLEN]; + char obname[BUFLEN],withbuf[BIGBUFLEN]; char lfname[BUFLEN]; getlfname(lf, lfname); real_getobname(o, obname, o->amt, B_PREMODS, B_NOCONDITION, B_BLINDADJUST, B_BLESSINGS, B_NOUSED, B_NOSHOWALL); - if (helpob) sprintf(withbuf, " with %s", helpobname); + if (helpob) snprintf(withbuf, BIGBUFLEN, " with %s", helpobname); else strcpy(withbuf, ""); msg("%s finishes repairing %s%s.", lfname, obname, withbuf); } @@ -3081,9 +3082,9 @@ int continuerepairing(lifeform_t *lf, flag_t *repairflag) { killflag(repairflag); } else { if (isplayer(lf)) { - char obname[BUFLEN],withbuf[BUFLEN]; + char obname[BUFLEN],withbuf[BIGBUFLEN]; real_getobname(o, obname, o->amt, B_PREMODS, B_NOCONDITION, B_BLINDADJUST, B_BLESSINGS, B_NOUSED, B_NOSHOWALL); - if (helpob) sprintf(withbuf, " (with %s)", helpobname); + if (helpob) snprintf(withbuf, BIGBUFLEN, " (with %s)", helpobname); else strcpy(withbuf, ""); msg("You continue repairing your %s%s.", noprefix(obname), withbuf); @@ -3092,7 +3093,7 @@ int continuerepairing(lifeform_t *lf, flag_t *repairflag) { char lfname[BUFLEN]; getlfname(lf, lfname); real_getobname(o, obname, o->amt, B_PREMODS, B_NOCONDITION, B_BLINDADJUST, B_BLESSINGS, B_NOUSED, B_NOSHOWALL); - if (helpob) sprintf(withbuf, " with %s", helpobname); + if (helpob) snprintf(withbuf, BUFLEN, " with %s", helpobname); else strcpy(withbuf, ""); msg("%s continue repairing %s%s.", lfname, obname, withbuf); } @@ -3619,7 +3620,7 @@ int die(lifeform_t *lf) { // killed by a vampire = vampire. if (killer) { switch (killer->race->id) { - case R_VAMPIRE: sprintf(reanimateas, "vampire"); break; + case R_VAMPIRE: snprintf(reanimateas, BUFLEN, "vampire"); break; default: break; } } @@ -3631,9 +3632,9 @@ int die(lifeform_t *lf) { getflags(lf->flags, retflag, &nretflags, F_POISONED, F_NONE); for (i = 0; i < nretflags; i++) { if (retflag[i]->val[2] == R_VAMPIRE) { - sprintf(reanimateas, "vampire"); + snprintf(reanimateas, BUFLEN, "vampire"); } else if (retflag[i]->val[2] == lf->race->baseid) { - sprintf(reanimateas, "ghoul"); + snprintf(reanimateas, BUFLEN, "ghoul"); } } } @@ -3643,10 +3644,10 @@ int die(lifeform_t *lf) { if (onein(3)) { switch (rnd(1,2)) { case 1: - sprintf(reanimateas, "zombie"); + snprintf(reanimateas, BUFLEN, "zombie"); break; case 2: - sprintf(reanimateas, "skeleton"); + snprintf(reanimateas, BUFLEN, "skeleton"); break; } } @@ -3702,7 +3703,7 @@ int die(lifeform_t *lf) { char *nth; f = incflag(lf->flags, F_NUMDEATHS, 1, NA, NA); nth = getnthtext(f->val[0]); - sprintf(buf, "I will grant you %s %s chance, mortal... use it wisely.", + snprintf(buf, BUFLEN, "I will grant you %s %s chance, mortal... use it wisely.", needan(nth) ? "an" : "a", nth); more(); godsay(god->race->id, B_TRUE, buf); more(); lf->hp = lf->maxhp; @@ -4044,7 +4045,7 @@ int die(lifeform_t *lf) { // replace 'splash of blood' with 'splash of xat blood' if (strends(locbname, " of blood")) { char replacewith[BUFLEN]; - sprintf(replacewith, " of %s blood",lf->race->name); + snprintf(replacewith, BUFLEN, " of %s blood",lf->race->name); strrep(&locbname, " of blood", replacewith, NULL); } // amount of time blood will appear for depends @@ -4334,7 +4335,7 @@ int die(lifeform_t *lf) { if (hasjob(lf, J_GOD)) { char ch; char ques[BUFLEN]; - sprintf(ques, "Bones file dump = %s. Override?", dobonesfile ? "true" : "false"); + snprintf(ques, BUFLEN, "Bones file dump = %s. Override?", dobonesfile ? "true" : "false"); ch = askchar(ques, "yn", "n", B_TRUE, B_FALSE); if (ch == 'y') { ch = askchar("Dump bones file?", "yn", "n", B_TRUE, B_FALSE); @@ -4374,7 +4375,7 @@ void dumplf(void) { } for (lf = startmap->lf ; lf ; lf = lf->next) { char buf[BUFLEN]; - sprintf(buf," timespent=%3d id %d race %s, redraws last turn=%d",lf->timespent, lf->id, lf->race->name, + snprintf(buf, BUFLEN," timespent=%3d id %d race %s, redraws last turn=%d",lf->timespent, lf->id, lf->race->name, lf->redraws); if (cansee(player, lf)) { strcat(buf, "(seen by player)"); @@ -4538,7 +4539,7 @@ int genalignmentlist(flagpile_t *fp, char *buf) { if (!strchr(localposs, candidate)) { // not already in list? char letter[2]; // this one is okay. - sprintf(letter, "%c", candidate); + snprintf(letter, 1, "%c", candidate); strcat(localposs, letter); nposs++; } @@ -4695,7 +4696,7 @@ int digcell(lifeform_t *lf, cell_t *c, object_t *o, int dismantle) { char digoid[BUFLEN]; // start digging! if (o && !dismantle) { - sprintf(digoid, "%ld",o->id); + snprintf(digoid, BUFLEN, "%ld",o->id); } else { strcpy(digoid,""); } @@ -5153,7 +5154,7 @@ int eat(lifeform_t *lf, object_t *o) { if (!hasflag(o->flags, F_PREPARED) && !lfhasflag(lf, F_CANEATRAW)) { if (!lfhasflag(lf, F_EATING) && getskill(lf, SK_COOKING)) { more(); - sprintf(ques,"Really eat %s raw?",obname); + snprintf(ques, BUFLEN,"Really eat %s raw?",obname); ch = askchar(ques,"yn","y", B_TRUE, B_FALSE); if (ch != 'y') { return B_TRUE; @@ -5169,7 +5170,7 @@ int eat(lifeform_t *lf, object_t *o) { if (corpserace->id == lf->race->baseid) { if (getattrbracket(getattr(lf, A_WIS), A_WIS, NULL) >= AT_AVERAGE) { more(); - sprintf(ques,"Really eat your own race?"); + snprintf(ques, BUFLEN,"Really eat your own race?"); ch = askchar(ques,"yn","y", B_TRUE, B_FALSE); if (ch != 'y') { return B_TRUE; @@ -5221,11 +5222,11 @@ int eat(lifeform_t *lf, object_t *o) { if (turnstoeat <= 1) { char taste[BUFLEN]; if (rawmeat) { - sprintf(taste, "The raw meat tastes disgusting!"); + snprintf(taste, BUFLEN, "The raw meat tastes disgusting!"); } else if (hasflagval(o->flags, F_CORPSEOF, R_CHICKEN, NA, NA, NULL)) { - sprintf(taste, "Tastes like chicken!"); + snprintf(taste, BUFLEN, "Tastes like chicken!"); } else if (f && (f->val[1] >= 20)) { - sprintf(taste, "Yum!"); + snprintf(taste, BUFLEN, "Yum!"); } else { strcpy(taste, ""); } @@ -5552,7 +5553,7 @@ int eat(lifeform_t *lf, object_t *o) { char buf[BUFLEN]; // die. lf->hp = 0; - sprintf(buf, "eating %s", obname); + snprintf(buf, BUFLEN, "eating %s", obname); setlastdam(lf, buf); stopeating = B_TRUE; } @@ -5778,10 +5779,10 @@ void enhanceskills(lifeform_t *lf) { for (i = 0; i < nposs; i++) { char this[2]; - sprintf(this, "%c", getattrletter(poss[i])); + snprintf(this, 1, "%c", getattrletter(poss[i])); if (isalpha(this[0])) { if (i == 0) { - sprintf(ques, "Increase your %s", getattrname(poss[i])); + snprintf(ques, BUFLEN, "Increase your %s", getattrname(poss[i])); } else if (i == (nposs-1)) { strcat(ques, " or "); strcat(ques, getattrname(poss[i])); @@ -6187,7 +6188,7 @@ void enhanceskills(lifeform_t *lf) { limit(&nleft, 1, NA); // get all possible spells to learn, from the given school - sprintf(qbuf, "Learn which new spell (maxmp=%d):", getmaxmp(player)); + snprintf(qbuf, BUFLEN, "Learn which new spell (maxmp=%d):", getmaxmp(player)); makespellchoicelist(&prompt, player, qbuf, "Describe which spell:", f->val[1], B_TRUE, B_FALSE, B_FALSE, player->maxmp); // find highest possible level, and mark all choices as invalid. for (i = 0; i < prompt.nchoices; i++) { @@ -6281,7 +6282,7 @@ void enhanceskills(lifeform_t *lf) { slev = getskill(lf, SK_SS_ALLOMANCY); if (pctchance(slev*20)) { char qbuf[BUFLEN]; - sprintf(qbuf, "Learn which allomantic ability (maxmp=%d):", getmaxmp(player)); + snprintf(qbuf, BUFLEN, "Learn which allomantic ability (maxmp=%d):", getmaxmp(player)); // construct list of castable mental spells makespellchoicelist(&prompt, lf, qbuf, "Describe which allomantic ability:", SS_ALLOMANCY, B_TRUE, B_FALSE, B_FALSE, player->maxmp); if (prompt.nchoices > 0) { @@ -6305,7 +6306,7 @@ void enhanceskills(lifeform_t *lf) { if (pctchance(slev*20)) { char qbuf[BUFLEN]; int pickfrom; - sprintf(qbuf, "Learn which psionic power (maxmp=%d):", getmaxmp(player)); + snprintf(qbuf, BUFLEN, "Learn which psionic power (maxmp=%d):", getmaxmp(player)); // construct list of castable mental spells makespellchoicelist(&prompt, lf, qbuf, "Describe which psionic power:", SS_MENTAL, B_TRUE, B_FALSE, B_FALSE, player->maxmp); @@ -6810,7 +6811,7 @@ race_t *findracebyname(char *name, condset_t *cs) { // ...then partial matches start of words in name // ie. "ant" should match "soldier ant" before matching "giant" - sprintf(searchfor, " %s",name); + snprintf(searchfor, BUFLEN, " %s",name); for (r = firstrace; r ; r = r->next) { if (strstr(r->name, searchfor) && racemeets(r->id, cs)) { return r; @@ -10544,7 +10545,7 @@ char *getmoveverbother(lifeform_t *lf, char *buf) { } f = lfhasflag(lf, F_WALKVERB); if (f) { - sprintf(buf, "%ss", f->text); + snprintf(buf, BUFLEN, "%ss", f->text); return buf; } strcpy(buf, "walks"); @@ -12482,7 +12483,7 @@ void givejob(lifeform_t *lf, enum JOB jobid) { int pow; char pwbuf[BUFLEN]; pow = MINOF((gettr(lf)/2), getspellmaxpower(o->type->id)); - sprintf(pwbuf, "pw:%d;", pow); + snprintf(pwbuf, BUFLEN, "pw:%d;", pow); addtempflag(lf->flags, F_CANCAST, o->type->id, NA, NA, pwbuf, FROMJOB); } } @@ -13145,7 +13146,7 @@ void givestartobs(lifeform_t *lf, object_t *targob, flagpile_t *fp) { f2 = hasflag(poss[i]->flags, F_DAM); dt = f2->val[0]; dam = f2->val[1]; - sprintf(thisdesc, "%s (Damage: %d %s, Accuracy: %s)", poss[i]->name, + snprintf(thisdesc, BUFLEN, "%s (Damage: %d %s, Accuracy: %s)", poss[i]->name, dam, getdamname(dt), getaccuracyname(acc)); // don't allow this if the player is vulnerable to it! @@ -13358,7 +13359,7 @@ void givestartobs(lifeform_t *lf, object_t *targob, flagpile_t *fp) { if (real_getrandomob(mapcell, buf, targmap->depth + depthmod, NA, getrarityval(text), B_TRUE, &cs)) { char buf3[BUFLEN]; if (db) snprintf(buf2, BUFLEN, "finished startobwepsk successfuly."); - sprintf(buf3, "%s%s%s",text,strlen(text) ? " " : "",buf); + snprintf(buf3, BUFLEN, "%s%s%s",text,strlen(text) ? " " : "",buf); o = addob(op, buf3); } else { if (db) snprintf(buf2, BUFLEN, "finished startobwepsk, failed."); @@ -14149,7 +14150,7 @@ int injure(lifeform_t *lf, enum BODYPART where, enum DAMTYPE damtype, enum INJUR case IJ_HANDBLEED: desc = strdup("hand is bleeding^attacking will cause damage"); break; case IJ_TENDONCUT: desc = strdup("right flexor tendon is cut^cannot weild weapons"); break; case IJ_FINGERMISSING: - sprintf(buf, "%s is severed^cannot wear rings on this hand", getbodypartname(lf, bp2)); + snprintf(buf, BUFLEN, "%s is severed^cannot wear rings on this hand", getbodypartname(lf, bp2)); desc = strdup(buf); break; case IJ_EYELIDSCRAPED: desc = strdup("eyelid is scraped^accuracy penalty"); break; @@ -14161,7 +14162,7 @@ int injure(lifeform_t *lf, enum BODYPART where, enum DAMTYPE damtype, enum INJUR case IJ_WINGBLEED: desc = strdup("wings are bleeding^flying causes damage"); break; case IJ_LUNGCOLLAPSED: desc = strdup("lungs have collapsed^lose all stamina points"); break; case IJ_HANDMISSING: - sprintf(buf, "%s is destroyed^cannot use this hand", getbodypartname(lf, bp2)); + snprintf(buf, BUFLEN, "%s is destroyed^cannot use this hand", getbodypartname(lf, bp2)); desc = strdup(buf); break; case IJ_EARSRINGING: desc = strdup("ears are ringing^cannot hear sounds"); break; @@ -15996,7 +15997,7 @@ void addskillabil(enum SKILL id, enum SKILLLEVEL lev, enum OBTYPE abilid, int ti char buf[BUFLEN]; ot = findot(abilid); assert(ot); - sprintf(buf, "^gYou gain the '%s' ability.^n", ot->name); + snprintf(buf, BUFLEN, "^gYou gain the '%s' ability.^n", ot->name); addskilldesc(sk->id, lev, buf, B_FALSE); } @@ -17266,7 +17267,7 @@ void autospells(lifeform_t *lf, int howmany) { char pwbuf[BUFLEN]; sel = rnd(0,nposs-1); spellid = poss[sel]; - sprintf(pwbuf, "pw:%d;",powerposs[sel]); + snprintf(pwbuf, BUFLEN, "pw:%d;",powerposs[sel]); //addflag(lf->flags, F_CANCAST, sel, NA, NA, pwbuf); addflag(lf->flags, F_CANCAST, spellid, NA, NA, pwbuf); // remove this one... @@ -18261,23 +18262,23 @@ void losehpeffects(lifeform_t *lf, int dam, enum DAMTYPE damtype, lifeform_t *fr // special cases if (lf->race->id == R_FUNGUSDREAM) { char buf2[BUFLEN]; - sprintf(buf, "^w%s releases a cloud of purple spores!", lfname); - sprintf(buf2, "^wSomething releases a cloud of purple spores!"); + snprintf(buf, BUFLEN, "^w%s releases a cloud of purple spores!", lfname); + snprintf(buf2, BUFLEN, "^wSomething releases a cloud of purple spores!"); spellcloud(lf->cell, 1, DT_COMPASS, UNI_SHADELIGHT, C_MAGENTA, OT_S_SLEEP, 8, B_TRUE, buf, buf2, B_FALSE, NULL, B_NOCENTRE); } else if (lf->race->id == R_FUNGUSPETRIFY) { char buf2[BUFLEN]; - sprintf(buf, "^w%s releases a cloud of grey spores!", lfname); - sprintf(buf2, "^wSomething releases a cloud of grey spores!"); + snprintf(buf, BUFLEN, "^w%s releases a cloud of grey spores!", lfname); + snprintf(buf2, BUFLEN, "^wSomething releases a cloud of grey spores!"); spellcloud(lf->cell, 1, DT_COMPASS, UNI_SHADELIGHT, C_GREY, OT_S_PETRIFY, 5, B_TRUE, buf, buf2, B_FALSE, NULL, B_NOCENTRE); } else if (lf->race->id == R_FUNGUSRAGE) { char buf2[BUFLEN]; - sprintf(buf, "^w%s releases a cloud of red spores!", lfname); - sprintf(buf2, "^wSomething releases a cloud of red spores!"); + snprintf(buf, BUFLEN, "^w%s releases a cloud of red spores!", lfname); + snprintf(buf2, BUFLEN, "^wSomething releases a cloud of red spores!"); spellcloud(lf->cell, 1, DT_COMPASS, UNI_SHADELIGHT, C_RED, OT_A_RAGE, 8, B_TRUE, buf, buf2, B_FALSE, NULL, B_NOCENTRE); } else if ((lf->race->id == R_UNYON) && ((damtype == DT_SLASH) || (damtype == DT_CHOP))) { char buf2[BUFLEN]; - sprintf(buf, "^w%s releases a cloud of fumes!", lfname); - sprintf(buf2, "^wSomething releases a cloud of fumes!"); + snprintf(buf, BUFLEN, "^w%s releases a cloud of fumes!", lfname); + snprintf(buf2, BUFLEN, "^wSomething releases a cloud of fumes!"); spellcloud(lf->cell, 2, DT_ORTH, UNI_SHADELIGHT, C_GREY, OT_S_BLINDNESS, 8, B_TRUE, buf, buf2, B_TRUE, NULL, B_NOCENTRE); } @@ -18668,7 +18669,7 @@ void makecommslist(prompt_t *p, lifeform_t *lf, int multiple) { if (godstone) { char buf[BUFLEN],obname[BUFLEN]; getobname(godstone, obname, 1); - sprintf(buf, "(offer %s)", obname); + snprintf(buf, BUFLEN, "(offer %s)", obname); if (!haschoice(p, 'o')) addchoice(p, 'o', buf, NULL, NULL, NULL); } } else { @@ -18868,7 +18869,7 @@ void mayusespellschool(flagpile_t *fp, enum SPELLSCHOOL ss, enum FLAG how, int o if (!hasflagval(fp, how, ot->id, NA, NA, NULL)) { char text[BUFLEN]; if (overridepower) { - sprintf(text, "pw:%d;",overridepower); + snprintf(text, BUFLEN, "pw:%d;",overridepower); } else { strcpy(text, ""); } @@ -19565,13 +19566,13 @@ int noise(cell_t *c, lifeform_t *noisemaker, enum NOISECLASS nclass, int volume, // "you hear [a muffled xxx]" p = strstartswitha(text, prefix); if (p) { - sprintf(localtext, "%smuffled %s", prefix, p); + snprintf(localtext, BUFLEN, "%smuffled %s", prefix, p); } else { // "you hear [xxx]" // becomes: // "you hear muffled [xxx]" // - sprintf(localtext, "muffled %s", text); + snprintf(localtext, BUFLEN, "muffled %s", text); } } else { @@ -19951,7 +19952,7 @@ int pickup(lifeform_t *lf, object_t *what, int howmany, int fromground, int want for (i = 0 ; i < nretgods; i++) { if (lfhasflagval(retgod[i], F_GODPOISON, B_FALSE, NA, NA, NULL)) { char warnbuf[BUFLEN]; - sprintf(warnbuf, "I hope you're not planning on using %s...", (o->amt == 1) ? "that" : "those"); + snprintf(warnbuf, BUFLEN, "I hope you're not planning on using %s...", (o->amt == 1) ? "that" : "those"); godsay(retgod[i]->race->id, B_TRUE, warnbuf); break; } @@ -20070,7 +20071,7 @@ int poison(lifeform_t *lf, int howlong, enum POISONTYPE ptype, int power, char * } } else { char ftext[BUFLEN]; - sprintf(ftext, "%d^%s", power, fromwhat); + snprintf(ftext, BUFLEN, "%d^%s", power, fromwhat); ii = addflag(lf->flags, F_INCUBATING, ptype, pt->incubationtime, howlong, ftext); ii->obfrom = srcrace ? srcrace->id : NA; if (getskill(lf, SK_FIRSTAID) >= PR_BEGINNER) { @@ -20853,7 +20854,7 @@ int startclimbing(lifeform_t *lf) { // ability (which you need the skill to get). if (pit && isplayer(lf)) { char ques[BUFLEN], ch; - sprintf(ques, "Climb down %s?",pitname); + snprintf(ques, BUFLEN, "Climb down %s?",pitname); ch = askchar(ques, "yn","n", B_TRUE, B_FALSE); if (ch != 'y') { @@ -22042,7 +22043,7 @@ void setrace(lifeform_t *lf, enum RACE rid, int frompolymorph) { if (isplayer(lf)) { msg("^%cYou have gained control of your lycanthropy.", getlfcol(lf, CC_GOOD)); } - sprintf(cwtext, "pw:1;race:%s;", lf->race->name); + snprintf(cwtext, BUFLEN, "pw:1;race:%s;", lf->race->name); addtempflag(lf->flags, F_CANWILL, OT_S_SHAPESHIFT, NA, NA, cwtext, FROMLYCANTHROPY); } } @@ -23157,7 +23158,7 @@ int real_skillcheck(lifeform_t *lf, enum CHECKTYPE ct, int diff, int mod, int *r } } - sprintf(dbtag, "[lfid %d (%s) %s check] ",lf->id, lf->race->name, getskillcheckname(ct)); + snprintf(dbtag, BUFLEN, "[lfid %d (%s) %s check] ",lf->id, lf->race->name, getskillcheckname(ct)); ////////////////////////////////////// // debugging for new skillcheck code @@ -23277,9 +23278,9 @@ int slipon(lifeform_t *lf, object_t *o) { char onwhat[BUFLEN]; char damstring[BUFLEN]; if (o) { - sprintf(onwhat, "%s", obname); + snprintf(onwhat, BUFLEN, "%s", obname); } else { - sprintf(onwhat, "the %s", lf->cell->type->name); + snprintf(onwhat, BUFLEN, "the %s", lf->cell->type->name); } msg("%s slip%s on %s and fall%s to the ground.",lfname, isplayer(lf) ? "" : "s", onwhat, isplayer(lf) ? "" : "s"); @@ -23417,13 +23418,13 @@ int statdrain(lifeform_t *lf, enum ATTRIB attr, int amt, enum CHECKTYPE sctype, if (fromlf) { char lfname[BUFLEN]; char buf[BUFLEN]; - sprintf(buf, "%s-drained",getattrname(attr)); + snprintf(buf, BUFLEN, "%s-drained",getattrname(attr)); setkillverb(lf, buf); real_getlfnamea(fromlf, lfname, NULL, B_TRUE, B_TRUE); setlastdam(lf, lfname); } else { char buf[BUFLEN]; - sprintf(buf, "%s drain",getattrname(attr)); + snprintf(buf, BUFLEN, "%s drain",getattrname(attr)); setkillverb(lf, "Killed"); setlastdam(lf, buf); } @@ -24383,7 +24384,7 @@ void startlfturn(lifeform_t *lf) { if ((e == E_AVOIDOB) && rdata) { getobname(avoidob, fromx, avoidob->amt); } else { - sprintf(fromx, "danger"); + snprintf(fromx, BUFLEN, "danger"); } if (isplayer(lf)) { msg("You reflexively dodge away from %s!", fromx); @@ -24408,7 +24409,7 @@ void startlfturn(lifeform_t *lf) { for (a = 0; a < MAXATTS; a++) { if ((lf->baseatt[a] > 0) && (getattr(lf, a) <= 0)) { char buf[BUFLEN]; - sprintf(buf, "%s drain",getattrname(a)); + snprintf(buf, BUFLEN, "%s drain",getattrname(a)); setkillverb(lf, "Killed"); setlastdam(lf, buf); if (isplayer(lf)) { @@ -24492,7 +24493,7 @@ void startlfturn(lifeform_t *lf) { char *p; char lfname[BUFLEN],lfnameposs[BUFLEN]; getlfname(lf, lfname); - sprintf(lfnameposs, "%s%s",lfname, getpossessive(lfname)); + snprintf(lfnameposs, BUFLEN, "%s%s",lfname, getpossessive(lfname)); p = strdup(pt->damverb); if (isplayer(lf)) { @@ -24507,7 +24508,7 @@ void startlfturn(lifeform_t *lf) { strrep(&p, "YOUR", lfnameposs, NULL); if (asleep) { char replacetext[BUFLEN]; - sprintf(replacetext, "%s wakes and", lfname); + snprintf(replacetext, BUFLEN, "%s wakes and", lfname); strrep(&p, "YOU", replacetext, NULL); } else { strrep(&p, "YOU", lfname, NULL); @@ -24838,7 +24839,7 @@ void startlfturn(lifeform_t *lf) { limit(&dam, 1, NA); getobnametruebase(o, obname, o->amt); - sprintf(damstring, "light from %s", obname); + snprintf(damstring, BUFLEN, "light from %s", obname); if (isplayer(lf)) { msg("Your head explodes in pain at the light from %s!", obname); } @@ -24899,7 +24900,7 @@ void startlfturn(lifeform_t *lf) { case DT_WATER: if ((bp == BP_FEET) && isplayer(lf) && hasbp(lf, bp)) { char warntext[BUFLEN]; - sprintf(warntext,"Your %s get wet.", getbodypartname(lf, bp)); + snprintf(warntext, BUFLEN,"Your %s get wet.", getbodypartname(lf, bp)); // only announce this if you've had a turn // without your feet wet. real_warnabout(warntext, 2, B_FALSE); @@ -25876,19 +25877,19 @@ int tradeknowledge(lifeform_t *lf) { // fromplayer^toplayer gettradeinfoname(fromplayer, fromplayertype, fromplayertext); gettradeinfoname(toplayer, toplayertype, toplayertext); - sprintf(tradetext, "%s^%s",fromplayertext,toplayertext); + snprintf(tradetext, BUFLEN, "%s^%s",fromplayertext,toplayertext); sayphrase(lf, SP_TRADEINFO_ACCEPT, SV_TALK, NA, tradetext, player); more(); // confirm. - sprintf(buf, "Learn %s from %s", toplayertext, lfname); + snprintf(buf, BUFLEN, "Learn %s from %s", toplayertext, lfname); ch = askchar(buf, "yn","y", B_TRUE, B_FALSE); if (ch == 'y') { // lf learns skill if (fromplayertype == TI_SKILL) { giveskill(lf, fromplayer); } else { // ie. spell - sprintf(buf, "pw:%d;", getspellpower(lf, fromplayer)); + snprintf(buf, BUFLEN, "pw:%d;", getspellpower(lf, fromplayer)); addflag(lf->flags, F_CANCAST, fromplayer, NA, NA, buf); } // player learns skill @@ -26108,7 +26109,7 @@ int real_touch(lifeform_t *lf, object_t *o, int onpurpose) { msg("^%cThe %s%s %s burns %s!", getlfcol(lf, CC_BAD), obname, getpossessive(obname), o->material->name); } - sprintf(buf, "the touch of %s", o->material->name); + snprintf(buf, BUFLEN, "the touch of %s", o->material->name); losehp(lf, f->val[2], DT_DIRECT, NULL, buf); return B_TRUE; } @@ -26173,7 +26174,7 @@ int real_touch(lifeform_t *lf, object_t *o, int onpurpose) { if (isplayer(lf)) { if (equipped) { char burnbuf[BUFLEN]; - sprintf(burnbuf, "%s burns you!", obname); + snprintf(burnbuf, BUFLEN, "%s burns you!", obname); capitalise(burnbuf); msg("^b%s",burnbuf); } else { @@ -26520,7 +26521,7 @@ int usestairs(lifeform_t *lf, object_t *o, int onpurpose, int climb) { if (key) { char ques[BUFLEN],obname[BUFLEN],ch; getobname(key, obname, 1); - sprintf(ques,"Use your %s to open it?", noprefix(obname)); + snprintf(ques, BUFLEN,"Use your %s to open it?", noprefix(obname)); ch = askchar(ques,"yn","n", B_TRUE, B_FALSE); if (ch == 'y') { operate(lf, key, lf->cell); @@ -27844,7 +27845,7 @@ int wear(lifeform_t *lf, object_t *o) { } if (protect) { char ques[BUFLEN],ch; - sprintf(ques,"Still put on %s?",obname); + snprintf(ques, BUFLEN,"Still put on %s?",obname); ch = askchar(ques,"yn","n", B_TRUE, B_FALSE); if (ch != 'y') { msg("Cancelled."); diff --git a/map.c b/map.c index bfbf428..6c1f937 100755 --- a/map.c +++ b/map.c @@ -4819,7 +4819,7 @@ void createmap(map_t *map, int depth, region_t *region, map_t *parentmap, int ex snprintf(buf, BUFLEN, "%s (id #%d)",buf2, map->id); map->name = strdup(buf); - sprintf(dbbuf, "%s -about to check outline",dbtag); + snprintf(dbbuf, BUFLEN, "%s -about to check outline",dbtag); dblog(dbbuf); // get a list of what things are here based on the region's outline diff --git a/move.c b/move.c index 161b720..f20742a 100755 --- a/move.c +++ b/move.c @@ -2251,7 +2251,7 @@ int opendoor(lifeform_t *lf, object_t *o) { msg("%s bursts open!",obname); } else { char noisebuf[BUFLEN]; - sprintf(noisebuf, "%s bursting open!", obname); + snprintf(noisebuf, BUFLEN, "%s bursting open!", obname); noise(doorcell, NULL, NC_OTHER, SV_CAR, noisebuf, NULL); } } @@ -2268,7 +2268,7 @@ int opendoor(lifeform_t *lf, object_t *o) { msg("%s opens.",obname); } else { char noisebuf[BUFLEN]; - sprintf(noisebuf, "%s opening.", obname); + snprintf(noisebuf, BUFLEN, "%s opening.", obname); noise(doorcell, NULL, NC_OTHER, SV_TALK, noisebuf, NULL); } } @@ -3127,7 +3127,7 @@ int trymove(lifeform_t *lf, int dir, int onpurpose, int strafe) { if (cansee(l, lf)) { char dirbuf[BUFLEN]; // update text field - sprintf(dirbuf, "%d", dir); + snprintf(dirbuf, BUFLEN, "%d", dir); changeflagtext(tf, dirbuf); } } @@ -3468,7 +3468,7 @@ int trymove(lifeform_t *lf, int dir, int onpurpose, int strafe) { } else { strcpy(obname, "something"); } - sprintf(text, "There is %s in your way.",obname); + snprintf(text, BUFLEN, "There is %s in your way.",obname); msg("There is %s in your way.",obname); } } diff --git a/nexus.c b/nexus.c index 946b383..d8acc31 100755 --- a/nexus.c +++ b/nexus.c @@ -323,9 +323,9 @@ int main(int argc, char **argv) { if (!hasflag(j->flags, F_NOPLAYER)) { // letter isn't used if (j->id == J_GOD) { - sprintf(buf, "%-20s(%s)", "Diety", "for debugging"); + snprintf(buf, BUFLEN, "%-20s(%s)", "Diety", "for debugging"); } else { - sprintf(buf, "%-20s(%s)", j->name, getjobcatname(j->category)); + snprintf(buf, BUFLEN, "%-20s(%s)", j->name, getjobcatname(j->category)); } addchoice(&prompt, '-', buf, NULL, j, longdesc); } @@ -616,11 +616,11 @@ int main(int argc, char **argv) { textwithcol(mainwin, "Your starting spells are:\n"); first = B_FALSE; } - sprintf(buf, " - %-20s (%s", sp->name, getschoolname(getspellschoolknown(player, sp->id)) ); + snprintf(buf, BUFLEN, " - %-20s (%s", sp->name, getschoolname(getspellschoolknown(player, sp->id)) ); if (order[n] == FROMRACE) { char rname[BUFLEN]; strcat(buf, ", ^g"); - sprintf(rname, "%s", player->race->name); + snprintf(rname, BUFLEN, "%s", player->race->name); capitalise(rname); strcat(buf, rname); strcat(buf, " perk^n"); @@ -668,12 +668,12 @@ int main(int argc, char **argv) { textwithcol(mainwin, "Your unique starting abilities are:\n"); first = B_FALSE; } - sprintf(buf, " - %-20s", sp->name); + snprintf(buf, BUFLEN, " - %-20s", sp->name); if (order[n] == FROMRACE) { char rname[BUFLEN]; strcat(buf, " (^g"); - sprintf(rname, "%s", player->race->name); + snprintf(rname, BUFLEN, "%s", player->race->name); capitalise(rname); strcat(buf, rname); @@ -1297,7 +1297,7 @@ void donextturn(map_t *map) { char ques[BUFLEN],obname[BUFLEN]; char ch; getobname(o, obname, 1); - sprintf(ques, "%s has gone bad - stop eating?", obname); + snprintf(ques, BUFLEN, "%s has gone bad - stop eating?", obname); ch = askchar(ques, "yn", "y", B_TRUE, B_FALSE); if (ch == 'y') { killflag(f); @@ -1605,8 +1605,8 @@ char getpctletter(float num, float max) { int init(void) { int i; // random numbers - //srand(time(NULL)); - sranddev(); + srand(time(NULL)); + //sranddev(); // preset conditions initcondv(&ccwalkable, CC_WALKABLE, B_TRUE, NA, @@ -2403,19 +2403,19 @@ void timeeffectsworld(map_t *map, int updategametime) { if (h == 6) { char text[BUFLEN]; switch (rnd(1,4)) { - case 1: sprintf(text, "The hour of Glorana's Peace is here."); break; - case 2: sprintf(text, "Mortal, rejoice in the hour of Glorana's Peace!"); break; - case 3: sprintf(text, "Now is the time of Glorana's Peace."); break; - case 4: sprintf(text, "Be healed my child - Glorana's Peace is upon you."); break; + case 1: snprintf(text, BUFLEN, "The hour of Glorana's Peace is here."); break; + case 2: snprintf(text, BUFLEN, "Mortal, rejoice in the hour of Glorana's Peace!"); break; + case 3: snprintf(text, BUFLEN, "Now is the time of Glorana's Peace."); break; + case 4: snprintf(text, BUFLEN, "Be healed my child - Glorana's Peace is upon you."); break; } godsay(R_GODLIFE, B_TRUE, text); more(); } else if (h == 7) { char text[BUFLEN]; switch (rnd(1,3)) { - case 1: sprintf(text, "Glorana's Peace has come to an end for today."); break; - case 2: sprintf(text, "...and so ends Glorana's Peace."); break; - case 3: sprintf(text, "I declare Glorana's Peace ended."); break; + case 1: snprintf(text, BUFLEN, "Glorana's Peace has come to an end for today."); break; + case 2: snprintf(text, BUFLEN, "...and so ends Glorana's Peace."); break; + case 3: snprintf(text, BUFLEN, "I declare Glorana's Peace ended."); break; } godsay(R_GODLIFE, B_TRUE, text); more(); diff --git a/objects.c b/objects.c index d4c6d4a..828c3c1 100755 --- a/objects.c +++ b/objects.c @@ -751,7 +751,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum // now replace the end of the string. // initially we'll have (eg) 'splash of xxx blood' // change it to 'splash of blood' - sprintf(replacefrom, "%s blood", r->name); + snprintf(replacefrom, BUFLEN, "%s blood", r->name); pp = strstr(p, replacefrom); assert(pp); @@ -985,7 +985,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum char *p2; objecttype_t *pot; p2 = p + strlen("fountain of "); - sprintf(potname, "potion of %s", p2); + snprintf(potname, BUFLEN, "potion of %s", p2); pot = findotn(potname); wantfountaintype = pot->id; ot = findot(OT_FOUNTAIN); @@ -1825,7 +1825,7 @@ object_t *addobject(obpile_t *where, char *name, int canstack, int dolinks, enum if (ammotype && (ammoamt > 0)) { char ammostring[BUFLEN]; - sprintf(ammostring, "%d %s",ammoamt,ammotype->name); + snprintf(ammostring, BUFLEN, "%d %s",ammoamt,ammotype->name); addob(o->contents, ammostring); } } @@ -3162,7 +3162,7 @@ void brightflash(cell_t *centre, int range, lifeform_t *immunelf) { cell_t *c; char buf[BUFLEN]; - sprintf(buf, "You see an intense flash of light!"); + snprintf(buf, BUFLEN, "You see an intense flash of light!"); animradial(centre, range, '}', DT_ORTH, C_WHITE, buf, buf); // blind monsters @@ -4430,14 +4430,14 @@ void gencontainercontents(object_t *o) { case CC_CORPSE: r = getrandomraceofsize(getobsize(o)); if (r) { - sprintf(buf, "%s corpse", r->name); + snprintf(buf, BUFLEN, "%s corpse", r->name); addflag(o->flags, F_STARTOB, 100, NA, NA, buf); } break; case CC_CONDIMENTS: switch (rnd(1,2)) { - default: case 1: sprintf(buf, "pinch of salt"); break; - case 2: sprintf(buf, "lump of sugar"); break; + default: case 1: snprintf(buf, BUFLEN, "pinch of salt"); break; + case 2: snprintf(buf, BUFLEN, "lump of sugar"); break; } addflag(o->flags, F_STARTOB, 100, 10, 20, buf); break; @@ -4711,7 +4711,7 @@ int getbreakob(object_t *o, char **breakobname, int *nbreakobs) { for (i = 0; i < *nbreakobs; i++) { if (nobs[i] > 0) { char buf[BUFLEN]; - sprintf(buf, "%d %s", nobs[i], breakob[i]->name); + snprintf(buf, BUFLEN, "%d %s", nobs[i], breakob[i]->name); breakobname[i] = strdup(buf); } else { breakobname[i] = NULL; @@ -5931,7 +5931,7 @@ char *getobdesc(object_t *o, char *buf) { } else { snprintf(buf, BUFLEN, "%s", o->type->desc); } - } else if (o->type->id == OC_SCROLL) { + } else if (o->type->obclass->id == OC_SCROLL) { flag_t *f; f = hasflag(o->flags, F_LINKSPELL); if (f) { @@ -6295,16 +6295,16 @@ char *real_getobname(object_t *o, char *buf, int count, int wantpremods, int wan f = hasflag(o->flags, F_LINKGOD); if (f) god = findgod(f->val[0]); if (god) { - sprintf(basename, "temple of %s", god->race->name); + snprintf(basename, BUFLEN, "temple of %s", god->race->name); } else { - sprintf(basename, "abandoned temple"); + snprintf(basename, BUFLEN, "abandoned temple"); } } else if ((o->type->id == OT_BLOODSPLASH) || (o->type->id == OT_BLOODPOOL)) { race_t *brace = NULL; enum SKILLLEVEL lorelev = PR_INEPT; char *p,xblood[BUFLEN]; if (countflagsofid(o->flags, F_LINKRACE) > 1) { - sprintf(xblood, "mixed blood"); + snprintf(xblood, BUFLEN, "mixed blood"); } else { // you might recognise the type of blood f = hasflag(o->flags, F_LINKRACE); @@ -6313,9 +6313,9 @@ char *real_getobname(object_t *o, char *buf, int count, int wantpremods, int wan if (brace) lorelev = getlorelevel(player, brace->raceclass->id); } if (brace && (lorelev >= PR_BEGINNER)) { - sprintf(xblood, "%s blood", brace->name); + snprintf(xblood, BUFLEN, "%s blood", brace->name); } else { - sprintf(xblood, "unidentifiable blood"); + snprintf(xblood, BUFLEN, "unidentifiable blood"); } } p = strdup(o->type->name); @@ -6355,7 +6355,7 @@ char *real_getobname(object_t *o, char *buf, int count, int wantpremods, int wan // check F_NAME field f = hasflag(o->flags, F_NAME); if (f) { - sprintf(basename, "%s%s grimoire", f->text, getpossessive(f->text)); + snprintf(basename, BUFLEN, "%s%s grimoire", f->text, getpossessive(f->text)); } } else { f = hasflag(o->flags, F_MANUALOF); @@ -6544,7 +6544,7 @@ char *real_getobname(object_t *o, char *buf, int count, int wantpremods, int wan } if (strlen(sizetext)) { char newname[BUFLEN]; - sprintf(newname, "%s %s", sizetext, basename); + snprintf(newname, BUFLEN, "%s %s", sizetext, basename); strcpy(basename, newname); } } @@ -7240,7 +7240,7 @@ objecttype_t *real_getrandomob(cell_t *cell, char *buf, int forcedepth, int forc } assert(nposs > 0); selot = poss[rnd(0,nposs-1)]; - sprintf(buf, "%s", selot->name); + snprintf(buf, BUFLEN, "%s", selot->name); return selot; } @@ -10679,7 +10679,7 @@ int obsfallthrough(cell_t *c, object_t *pit) { if (belowcell) { char oid[BUFLENSMALL]; - sprintf(oid, "%ld",pit->id); + snprintf(oid, BUFLEN, "%ld",pit->id); //uphole = findmapobwithflagval(belowcell->map, F_MAPLINK, NA, NA, NA, oid); uphole = hasobwithflagval(belowcell->obpile, F_MAPLINK, NA, NA, NA, oid); if (!uphole) { @@ -11080,10 +11080,10 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) { if (o->pile->owner) { char ownername[BUFLEN]; getlfname(o->pile->owner,ownername); - sprintf(theob, "%s%s %s",ownername,getpossessive(ownername), + snprintf(theob, BUFLEN, "%s%s %s",ownername,getpossessive(ownername), noprefix(obname)); } else { - sprintf(theob, "the %s", noprefix(obname)); + snprintf(theob, BUFLEN, "the %s", noprefix(obname)); } @@ -11590,7 +11590,7 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) { cell_t *c; char wname[BUFLEN]; r = poss[rnd(0,nposs-1)]; - sprintf(wname, "%s warrior", r->name); + snprintf(wname, BUFLEN, "%s warrior", r->name); c = real_getrandomadjcell(lf->cell, &ccwalkable, B_ALLOWEXPAND, LOF_WALLSTOP, NULL, lf); if (c) { @@ -12033,7 +12033,7 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) { msg("You play a few notes on your panpipes."); } else { char nbuf[BUFLEN]; - sprintf(nbuf, "plays a tune on %ss panpipes.", it(lf)); + snprintf(nbuf, BUFLEN, "plays a tune on %ss panpipes.", it(lf)); noise(lf->cell, lf, NC_OTHER, SV_SHOUT, "the sound of panpipes.", nbuf); } } else if (o->type->id == OT_PEACEPIPES) { @@ -12042,7 +12042,7 @@ int operate(lifeform_t *lf, object_t *o, cell_t *where) { msg("You play an enchanting melody on your panpipes!"); } else { char nbuf[BUFLEN]; - sprintf(nbuf, "plays a calming melody on %ss panpipes.", it(lf)); + snprintf(nbuf, BUFLEN, "plays a calming melody on %ss panpipes.", it(lf)); noise(lf->cell, lf, NC_OTHER, SV_SHOUT, "an eerily calming melody.", nbuf); } for (l = lf->cell->map->lf ; l ; l = l->next) { @@ -13224,7 +13224,7 @@ void potioneffects(lifeform_t *lf, enum OBTYPE oid, object_t *o, enum BLESSTYPE break; case OT_POT_GROWTH: i = getlfsize(lf); - sprintf(origstats, "%d,%d", lf->att[A_STR], lf->maxhp); + snprintf(origstats, BUFLEN, "%d,%d", lf->att[A_STR], lf->maxhp); if (iscursed(o)) { dospelleffects(lf, OT_S_SIZEDOWN, 1, lf, NULL, lf->cell, B_UNCURSED, seen, B_TRUE, NULL); } else { @@ -14151,7 +14151,7 @@ int readsomething(lifeform_t *lf, object_t *o) { char *longdesc; char shortdesc[BUFLEN]; longdesc = malloc(HUGEBUFLEN * sizeof(char)); - sprintf(shortdesc, "%s (Lv %d)", oo->type->name, getspelllevel(oo->type->id)); + snprintf(shortdesc, BUFLEN, "%s (Lv %d)", oo->type->name, getspelllevel(oo->type->id)); if (getspellpower(lf, oo->type->id) <= 0) { // not possible to cast? strcat(shortdesc, " [TOO HARD]"); } @@ -15603,7 +15603,7 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp int radius; char buf[BUFLEN]; // make everyone invisible - sprintf(buf, "%s dispers%s into twinkling light!", obname, (amt == 1) ? "es" : "e" ); + snprintf(buf, BUFLEN, "%s dispers%s into twinkling light!", obname, (amt == 1) ? "es" : "e" ); if (haslos(player, srcloc)) { if (!isknown(o)) makeknown(o->type->id); @@ -15616,7 +15616,7 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp int radius; char buf[BUFLEN]; // make smoke - sprintf(buf, "%s dispers%s into a wispy mist!", obname, (amt == 1) ? "es" : "e" ); + snprintf(buf, BUFLEN, "%s dispers%s into a wispy mist!", obname, (amt == 1) ? "es" : "e" ); if (haslos(player, srcloc)) { if (!isknown(o)) makeknown(o->type->id); @@ -15802,7 +15802,7 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp if (firearm) { char faname[BUFLEN]; getobname(firearm, faname, 1); - sprintf(fatext," (from %s)",faname); + snprintf(fatext, BUFLEN," (from %s)",faname); } else { strcpy(fatext,""); } @@ -15870,7 +15870,7 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp if (thrower != target) { int dist; dist = getcelldist(srcloc, where); - sprintf(attackname, "%s", obname); + snprintf(attackname, BUFLEN, "%s", obname); difficulty = 60 + (speed*10); // harder the closer the projectile was shot from. if (dist <= 1) { @@ -16049,9 +16049,9 @@ int real_fireat(lifeform_t *thrower, object_t *o, int amt, cell_t *where, int sp char buf2[BUFLEN]; char verb[BUFLEN]; if (willtangle) { - sprintf(verb, "wrap%s around", (amt == 1) ? "s" : ""); + snprintf(verb, BUFLEN, "wrap%s around", (amt == 1) ? "s" : ""); } else { - sprintf(verb, "hit%s", (amt == 1) ? "s" : ""); + snprintf(verb, BUFLEN, "hit%s", (amt == 1) ? "s" : ""); } snprintf(buf2, BUFLEN, "%s %s %s.",obname, verb, targetname); if (lfhasflag(player, F_EXTRAINFO)) { @@ -16849,10 +16849,10 @@ void timeeffectsob(object_t *o) { char cname[BUFLEN]; getlfname(creator, cname); // ie. "the djinn's whirlwind" - sprintf(damstring, "%s%s %s", cname, getpossessive(cname), noprefix(obname)); + snprintf(damstring, BUFLEN, "%s%s %s", cname, getpossessive(cname), noprefix(obname)); } else { // ie. "a whirlwind" - sprintf(damstring, "%s", obname); + snprintf(damstring, BUFLEN, "%s", obname); } losehp(lf, roll(f->text), DT_PROJECTILE, creator, damstring); // lfs then get knocked away (and might take further damage from hitting something) @@ -17789,7 +17789,7 @@ int unjam(lifeform_t *lf, object_t *o) { } else { if (isdoor(o, NULL)) { char noisebuf[BUFLEN]; - sprintf(noisebuf, "%s jiggling against its hinges.", obname); + snprintf(noisebuf, BUFLEN, "%s jiggling against its hinges.", obname); noise(c, NULL, NC_OTHER, SV_SHOUT, noisebuf, NULL); } } diff --git a/save.c b/save.c index 8aa5a86..55b6c30 100755 --- a/save.c +++ b/save.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -398,7 +399,7 @@ map_t *loadmap(FILE *f) { // cell info fscanf(f, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", - &roomid, &celltypeid, &c->known, &c->knowntime, &c->knownglyph.ch, &c->knownglyph.colour, &c->visited, &c->locked, &temphab, &c->isroomwall, &c->temperature); + &roomid, &celltypeid,(int *) &c->known, &c->knowntime, &c->knownglyph.ch, &c->knownglyph.colour, &c->visited, &c->locked, &temphab, &c->isroomwall, &c->temperature); c->habitat = findhabitat(temphab); c->room = findroom(m, roomid); diff --git a/shops.c b/shops.c index 3b3fd7c..c939953 100755 --- a/shops.c +++ b/shops.c @@ -494,7 +494,7 @@ enum SHOPRETURN shopdonate(lifeform_t *lf, object_t *vm, int starty, char *topte // confirm count for gold if (o->type->obclass->id == OC_MONEY) { char answer[BUFLEN],buf[BUFLEN]; - sprintf(buf, "How much money will you donate (you have $%d)?", o->amt); + snprintf(buf, BUFLEN, "How much money will you donate (you have $%d)?", o->amt); askstring(buf, '?', answer, BUFLEN, NULL); count = atoi(answer); if (count <= 0) { @@ -671,7 +671,7 @@ enum SHOPRETURN shopbless(lifeform_t *lf, object_t *vm, int starty, char *toptex } // ask which object - sprintf(buf, "Bless which object (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "Bless which object (you have $%d)?", countmoney(lf->pack)); initprompt(&prompt, buf); for (o = player->pack->first ; o ; o = o->next) { int ok = B_FALSE; @@ -683,7 +683,7 @@ enum SHOPRETURN shopbless(lifeform_t *lf, object_t *vm, int starty, char *toptex if (ok) { char costbuf[BUFLEN]; getobname(o, buf, o->amt); - sprintf(costbuf, "%-60s($%d)", buf, getshopblessprice(o, vm)); + snprintf(costbuf, BUFLEN, "%-60s($%d)", buf, getshopblessprice(o, vm)); addchoice(&prompt, o->letter, costbuf, costbuf, o, NULL); } } @@ -709,7 +709,7 @@ enum SHOPRETURN shopbless(lifeform_t *lf, object_t *vm, int starty, char *toptex if (skillcheck(player, SC_SPEECH, 100, 0)) { char goldbuf[BUFLEN]; msg("\"...so I will return your payment.\""); more(); - sprintf(goldbuf, "%d gold dollars", cost); + snprintf(goldbuf, BUFLEN, "%d gold dollars", cost); addob(player->pack, goldbuf); } else { msg("\"Unfortunately, we do not offer refunds.\""); more(); @@ -751,7 +751,7 @@ enum SHOPRETURN shopid(lifeform_t *lf, object_t *vm, int starty, char *toptext, getflags(vm->flags, sellflag, &nsellflags, F_SHOPACCEPTSFLAG, F_NONE); // ask what to sell - sprintf(buf, "What would you like to inspect (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "What would you like to inspect (you have $%d)?", countmoney(lf->pack)); initprompt(&prompt, buf); prompt.maycancel = B_TRUE; @@ -769,7 +769,7 @@ enum SHOPRETURN shopid(lifeform_t *lf, object_t *vm, int starty, char *toptext, if (ok) { char costbuf[BUFLEN]; getobname(o, buf, o->amt); - sprintf(costbuf, "%-60s($%d)", buf, cost); + snprintf(costbuf, BUFLEN, "%-60s($%d)", buf, cost); addchoice(&prompt, o->letter, costbuf, costbuf, o, NULL); } } @@ -960,7 +960,7 @@ enum SHOPRETURN shoppurchase(lifeform_t *lf, object_t *vm, int starty, char *top enum SKILLLEVEL slev; slev = getskill(lf, SK_SPEECH); // determine payment method - sprintf(ques, "How will you pay for %s ($%d)?", obname, value); + snprintf(ques, BUFLEN, "How will you pay for %s ($%d)?", obname, value); initprompt(&prompt, ques); for (oo = player->pack->first ; oo ; oo = oo->next) { if ((oo->type->id == OT_GOLD) || (oo->type->id == OT_CREDITCARD) || hasflag(oo->flags, F_GEM)) { @@ -982,7 +982,7 @@ enum SHOPRETURN shoppurchase(lifeform_t *lf, object_t *vm, int starty, char *top thisval = applyshoppricemod(getobvalue(oo), player, vm, SA_SELL); if (thisval >= value) { valid = B_TRUE; - sprintf(fullname, "%s (worth $%d)", moneyname, thisval); + snprintf(fullname, BUFLEN, "%s (worth $%d)", moneyname, thisval); } } } else { @@ -1066,7 +1066,7 @@ enum SHOPRETURN shoppurchase(lifeform_t *lf, object_t *vm, int starty, char *top if (change > 0) { char changebuf[BUFLEN]; - sprintf(changebuf, "%d gold dollars", change); + snprintf(changebuf, BUFLEN, "%d gold dollars", change); addob(player->pack, changebuf); msg("You receive $%d change.", change); more(); } @@ -1158,7 +1158,7 @@ enum SHOPRETURN shoprepair(lifeform_t *lf, object_t *vm, int starty, char *topte // get list of objects to repair - sprintf(buf, "Repair which object (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "Repair which object (you have $%d)?", countmoney(lf->pack)); initprompt(&prompt, buf); for (o = player->pack->first ; o ; o = o->next) { if (isarmour(o) && isdamaged(o)) { @@ -1170,7 +1170,7 @@ enum SHOPRETURN shoprepair(lifeform_t *lf, object_t *vm, int starty, char *topte thiscost = applyshoppricemod((f->val[1] - f->val[0]) * hpcost, lf, vm, SA_BUY); // add to prompt getobname(o, obname, o->amt); - sprintf(desc, "%s ($%d)", obname,thiscost); + snprintf(desc, BUFLEN, "%s ($%d)", obname,thiscost); addchoice(&prompt, o->letter, desc, desc, o, NULL); } } @@ -1240,13 +1240,13 @@ enum SHOPRETURN shopresize(lifeform_t *lf, object_t *vm, int starty, char *topte } // ask which object - sprintf(buf, "Resize which object (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "Resize which object (you have $%d)?", countmoney(lf->pack)); initprompt(&prompt, buf); for (o = player->pack->first ; o ; o = o->next) { if (hasflag(o->flags, F_MULTISIZE) && !armourfits(player, o, NULL)) { char costbuf[BUFLEN]; getobname(o, buf, o->amt); - sprintf(costbuf, "%-60s($%d)", buf, resizecost); + snprintf(costbuf, BUFLEN, "%-60s($%d)", buf, resizecost); addchoice(&prompt, o->letter, costbuf, costbuf, o, NULL); } } @@ -1294,12 +1294,12 @@ enum SHOPRETURN shoprest(lifeform_t *lf, object_t *vm, int starty, char *toptext } // how many hours? - sprintf(buf, "How many hours will you pay for (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "How many hours will you pay for (you have $%d)?", countmoney(lf->pack)); initprompt(&prompt, buf); for (i = 1; i <= 9; i++) { int thiscost; thiscost = cost * i; - sprintf(buf, "%d hour%s ($%d)", i, (i == 1) ? "" : "s", thiscost); + snprintf(buf, BUFLEN, "%d hour%s ($%d)", i, (i == 1) ? "" : "s", thiscost); addchoice(&prompt, '0' + i, buf, buf, NULL, NULL); } addchoice(&prompt, '-', "Cancel", NULL, NULL, NULL); @@ -1313,7 +1313,7 @@ enum SHOPRETURN shoprest(lifeform_t *lf, object_t *vm, int starty, char *toptext givemoney(lf, NULL, cost); // mark that we are resting in a hotel - sprintf(obid, "%ld", vm->id); + snprintf(obid, BUFLEN, "%ld", vm->id); addflag(lf->flags, F_RESTINGINMOTEL, amt*60, 0, NA, obid); addflag(lf->flags, F_RESTUNTILBETTER, B_TRUE, NA, NA, NULL); breakaitargets(lf, B_FALSE); @@ -1344,7 +1344,7 @@ enum SHOPRETURN shopsell(lifeform_t *lf, object_t *vm, int starty, char *toptext getflags(vm->flags, sellflag, &nsellflags, F_SHOPACCEPTSFLAG, F_NONE); // ask what to sell - sprintf(buf, "What will you sell (you have $%d)?", countmoney(lf->pack)); + snprintf(buf, BUFLEN, "What will you sell (you have $%d)?", countmoney(lf->pack)); o = doaskobject(player->pack, buf, NULL, &count, B_TRUE, B_FALSE, B_FALSE, '\0', vm, SA_SELL, NULL, B_FALSE); if (!o) { @@ -1388,7 +1388,7 @@ enum SHOPRETURN shopsell(lifeform_t *lf, object_t *vm, int starty, char *toptext // confirm getobname(o, obname, count); - sprintf(buf, "Sell %s for $%d?", obname, sellprice); + snprintf(buf, BUFLEN, "Sell %s for $%d?", obname, sellprice); ch = askchar(buf, "yn","n", B_TRUE, B_FALSE); if (ch == 'y') { // move object to the shop @@ -1401,7 +1401,7 @@ enum SHOPRETURN shopsell(lifeform_t *lf, object_t *vm, int starty, char *toptext newob->letter = let; (*nsold)++; // give money to player - sprintf(paymentbuf, "%d gold dollars", sellprice); + snprintf(paymentbuf, BUFLEN, "%d gold dollars", sellprice); addob(player->pack, paymentbuf); practice(player, SK_SPEECH, 1); diff --git a/spell.c b/spell.c index b576cdc..e9246ca 100755 --- a/spell.c +++ b/spell.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -218,7 +219,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef char *p; p = strdup(tempot->name); makeplural(&p); - sprintf(ptext, "How many %s will you build (max %d)", p, npossible); + snprintf(ptext, BUFLEN, "How many %s will you build (max %d)", p, npossible); free(p); askstring(ptext, '?', buf, BUFLEN, "1"); numtobuild = atoi(buf); @@ -251,7 +252,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef } } else { char buf[BUFLEN]; - sprintf(buf, "%d original %s", numtobuild, tempot->name); + snprintf(buf, BUFLEN, "%d original %s", numtobuild, tempot->name); o = addob(user->pack, buf); } @@ -422,7 +423,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef // how can we check the stairs? getobname(stairs, obname, 1); - sprintf(buf, "How will you check %s", obname); + snprintf(buf, BUFLEN, "How will you check %s", obname); initprompt(&prompt, buf); if (lfhasflag(user, F_DETECTLIFE)) { addchoice(&prompt, 'd', "Detect lifeforms", NULL, NULL, NULL); @@ -927,7 +928,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef char yn; char ques[BUFLEN]; getobname(o, obname, o->amt); - sprintf(ques, "There %s %s here. Cook it?", OB1(o,"is","are"),obname); + snprintf(ques, BUFLEN, "There %s %s here. Cook it?", OB1(o,"is","are"),obname); yn = askchar(ques, "yn","n", B_TRUE, B_FALSE); if (yn == 'y') { corpse = o; @@ -1160,7 +1161,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef } else { objecttype_t *ot; ot = findot(trapflag->val[0]); - sprintf(buf, "%s %s", needan(ot->name) ? "an" : "a", ot->name); + snprintf(buf, BUFLEN, "%s %s", needan(ot->name) ? "an" : "a", ot->name); // ie. trapped object killflag(trapflag); } @@ -1359,7 +1360,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef removeob(o, 1); if (numnew && newot) { char newobname[BUFLEN]; - sprintf(newobname, "%d %s", numnew, newot->name); + snprintf(newobname, BUFLEN, "%d %s", numnew, newot->name); addob(c->obpile, newobname); } taketime(user, getactspeed(user)*2); @@ -1615,7 +1616,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef return B_TRUE; } - sprintf(shtext, "%ld", selshield->id); + snprintf(shtext, BUFLEN, "%ld", selshield->id); addflag(user->flags, F_FULLSHIELD, NA, NA, NA, shtext); taketime(user, getactspeed(user)); } else if (abilid == OT_A_GRAB) { @@ -1951,7 +1952,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef if (pct >= cutoff) { char buf[BUFLEN],desc[BUFLEN]; getobname(o, buf, o->amt); - sprintf(desc, "%s",buf); + snprintf(desc, BUFLEN, "%s",buf); // we can repair this object addchoice(&prompt, o->letter, desc, desc, o, NULL); } @@ -1975,7 +1976,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef o = (object_t *)prompt.choice[n].data; if (o) { char buf[BUFLEN]; - sprintf(buf, "%ld", o->id); + snprintf(buf, BUFLEN, "%ld", o->id); addflag(user->flags, F_REPAIRING, NA, NA, NA, buf); } } @@ -1995,7 +1996,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef if (o) { char buf[BUFLEN]; - sprintf(buf, "%ld", o->id); + snprintf(buf, BUFLEN, "%ld", o->id); addflag(user->flags, F_REPAIRING, NA, NA, NA, buf); getobname(o, buf, o->amt); if (isplayer(user)) { @@ -2071,7 +2072,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef // ask what size we want. - sprintf(buf, "Resize %s to what size?", obname); + snprintf(buf, BUFLEN, "Resize %s to what size?", obname); initprompt(&prompt, buf); for (i = SZ_MEDIUM; i <= SZ_LARGE; i++) { if (i != origsize) { @@ -2235,7 +2236,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef damamt = getstrdammod(user); if (damamt > 0) { char damstr[BUFLEN]; - sprintf(damstr, "%s%s shield bash", username, getpossessive(username)); + snprintf(damstr, BUFLEN, "%s%s shield bash", username, getpossessive(username)); losehp(target, damamt, DT_BASH, user, damstr); } if (!isdead(target)) { @@ -2438,7 +2439,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef difficulty = 100 + (getspelllevel(f->val[0])*10); mod = getspellskill(user, f->val[0]) * 10; //pct = getskillcheckchance(user, SC_LEARNMAGIC, difficulty, mod); - sprintf(buf2, "%s (%d%% success chance)", buf, difficulty-mod); + snprintf(buf2, BUFLEN, "%s (%d%% success chance)", buf, difficulty-mod); addchoice(&prompt, o->letter, buf2, NULL, f, NULL); } } @@ -3320,12 +3321,12 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef return B_TRUE; } getobname(wep, obname, 1); - sprintf(buf, "Deal what kind of damage with your %s?", noprefix(obname)); + snprintf(buf, BUFLEN, "Deal what kind of damage with your %s?", noprefix(obname)); initprompt(&prompt, buf); for (i = 0; i < nretflags; i++) { f = retflag[i]; - sprintf(buf, "%s, DR %d", getdamname(f->val[0]), f->val[1]); + snprintf(buf, BUFLEN, "%s, DR %d", getdamname(f->val[0]), f->val[1]); if (strlen(f->text)) { strcat(buf, "("); strcat(buf, f->text); @@ -3569,7 +3570,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef getobname(o, obname, 1); // ask what size we want. - sprintf(buf, "Destroy which object to enahnce %s?", obname); + snprintf(buf, BUFLEN, "Destroy which object to enahnce %s?", obname); initprompt(&prompt, buf); for (o2 = user->pack->first ; o2 ; o2 = o2->next) { if ((o2 != o) && (o2->type->id == o->type->id)) { @@ -3865,7 +3866,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef if (wep) { char buf[BUFLEN],wepname[BUFLEN]; getobname(wep, buf, 1); - sprintf(wepname, "%s", noprefix(buf)); + snprintf(wepname, BUFLEN, "%s", noprefix(buf)); if (isplayer(user)) { msg("You swing your %s in a wide arc!", wepname); } else if (cansee(player, user)) { @@ -4079,7 +4080,7 @@ int abilityeffects(lifeform_t *user, enum OBTYPE abilid, cell_t *targcell, lifef dam = getstamina(user); setstamina(user, 0); - sprintf(damstr, "%s%s invocation of the iron fist",username,getpossessive(username)); + snprintf(damstr, BUFLEN, "%s%s invocation of the iron fist",username,getpossessive(username)); losehp(target, dam, DT_DIRECT, user, damstr); if (dir != D_NONE) { @@ -4571,11 +4572,11 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (newob) { newob->amt += (int)obvalue; } else { - sprintf(obtocreate, "%d gold dollars", (int)obvalue); + snprintf(obtocreate, BUFLEN, "%d gold dollars", (int)obvalue); newob = addob(op, obtocreate); } } else { - sprintf(obtocreate, "%d gold dollars", (int)obvalue); + snprintf(obtocreate, BUFLEN, "%d gold dollars", (int)obvalue); newob = addob(op, obtocreate); } } @@ -4961,7 +4962,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (caster) { char cname[BUFLEN]; real_getlfnamea(caster, cname, NULL, B_SHOWALL, B_REALRACE); - sprintf(damstr, "%s%s blight spell.", cname, getpossessive(cname)); + snprintf(damstr, BUFLEN, "%s%s blight spell.", cname, getpossessive(cname)); } else { strcpy(damstr, "a blight spell."); } @@ -5151,7 +5152,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ return B_TRUE; } - sprintf(killertext, "%s%s hotfoot spell", castername, getpossessive(castername)); + snprintf(killertext, BUFLEN, "%s%s hotfoot spell", castername, getpossessive(castername)); addflag(target->flags, F_HOTFEET, 1, DT_FIRE, NA, killertext); if (isplayer(target) || cansee(player, target)) { if (seenbyplayer) *seenbyplayer = B_TRUE; @@ -5223,11 +5224,11 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ char obname[BUFLEN]; if (spellid == OT_S_COLDSNAP) { - sprintf(obname, "unnatural coldness"); + snprintf(obname, BUFLEN, "unnatural coldness"); tempmod = -30; radius = power+1; } else { - sprintf(obname, "unnatural heat"); + snprintf(obname, BUFLEN, "unnatural heat"); tempmod = 30; radius = power-1; } @@ -5761,7 +5762,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ char attackname[BUFLEN]; getlfname(target, lfname); dam = rnd(1,4); - sprintf(attackname, "a bolt of chi energy"); + snprintf(attackname, BUFLEN, "a bolt of chi energy"); // target takes magical damage // always hit if (check_for_block(caster, target, dam, DT_EXPLOSIVE, 999, attackname, B_RANGED)) { @@ -5836,7 +5837,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ range = 1 + (power / 5); // announce - sprintf(buf, "%s emit%s a blast of icy cold!",castername,isplayer(caster) ? "" : "s"); + snprintf(buf, BUFLEN, "%s emit%s a blast of icy cold!",castername,isplayer(caster) ? "" : "s"); animradial(caster->cell, range, '}', C_GREY, DT_ORTH, buf, "Something emits a blast of icy cold!"); if (isplayer(caster) || cansee(player, caster)) { @@ -6371,9 +6372,9 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ // announce if (caster && (targcell == caster->cell)) { - sprintf(buf, "%s radiate%s a field of decay!",castername,isplayer(caster) ? "" : "s"); + snprintf(buf, BUFLEN, "%s radiate%s a field of decay!",castername,isplayer(caster) ? "" : "s"); } else { - sprintf(buf, "A field of decay radiates outwards!"); + snprintf(buf, BUFLEN, "A field of decay radiates outwards!"); } animradial(targcell, range, '}', C_INDIGO, DT_ORTH, buf, "Something radiates a field of decay!"); @@ -6391,7 +6392,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (caster) { char cname[BUFLEN]; real_getlfnamea(caster, cname, NULL, B_SHOWALL, B_REALRACE); - sprintf(damstr, "%s%s field of decay spell.", cname, getpossessive(cname)); + snprintf(damstr, BUFLEN, "%s%s field of decay spell.", cname, getpossessive(cname)); } else { strcpy(damstr, "a field of decay spell."); } @@ -7144,7 +7145,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (caster && !targcell) targcell = caster->cell; range = 2 + (power / 4); - sprintf(buf, "%s emit%s a radial blast of energy!",castername,isplayer(caster) ? "" : "s"); + snprintf(buf, BUFLEN, "%s emit%s a radial blast of energy!",castername,isplayer(caster) ? "" : "s"); animradial(targcell, range, '}', C_CYAN, DT_COMPASS, buf, "Something emits a radial blast of energy!"); if (isplayer(caster) || haslos(player, targcell)) { @@ -7300,7 +7301,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ int gpower; gpower = 2 + (power / 2); limit(&gpower, 1, NA); - sprintf(buf, "^g*WARD%d*^n", gpower); + snprintf(buf, BUFLEN, "^g*WARD%d*^n", gpower); writetextonground(caster, caster->cell, buf, power*5); } else if (spellid == OT_S_FLOATINGDISC) { lifeform_t *newlf; @@ -7389,13 +7390,13 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ radius = power/3; limit(&radius, 1, NA); if (isplayer(target)) { - sprintf(buf, "You unleash a mighty shockwave!"); + snprintf(buf, BUFLEN, "You unleash a mighty shockwave!"); if (seenbyplayer) *seenbyplayer = B_TRUE; animradial(target->cell, radius, '}', C_RED, DT_COMPASS, buf, buf); } else if (cansee(player, target)) { char tname[BUFLEN]; getlfname(target, tname); - sprintf(buf, "%s unleashes a mighty shockwave!", tname); + snprintf(buf, BUFLEN, "%s unleashes a mighty shockwave!", tname); if (seenbyplayer) *seenbyplayer = B_TRUE; animradial(target->cell, radius, '}', C_RED, DT_COMPASS, buf, buf); } @@ -7620,9 +7621,9 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ range = 1 + (power / 5); // announce - sprintf(buf, "%s emit%s a %sblast of fire!",castername,isplayer(caster) ? "" : "s", + snprintf(buf, BUFLEN, "%s emit%s a %sblast of fire!",castername,isplayer(caster) ? "" : "s", (power >= 5) ? "huge " : ""); - sprintf(buf2, "Something emit%s a %sblast of fire!",isplayer(caster) ? "" : "s", + snprintf(buf2, BUFLEN, "Something emit%s a %sblast of fire!",isplayer(caster) ? "" : "s", (power >= 5) ? "huge " : ""); animradial(caster->cell, range, '}', C_RED, DT_ORTH, buf, buf2); @@ -7968,7 +7969,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (gettr(c->lf) <= power) { char buf[BUFLEN]; // instadeath - sprintf(buf, "being sucked into %s", castername); + snprintf(buf, BUFLEN, "being sucked into %s", castername); losehp(c->lf, c->lf->maxhp, DT_DIRECT, target, buf); if (isplayer(c->lf)) { msg("^%cYour essence is sucked into %s!", getlfcol(c->lf, CC_VBAD), castername); @@ -8762,9 +8763,9 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ getlfname(target, lfname); dam = rolldie(power, 4); if (power == 1) { - sprintf(attackname, "a spike of mana"); + snprintf(attackname, BUFLEN, "a spike of mana"); } else { - sprintf(attackname, "%s spikes of mana", numbuf); + snprintf(attackname, BUFLEN, "%s spikes of mana", numbuf); } // target takes magical damage // always hit @@ -9052,9 +9053,9 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ } else if (seen) { char copytext[BUFLEN]; if (ndone == 1) { - sprintf(copytext, "A duplicate"); + snprintf(copytext, BUFLEN, "A duplicate"); } else { - sprintf(copytext, "%d duplicates", ndone); + snprintf(copytext, BUFLEN, "%d duplicates", ndone); } msg("%s of %s appear%s!", copytext, castername, (ndone == 1) ? "s" : ""); } @@ -9463,7 +9464,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ return B_TRUE; } - sprintf(oidbuf, "%ld", targob->id); + snprintf(oidbuf, BUFLEN, "%ld", targob->id); f = addflag(caster->flags, F_THROWING, B_TRUE, NA, NA, oidbuf); if (!validatespellcell(caster, &targcell, TT_MONSTER, spellid, power, frompot)) return B_TRUE; killflagsofid(caster->flags, F_THROWING); @@ -9980,7 +9981,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (caster && !targcell) targcell = caster->cell; range = 3; - sprintf(buf, "%s emit%s a blast of psionic power!",castername,isplayer(caster) ? "" : "s"); + snprintf(buf, BUFLEN, "%s emit%s a blast of psionic power!",castername,isplayer(caster) ? "" : "s"); animradial(targcell, range, '}', C_CYAN, DT_COMPASS, buf, "Something emits a radial blast of psionic power!"); if (isplayer(caster) || haslos(player, targcell)) { @@ -10616,7 +10617,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ char ptext[BUFLEN]; char distbuf[BUFLEN],dirbuf[BUFLEN]; getdisttext(caster->cell, c, distbuf, NULL, dirbuf); - sprintf(ptext, "%s: %s (%s to the %s)", mapname, obname, distbuf, dirbuf); + snprintf(ptext, BUFLEN, "%s: %s (%s to the %s)", mapname, obname, distbuf, dirbuf); addchoice(&prompt, ch++, ptext, NULL, o, NULL); } } @@ -10634,7 +10635,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ real_getlfnamea(c->lf, lfname, NULL, B_SHOWALL, B_REALRACE); getdisttext(caster->cell, c, distbuf, NULL, dirbuf); - sprintf(ptext, "%s: %s (%s to the %s, held by %s)", + snprintf(ptext, BUFLEN, "%s: %s (%s to the %s, held by %s)", mapname, obname, distbuf, dirbuf, lfname); addchoice(&prompt, ch++, ptext, NULL, o, NULL); @@ -12099,7 +12100,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (!reverting) { int newstr; - sprintf(origstats, "%d,%d", target->att[A_STR], target->maxhp); + snprintf(origstats, BUFLEN, "%d,%d", target->att[A_STR], target->maxhp); // affect str / hp newstr = target->att[A_STR] + 50; @@ -12286,7 +12287,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ anim(caster->cell, targcell, '^', C_WHITE); - sprintf(buf, "A huge snowball explodes! "); + snprintf(buf, BUFLEN, "A huge snowball explodes! "); animradial(targcell, 1, '}', C_WHITE, DT_ORTH, buf, buf); redrawpause(); @@ -12463,7 +12464,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ } // link caster to target - sprintf(buf, "%s%s soul link spell", castername, getpossessive(castername)); + snprintf(buf, BUFLEN, "%s%s soul link spell", castername, getpossessive(castername)); addflag(target->flags, F_SOULLINK, targ2->id, NA, NA, buf); addflag(targ2->flags, F_SOULLINK, target->id, NA, NA, buf); @@ -12609,7 +12610,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (f) { // should always be true char dambuf[BUFLEN]; free(f->text); - sprintf(dambuf, "%dd4", power*3); + snprintf(dambuf, BUFLEN, "%dd4", power*3); f->text = strdup(dambuf); } real_fireat(caster, o, 1, targcell, 6, NULL, B_FALSE, OT_S_SPIKEVOLLEY, NULL); @@ -12917,8 +12918,8 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ if (isplayer(caster) && !targcell) { char buf[BUFLEN],buf2[BUFLEN]; - sprintf(buf, "Throw %s where?", obname); - sprintf(buf2, "Superheat->%s->", obname); + snprintf(buf, BUFLEN, "Throw %s where?", obname); + snprintf(buf2, BUFLEN, "Superheat->%s->", obname); targcell = askcoords(buf, buf2,TT_MONSTER, caster, getmaxthrowrange(caster, targob), LOF_NEED, B_TRUE); } if (!targcell) { @@ -13195,7 +13196,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ // TODO: start trail from the object snprintf(buf2, BUFLEN, "Telekinesis->%s->",obname); - sprintf(oidbuf, "%ld", targob->id); + snprintf(oidbuf, BUFLEN, "%ld", targob->id); addflag(caster->flags, F_THROWING, B_TRUE, NA, NA, oidbuf); targcell = askcoords(buf, buf2,TT_MONSTER | TT_PLAYER, caster, UNLIMITED, LOF_DONTNEED, B_FALSE); killflagsofid(caster->flags, F_THROWING); @@ -13558,11 +13559,11 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ char firename[BUFLEN]; if (power < 5) { - sprintf(firename, "small fire"); + snprintf(firename, BUFLEN, "small fire"); } else if (power < 8) { - sprintf(firename, "medium fire"); + snprintf(firename, BUFLEN, "medium fire"); } else { - sprintf(firename, "large fire"); + snprintf(firename, BUFLEN, "large fire"); } // get vert distance @@ -13904,7 +13905,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ isplayer(targcell->lf) ? "" : "s"); } - sprintf(dambuf, "%s%s warp wood spell", castername, getpossessive(castername)); + snprintf(dambuf, BUFLEN, "%s%s warp wood spell", castername, getpossessive(castername)); losehp(targcell->lf, dam, DT_DIRECT, caster, dambuf); if (haslos(player, targcell)) { if (seenbyplayer) *seenbyplayer = B_TRUE; @@ -14109,7 +14110,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_ f = addtempflag(caster->flags, F_WINDSHIELD, power, NA, NA, NULL, FROMSPELL); f->obfrom = spellid; - sprintf(retaltext, "1d%d^whirling debris", power); + snprintf(retaltext, BUFLEN, "1d%d^whirling debris", power); f = addtempflag(target->flags, F_RETALIATE, DT_BASH, NA, NA, retaltext, FROMSPELL); f->obfrom = spellid; } else if (spellid == OT_S_WISHLIMITED) { @@ -15692,13 +15693,13 @@ int spellresisted(lifeform_t *target, lifeform_t *caster, int spellid, int power if (isplayer(target)) { strcpy(text, "You shrug off a mental attack."); } else { - sprintf(text, "%s shrugs off %s mental attack.", buf, isplayer(caster) ? "your" : "a"); + snprintf(text, BUFLEN, "%s shrugs off %s mental attack.", buf, isplayer(caster) ? "your" : "a"); } } else { if (isplayer(target)) { strcpy(text, "You resist the effects of a spell."); } else { - sprintf(text, "%s resists %s spell.", buf, isplayer(caster) ? "your" : "a"); + snprintf(text, BUFLEN, "%s resists %s spell.", buf, isplayer(caster) ? "your" : "a"); } } } diff --git a/text.c b/text.c index 3c7b00e..78d06b6 100755 --- a/text.c +++ b/text.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include diff --git a/vault.c b/vault.c index a715315..40a807d 100755 --- a/vault.c +++ b/vault.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include