ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.258 by root, Thu Apr 10 14:35:50 2008 UTC vs.
Revision 1.259 by root, Tue May 20 02:47:21 2008 UTC

2292 else 2292 else
2293 *data++ = 0; 2293 *data++ = 0;
2294 } 2294 }
2295 } 2295 }
2296 2296
2297 if (data - (uint8_t *)SvPVX (data_sv) == w * h + 5)
2298 {
2299 SvREFCNT_dec (data_sv);
2300 RETVAL = &PL_sv_undef;
2301 }
2302 else
2303 {
2297 SvPOK_only (data_sv); 2304 SvPOK_only (data_sv);
2298 SvCUR_set (data_sv, data - (uint8_t *)SvPVX (data_sv)); 2305 SvCUR_set (data_sv, data - (uint8_t *)SvPVX (data_sv));
2299 RETVAL = data_sv; 2306 RETVAL = data_sv;
2307 }
2300} 2308}
2301 OUTPUT: 2309 OUTPUT:
2302 RETVAL 2310 RETVAL
2303 2311
2304void 2312void
2305set_rect (DC::Map self, int x0, int y0, uint8_t *data) 2313set_rect (DC::Map self, int x0, int y0, SV *data_sv)
2306 PPCODE: 2314 PPCODE:
2307{ 2315{
2308 int x, y, z; 2316 int x, y, z;
2309 int w, h; 2317 int w, h;
2310 int x1, y1; 2318 int x1, y1;
2319 STRLEN len;
2320 uint8_t *data, *end;
2321
2322 len = SvLEN (data_sv);
2323 SvGROW (data_sv, len + 7); // reserve at least 7+ bytes more
2324 data = SvPVbyte_nolen (data_sv);
2325 end = data + len + 7;
2326
2327 if (len < 5)
2328 XSRETURN_EMPTY;
2311 2329
2312 if (*data++ != 0) 2330 if (*data++ != 0)
2313 XSRETURN_EMPTY; /* version mismatch */ 2331 XSRETURN_EMPTY; /* version mismatch */
2314 2332
2315 w = *data++ << 8; w |= *data++; 2333 w = *data++ << 8; w |= *data++;
2330 { 2348 {
2331 maprow *row = map_get_row (self, y); 2349 maprow *row = map_get_row (self, y);
2332 2350
2333 for (x = x0; x < x1; x++) 2351 for (x = x0; x < x1; x++)
2334 { 2352 {
2353 uint8_t flags;
2354
2355 if (data + 7 >= end)
2356 XSRETURN_EMPTY;
2357
2335 uint8_t flags = *data++; 2358 flags = *data++;
2336 2359
2337 if (flags) 2360 if (flags)
2338 { 2361 {
2339 mapcell *cell = row_get_cell (row, x); 2362 mapcell *cell = row_get_cell (row, x);
2340 tileid tile[3] = { 0, 0, 0 }; 2363 tileid tile[3] = { 0, 0, 0 };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines