91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina/*
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Authors:
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Pavel Březina <pbrezina@redhat.com>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina Copyright (C) 2014 Red Hat
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is free software; you can redistribute it and/or modify
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina it under the terms of the GNU General Public License as published by
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina the Free Software Foundation; either version 3 of the License, or
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina (at your option) any later version.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina This program is distributed in the hope that it will be useful,
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina GNU General Public License for more details.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina You should have received a copy of the GNU General Public License
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina*/
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <dbus/dbus.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include <string.h>
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina#include "lib/sifp/sss_sifp_private.h"
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinavoid *sss_sifp_alloc_zero(sss_sifp_ctx *ctx, size_t size, size_t num)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina void *addr = ctx->alloc_fn(size * num, ctx->alloc_pvt);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (addr == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina memset(addr, '\0', size * num);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return addr;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinavoid sss_sifp_set_io_error(sss_sifp_ctx *ctx, DBusError *error)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_error_free(ctx->io_error);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina dbus_error_init(ctx->io_error);
8618716d6ed4eadca2743eb2dfbbb8d11c4fb22fLukas Slebodnik dbus_set_error(ctx->io_error, error->name, "%s", error->message);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinachar * sss_sifp_strdup(sss_sifp_ctx *ctx, const char *str)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char *result = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina size_t str_len;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (str == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina str_len = strlen(str);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina result = _alloc_zero(ctx, char, str_len + 1);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (result == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
fcf6a9f34c475b9bbae54311703e87acd5fb8d1aLukas Slebodnik memcpy(result, str, str_len);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return result;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březinachar * sss_sifp_strcat(sss_sifp_ctx *ctx, const char *str1, const char *str2)
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina{
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina char *result = NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (str1 == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return sss_sifp_strdup(ctx, str2);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (str2 == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return sss_sifp_strdup(ctx, str1);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina size_t len = strlen(str1) + strlen(str2) + 1;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina result = _alloc_zero(ctx, char, len);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina if (result == NULL) {
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return NULL;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina }
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina strcat(result, str1);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina strcat(result, str2);
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina return result;
91cf6f4c6069d6aff01aab171825e83a1a669e2fPavel Březina}