Index: src/console.mm ================================================================== --- src/console.mm +++ src/console.mm @@ -37,12 +37,12 @@ cl.cref = conlines.length() > 100 ? conlines.pop().cref : (char *)calloc(_MAXDEFSTR, 1); // for how long to keep line on screen cl.outtime = lastmillis; conlines.insert(0, cl); - if (highlight) // show line in a different colour, for chat etc. - { + if (highlight) { + // show line in a different colour, for chat etc. cl.cref[0] = '\f'; cl.cref[1] = 0; strcat_s(cl.cref, sf.UTF8String); } else { strcpy_s(cl.cref, sf.UTF8String); @@ -150,11 +150,12 @@ void mapmsg(OFString *s) { @autoreleasepool { - strn0cpy(hdr.maptitle, s.UTF8String, 128); + memset(hdr.maptitle, '\0', sizeof(hdr.maptitle)); + strncpy(hdr.maptitle, s.UTF8String, 127); } } COMMAND(mapmsg, ARG_1STR) void Index: src/world.mm ================================================================== --- src/world.mm +++ src/world.mm @@ -484,11 +484,12 @@ { ents[i].x += ssize / 4; ents[i].y += ssize / 4; } } else { - strn0cpy(hdr.maptitle, "Untitled Map by Unknown", 128); + char buffer[128] = "Untitled Map by Unknown"; + memcpy(hdr.maptitle, buffer, 128); hdr.waterlevel = -100000; loopi(15) hdr.reserved[i] = 0; loopk(3) loopi(256) hdr.texlists[k][i] = i; ents.setsize(0); block b = { 8, 8, ssize - 16, ssize - 16 }; Index: src/worldio.mm ================================================================== --- src/worldio.mm +++ src/worldio.mm @@ -10,33 +10,35 @@ } static OFString *cgzname, *bakname, *pcfname, *mcfname; static void -setnames(OFString *name_) +setnames(OFString *name) { @autoreleasepool { - const char *name = name_.UTF8String; - string pakname, mapname; - const char *slash = strpbrk(name, "/\\"); - if (slash) { - strn0cpy(pakname, name, slash - name + 1); - strcpy_s(mapname, slash + 1); + OFCharacterSet *cs = + [OFCharacterSet characterSetWithCharactersInString:@"/\\"]; + OFRange range = [name rangeOfCharacterFromSet:cs]; + OFString *pakname, *mapname; + + if (range.location != OFNotFound) { + pakname = [name substringToIndex:range.location]; + mapname = [name substringFromIndex:range.location + 1]; } else { - strcpy_s(pakname, "base"); - strcpy_s(mapname, name); + pakname = @"base"; + mapname = name; } cgzname = [[OFString alloc] - initWithFormat:@"packages/%s/%s.cgz", pakname, mapname]; + initWithFormat:@"packages/%@/%@.cgz", pakname, mapname]; bakname = - [[OFString alloc] initWithFormat:@"packages/%s/%s_%d.BAK", + [[OFString alloc] initWithFormat:@"packages/%@/%@_%d.BAK", pakname, mapname, lastmillis]; pcfname = [[OFString alloc] - initWithFormat:@"packages/%s/package.cfg", pakname]; + initWithFormat:@"packages/%@/package.cfg", pakname]; mcfname = [[OFString alloc] - initWithFormat:@"packages/%s/%s.cfg", pakname, mapname]; + initWithFormat:@"packages/%@/%@.cfg", pakname, mapname]; } } // the optimize routines below are here to reduce the detrimental effects of // messy mapping by setting certain properties (vdeltas and textures) to