Esempio n. 1
0
static int lmz_writer_finalize(lua_State *L) {
  lmz_file_t* zip = luaL_checkudata(L, 1, "miniz_writer");
  void* data;
  size_t size;
  if (!mz_zip_writer_finalize_heap_archive(&(zip->archive), &data, &size)) {
    luaL_error(L, "Problem finalizing archive");
  }
  lua_pushlstring(L, data, size);
  return 1;
}
Esempio n. 2
0
static int Lwriter_finalize(lua_State *L) {
    mz_zip_archive *za = (mz_zip_archive*)luaL_checkudata(L, 1, LMZ_ZIP_WRITER);
    if (mz_zip_get_type(za) == MZ_ZIP_TYPE_HEAP) {
        size_t len = 0;
        void* s = NULL;
        mz_bool result = mz_zip_writer_finalize_heap_archive(za, &s, &len);
        lua_pushlstring(L, s, len);
        free(s);
        return result ? 1 : lmz_zip_pusherror(L, za, NULL);
    } else if (!mz_zip_writer_finalize_archive(za))
        return lmz_zip_pusherror(L, za, NULL);
    return_self(L);
}
Esempio n. 3
0
    std::string pak::bin() //const
    {
        std::string result;

        if( type == paktype::ZIP )
        {
            mz_zip_archive zip_archive;
            memset( &zip_archive, 0, sizeof(zip_archive) );

            mz_bool status = mz_zip_writer_init_heap( &zip_archive, 0, 128 * 1024 );
            assert( status );
            if( !status )
                return "mz_zip_writer_init_heap() failed!", std::string();

            for( iterator it = this->begin(); it != this->end(); ++it )
            {
                const char *filename = it->operator[]("filename").c_str();
                const char *content = it->operator[]("content").c_str();
                const size_t bufsize = it->operator[]("content").size();

                status = mz_zip_writer_add_mem( &zip_archive, filename, content, bufsize, MZ_DEFAULT_COMPRESSION );
                if( !status )
                    return "mz_zip_writer_add_mem() failed!", std::string();
            }

            void *pBuf;
            size_t pSize;

            status = mz_zip_writer_finalize_heap_archive( &zip_archive, &pBuf, &pSize);
            if( !status )
                return "mz_zip_writer_finalize_heap_archive() failed!", std::string();

            // Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used.
            // Note for the archive to be valid, it must have been finalized before ending.
            status = mz_zip_writer_end( &zip_archive );
            assert( status );
            if( !status )
                return "mz_zip_writer_end() failed!", std::string();

            result.resize( pSize );
            memcpy( &result.at(0), pBuf, pSize );

            free( pBuf );
        }
        else
        {}

        return result;
    }