Example #1
0
static int Lzip_write_string(lua_State *L) {
    size_t size_to_reserve_at_beginning = (size_t)luaL_optinteger(L, 1, 0);
    size_t initial_allocation_size = (size_t)luaL_optinteger(L, 2, LUAL_BUFFERSIZE);
    mz_zip_archive* za = (mz_zip_archive*)lua_newuserdata(L, sizeof(mz_zip_archive));
    mz_zip_zero_struct(za);
    if (!mz_zip_writer_init_heap(za,
                size_to_reserve_at_beginning, initial_allocation_size))
        return lmz_zip_pusherror(L, za, NULL);
    luaL_setmetatable(L, LMZ_ZIP_WRITER);
    return 1;
}
Example #2
0
static int lmz_writer_init(lua_State *L) {
  size_t size_to_reserve_at_beginning = luaL_optint(L, 1, 0);
  size_t initial_allocation_size = luaL_optint(L, 2, 128 * 1024);
  lmz_file_t* zip = lua_newuserdata(L, sizeof(*zip));
  mz_zip_archive* archive = &(zip->archive);
  luaL_getmetatable(L, "miniz_writer");
  lua_setmetatable(L, -2);
  memset(archive, 0, sizeof(*archive));
  zip->loop = uv_default_loop();
  if (!mz_zip_writer_init_heap(archive, size_to_reserve_at_beginning, initial_allocation_size)) {
    return luaL_error(L, "Problem initializing heap writer");
  }
  return 1;
}
Example #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;
    }