diff --git a/libziparchive/zip_writer.cc b/libziparchive/zip_writer.cc index 981df3add..0df0fa538 100644 --- a/libziparchive/zip_writer.cc +++ b/libziparchive/zip_writer.cc @@ -30,9 +30,13 @@ #include "entry_name_utils-inl.h" #include "zip_archive_common.h" -#if !defined(powerof2) -#define powerof2(x) ((((x)-1) & (x)) == 0) -#endif +#undef powerof2 +#define powerof2(x) \ + ({ \ + __typeof__(x) _x = (x); \ + __typeof__(x) _x2; \ + __builtin_add_overflow(_x, -1, &_x2) ? 1 : ((_x2 & _x) == 0); \ + }) /* Zip compression methods we support */ enum {