示例#1
0
文件: pngtest.c 项目: Codyle/pcsx2
static void
pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
	png_uint_32 check;
	png_byte *near_data;  /* Needs to be "png_byte *" instead of "png_bytep" */
	png_FILE_p io_ptr;
	/* Check if data really is near. If so, use usual code. */
	near_data = (png_byte *)CVT_PTR_NOCHECK(data);
	io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
	if ((png_bytep)near_data == data)
		WRITEFILE(io_ptr, near_data, length, check);
	else {
		png_byte buf[NEAR_BUF_SIZE];
		png_size_t written, remaining, err;
		check = 0;
		remaining = length;
		do {
			written = MIN(NEAR_BUF_SIZE, remaining);
			png_memcpy(buf, data, written); /* Copy far buffer to near buffer */
			WRITEFILE(io_ptr, buf, written, err);
			if (err != written)
				break;
			else
				check += err;
			data += written;
			remaining -= written;
		} while (remaining != 0);
	}
	if (check != length)
		png_error(png_ptr, "Write Error");
}
示例#2
0
文件: pngtest.c 项目: Codyle/pcsx2
static void
pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
	int check;
	png_byte *n_data;
	png_FILE_p io_ptr;
	/* Check if data really is near. If so, use usual code. */
	n_data = (png_byte *)CVT_PTR_NOCHECK(data);
	io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
	if ((png_bytep)n_data == data)
		READFILE(io_ptr, n_data, length, check);
	else {
		png_byte buf[NEAR_BUF_SIZE];
		png_size_t read, remaining, err;
		check = 0;
		remaining = length;
		do {
			read = MIN(NEAR_BUF_SIZE, remaining);
			READFILE(io_ptr, buf, 1, err);
			png_memcpy(data, buf, read); /* Copy far buffer to near buffer */
			if (err != read)
				break;
			else
				check += err;
			data += read;
			remaining -= read;
		} while (remaining != 0);
	}
	if (check != length)
		png_error(png_ptr, "read Error");
}
示例#3
0
文件: pngwio.c 项目: cafeinecake/hge2
void PNGAPI
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
  png_uint_32 check;
  png_byte *near_data;  /* Needs to be "png_byte *" instead of "png_bytep" */
  png_FILE_p io_ptr;

  /* Check if data really is near. If so, use usual code. */
  near_data = (png_byte *)CVT_PTR_NOCHECK(data);
  io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);

  if ((png_bytep)near_data == data) {
#if defined(_WIN32_WCE)

    if (!WriteFile(io_ptr, near_data, length, &check, NULL)) {
      check = 0;
    }

#else
    check = fwrite(near_data, 1, length, io_ptr);
#endif
  } else {
    png_byte buf[NEAR_BUF_SIZE];
    png_size_t written, remaining, err;
    check = 0;
    remaining = length;

    do {
      written = MIN(NEAR_BUF_SIZE, remaining);
      png_memcpy(buf, data, written); /* copy far buffer to near buffer */
#if defined(_WIN32_WCE)

      if (!WriteFile(io_ptr, buf, written, &err, NULL)) {
        err = 0;
      }

#else
      err = fwrite(buf, 1, written, io_ptr);
#endif

      if (err != written) {
        break;
      } else {
        check += err;
      }

      data += written;
      remaining -= written;
    } while (remaining != 0);
  }

  if (check != length) {
    png_error(png_ptr, "Write Error");
  }
}
示例#4
0
static void PNGAPI
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
   int check;
   png_byte *n_data;
   png_FILE_p io_ptr;

   if (png_ptr == NULL)
      return;
   /* Check if data really is near. If so, use usual code. */
   n_data = (png_byte *)CVT_PTR_NOCHECK(data);
   io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
   if ((png_bytep)n_data == data)
   {
#ifdef _WIN32_WCE
      if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check,
          NULL) )
         check = 0;
#else
      check = fread(n_data, 1, length, io_ptr);
#endif
   }
   else
   {
      png_byte buf[NEAR_BUF_SIZE];
      png_size_t read, remaining, err;
      check = 0;
      remaining = length;
      do
      {
         read = MIN(NEAR_BUF_SIZE, remaining);
#ifdef _WIN32_WCE
         if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) )
            err = 0;
#else
         err = fread(buf, (png_size_t)1, read, io_ptr);
#endif
         png_memcpy(data, buf, read); /* copy far buffer to near buffer */
         if (err != read)
            break;
         else
            check += err;
         data += read;
         remaining -= read;
      }
      while (remaining != 0);
   }
   if ((png_uint_32)check != (png_uint_32)length)
      png_error(png_ptr, "read Error");
}
示例#5
0
static void PNGCBAPI
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
    png_size_t check;
    png_byte *n_data;
    png_FILE_p io_ptr;

    if (png_ptr == NULL)
        return;

    /* Check if data really is near. If so, use usual code. */
    n_data = (png_byte *)CVT_PTR_NOCHECK(data);
    io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);

    if ((png_bytep)n_data == data)
    {
        check = fread(n_data, 1, length, io_ptr);
    }

    else
    {
        png_byte buf[NEAR_BUF_SIZE];
        png_size_t read, remaining, err;
        check = 0;
        remaining = length;

        do
        {
            read = MIN(NEAR_BUF_SIZE, remaining);
            err = fread(buf, 1, read, io_ptr);
            png_memcpy(data, buf, read); /* copy FAR buffer to near buffer */

            if (err != read)
                break;

            else
                check += err;

            data += read;
            remaining -= read;
        }
        while (remaining != 0);
    }

    if ((png_uint_32)check != (png_uint_32)length)
        png_error(png_ptr, "read Error");
}
示例#6
0
文件: pngwio.c 项目: AMDmi3/analog
static void
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
   png_uint_32 check;
   png_byte *near_data;
   FILE *io_ptr;

   near_data = (png_byte *)CVT_PTR_NOCHECK(data);
   io_ptr = (FILE *)CVT_PTR(png_ptr->io_ptr);
   if ((png_bytep)near_data == data)
   {
      check = fwrite(near_data, 1, length, io_ptr);
   }
   else
   {
      png_byte buf[NEAR_BUF_SIZE];
      png_size_t written, remaining, err;
      check = 0;
      remaining = length;
      do
      {
         written = MIN(NEAR_BUF_SIZE, remaining);
         png_memcpy(buf, data, written);
         err = fwrite(buf, 1, written, io_ptr);
         if (err != written)
            break;
         else
            check += err;
         data += written;
         remaining -= written;
      }
      while (remaining != 0);
   }
   if (check != length)
   {
      png_error(png_ptr, "Write Error");
   }
}