diff --git a/Makefile-libglnx.am b/Makefile-libglnx.am index 712e931c..2e8da015 100644 --- a/Makefile-libglnx.am +++ b/Makefile-libglnx.am @@ -18,6 +18,7 @@ EXTRA_DIST += $(libglnx_srcpath)/README.md $(libglnx_srcpath)/COPYING libglnx_la_SOURCES = \ + $(libglnx_srcpath)/glnx-alloca.h \ $(libglnx_srcpath)/glnx-backport-autocleanups.h \ $(libglnx_srcpath)/glnx-backport-autoptr.h \ $(libglnx_srcpath)/glnx-backports.h \ diff --git a/glnx-alloca.h b/glnx-alloca.h new file mode 100644 index 00000000..b0bf6a65 --- /dev/null +++ b/glnx-alloca.h @@ -0,0 +1,47 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2014,2015 Colin Walters . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#pragma once + +#include +#include + +G_BEGIN_DECLS + +/* Taken from https://github.com/systemd/systemd/src/basic/string-util.h + * at revision v228-666-gcf6c8c4 + */ +#define glnx_strjoina(a, ...) \ + ({ \ + const char *_appendees_[] = { a, __VA_ARGS__ }; \ + char *_d_, *_p_; \ + int _len_ = 0; \ + unsigned _i_; \ + for (_i_ = 0; _i_ < G_N_ELEMENTS(_appendees_) && _appendees_[_i_]; _i_++) \ + _len_ += strlen(_appendees_[_i_]); \ + _p_ = _d_ = alloca(_len_ + 1); \ + for (_i_ = 0; _i_ < G_N_ELEMENTS(_appendees_) && _appendees_[_i_]; _i_++) \ + _p_ = stpcpy(_p_, _appendees_[_i_]); \ + *_p_ = 0; \ + _d_; \ + }) + + +G_END_DECLS diff --git a/libglnx.h b/libglnx.h index 9bd41c45..451740d2 100644 --- a/libglnx.h +++ b/libglnx.h @@ -24,6 +24,7 @@ G_BEGIN_DECLS +#include #include #include #include