From patchwork Fri Feb 16 16:38:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13560315 Received: from mail-oa1-f46.google.com (mail-oa1-f46.google.com [209.85.160.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9098F7C0B4 for ; Fri, 16 Feb 2024 16:38:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708101534; cv=none; b=VgQPyYXDEyTAEoij86BbgX+0VIGl8iTMu86YqEMQD1czmZFcfLeRlkrak874iO6PwXb8VLa6hJw/V+7kJNXNGxfLmP3j7jiGElWIfyN5keIlIG1YRGOR9x9e61tLPfnf2IQtm6ieUheC34fWLor/unLteVFNoKXg6xOgF6GLNsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708101534; c=relaxed/simple; bh=PvE6lv0+vNPfsxKglutqc8wZRUhomVV6XdV9KAlGyTo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BeKj1rVlU2o/mgvYc5cMV0be3x9muwqhLpQ8Azf10j4SVEdrMujYXLv2slNeEFkGrTm3CCG2L19qHs5TGfgKjsv0SoN4XfS8qCSPzIF2EBqfF6EeBn5Oyg4WWnISFNzxElGWDWB0a3/rq9ZPRhfS//r/214+Vm3+/5LLDrh6rMY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UbFCXc/d; arc=none smtp.client-ip=209.85.160.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UbFCXc/d" Received: by mail-oa1-f46.google.com with SMTP id 586e51a60fabf-21e7c3e3cf3so228009fac.0 for ; Fri, 16 Feb 2024 08:38:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708101531; x=1708706331; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=uVRzuFMrS5aFRqY8aQ8tsZmCkOdILJNQj55SzEui1no=; b=UbFCXc/dpFcU07wk875TOoh4wxKya7TA/r/Pwfsw2xzJuPLYQyLFte4L84fvXz7qbt Y54KfnBTMEsCxU8xWHMbJNYIMmLCj2fdMWRxdqgOLKpDORBPWRC6HyoqMyE1SqRxDgpH PIrjn50A2pJzMLktaD9QsLIAaCVZjaQLTgzalQHvU7N6SyB12UAllNVO4jD3setLDS8M xxBbM6c1b5v1Hx4+42MlzzwxLOi/1CkDNv/yMpb32y6MmyQI2TlM8SJai2FNg3pR+TpJ HZitpvIw4D1s9o31z6pELMisPWuGuL6MeWggwWQtFAE/pq78zkLZY5uIQdCNcdiBt4Fe 7xPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708101531; x=1708706331; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uVRzuFMrS5aFRqY8aQ8tsZmCkOdILJNQj55SzEui1no=; b=CyBPKeALqg1eMoEvf5Oi4pT5gEOE04uKIEXW356n2WV9UbRtPS8N7C3Ied5gbL1gZI grV14vHH3xOB8s/C0IsJmIXErdQZcHbSur+wk3OBotod8XgAFA9eXDR8SL1Ty7Fh/JlT S625bYiUzxXkrCL9XDmV/lz3ztRctnFIQrAOAbPk5BMrMO5Zry+PfDDdU3ipijqOvUda TXEyKmoAR9R+oLArnuItUdclEZmb2Dp8+SV4/redQsKzs0Rv+Ci1Yp0fzkNVi6H+pEax LuMteskqjYWL1ZxiGx1Z85Magq4oPZkEpX7Mo/AzxzNFKR7ztpQ+2+MVFd8OtdpVGM6V Ij7g== X-Gm-Message-State: AOJu0YyBWqniVaTPKajKyhU2kxMfwqsyN7npMWIVq/PHeAYt7ccwZsH2 zCXiM1XI75KX2zVvvHNbFJeMzeiJe+cAO40cYIb5XiHIsxSo4NF8iETUXHYC X-Google-Smtp-Source: AGHT+IFgvwu3KD73PdUqwcP2bV4pL1O7M3HcpkNy2O+azaclkjOjQgDF/VUK6Iuv9pmO7fj6uP2aSg== X-Received: by 2002:a05:6871:510:b0:21e:3cf8:38ae with SMTP id s16-20020a056871051000b0021e3cf838aemr5154623oal.38.1708101531436; Fri, 16 Feb 2024 08:38:51 -0800 (PST) Received: from localhost.localdomain (070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id h7-20020a9d5547000000b006e2e971f525sm43165oti.45.2024.02.16.08.38.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Feb 2024 08:38:51 -0800 (PST) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH 1/2] smsutil: Remove g_string_* use Date: Fri, 16 Feb 2024 10:38:01 -0600 Message-ID: <20240216163804.1206023-1-denkenz@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Replace with l_string instead --- src/smsutil.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/smsutil.c b/src/smsutil.c index d4f28c01bd79..05942d6fe56b 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -2223,7 +2223,7 @@ static inline int sms_text_capacity_gsm(int max, int offset) char *sms_decode_text(GSList *sms_list) { GSList *l; - GString *str; + struct l_string *str; const struct sms *sms; int guess_size = g_slist_length(sms_list); char *utf8; @@ -2235,7 +2235,7 @@ char *sms_decode_text(GSList *sms_list) else guess_size = (guess_size - 1) * 160; - str = g_string_sized_new(guess_size); + str = l_string_new(guess_size); for (l = sms_list; l; l = l->next) { guint8 taken = 0; @@ -2301,7 +2301,7 @@ char *sms_decode_text(GSList *sms_list) locking_shift, single_shift); if (converted) { - g_string_append(str, converted); + l_string_append(str, converted); l_free(converted); } } else { @@ -2344,14 +2344,14 @@ char *sms_decode_text(GSList *sms_list) converted = l_utf8_from_utf16(utf16, utf16_size); if (converted) { - g_string_append(str, converted); + l_string_append(str, converted); l_free(converted); } l_free(utf16); } - utf8 = g_string_free(str, FALSE); + utf8 = l_string_unwrap(str); return utf8; } From patchwork Fri Feb 16 16:38:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 13560316 Received: from mail-oa1-f50.google.com (mail-oa1-f50.google.com [209.85.160.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5359512F39F for ; Fri, 16 Feb 2024 16:38:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708101535; cv=none; b=heVIWZqxqFj0UWcGadYWNL9Dmt38T+AZxrteyU8lin0zjNsMtLB9uvkfjmmfXvUyjV4kHrDMt9uwXBvQMR8xkneorewA3zbFSyVfjWchFHXzyV6PZYdP14F4hcIyG/sGoE65qTwrlsuBkgA7kYXur3JPNU1gCRqZFbtEYk1iAVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708101535; c=relaxed/simple; bh=ORD8i5b/eRu4mch9vIw8on1OAPNLhXvLuJ4PkpZrvgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ni/ZDISnuJww0I7FMrwS9VNalD69eNFKjsrUKSfFdr16hIJad6IYrvNHP79ASqopogBaFrVtUfv0FM9NQlZ5ycTLkLNE7Hs/C3KRtybIGMcfIldbDn+ULoGqdePIeJtAOhHdGSZ8ZRaXSCyiR3PmoAienieMN9v7CYywlIxMPEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iP6yrRab; arc=none smtp.client-ip=209.85.160.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iP6yrRab" Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-21e11a89e76so959892fac.1 for ; Fri, 16 Feb 2024 08:38:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708101532; x=1708706332; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KUE6uR/UV4vPj+nQqqrvGjqhAoYA0x0aZ9GFm9QY6lQ=; b=iP6yrRab8KdIuQ2HnHp6qnsrqmnDO3OPjoy8z52UDobjboW9X5iR2+ZADgenh+Iijz 2shLutkC6WTQR3A4rg09FaVwzWYQwQFohJFVeuSM66S+F3pLJHQmUeMotW92Oj4y4zun FZu/JD1HVyoMafrrGCSbQQpHgm6F8RG76IYZnr7pJT/eDAWV8AJhZHunZpUZmNc6QLxM TfknIAndoY3KFFokhbXYEO+PPkxNYl/wZLvDDw7MdIu8P55Fr0kFyfwfrVOofK1r8Gpq 4lQHYgoAl7DMHJkCxpfx85AAeoJEi+FYA8LB1STTbCVnUaEtXEsnpBrPDmApIXdMk1uS S6zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708101532; x=1708706332; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KUE6uR/UV4vPj+nQqqrvGjqhAoYA0x0aZ9GFm9QY6lQ=; b=dJNTf5LckKhyqc/IN+nt0dcqeTA9lCuQgxfb7QNaRV8tb6L0SVBvWNvMAENPaWnBAm fJjIk+hpAT72P3iMf6ctlMe8VJM2yzQPhQ5LH/Drz7aTwrZMMevdiv5LL+rHFDMvhBq6 UqRPpL1YQ4OqGKNUL3f5/P5B+cgpaJ2JXCndma3cNyy6rf22GF2saZycqswhqJSkZvKQ ljbS6je9Fd8sjYz77G2tErLe7lUL8BVEYDaRUOS9YFbrMHogXL8+DOdbek3sU0gE7KAc fVCBp+HcwDDZOeq1AIoU/3Xymsqj0GtR4g72rcCj7iW4yAkzsZQTvxR+MD1hZ0gPHSvp npdw== X-Gm-Message-State: AOJu0YzAPkuM0xH5SywXrEJj8S8id/sdQVZQphgXk8JYyIsxNuqkIoQE +0AResiCVago8ZUDgc7a/D7YjyzAnYeM3npsGeKTqftvvPtelkp7TDG/wkXH X-Google-Smtp-Source: AGHT+IHMinaOztIljoqihn4683ka+QfxWxXpsBZGW3V0O14I90ZqCQDcYNDzE/Edysh7v9zvWZqSLg== X-Received: by 2002:a05:6870:3326:b0:219:1dc6:fdff with SMTP id x38-20020a056870332600b002191dc6fdffmr5727580oae.55.1708101532185; Fri, 16 Feb 2024 08:38:52 -0800 (PST) Received: from localhost.localdomain (070-114-247-242.res.spectrum.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id h7-20020a9d5547000000b006e2e971f525sm43165oti.45.2024.02.16.08.38.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Feb 2024 08:38:51 -0800 (PST) From: Denis Kenzior To: ofono@lists.linux.dev Cc: Denis Kenzior Subject: [PATCH 2/2] phonebook: Remove g_string_* use Date: Fri, 16 Feb 2024 10:38:02 -0600 Message-ID: <20240216163804.1206023-2-denkenz@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240216163804.1206023-1-denkenz@gmail.com> References: <20240216163804.1206023-1-denkenz@gmail.com> Precedence: bulk X-Mailing-List: ofono@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Replace all uses of g_string_* APIs with ell's equivalents. While here, fix a long-standing bug where dbus_message_iter_append_basic inside generate_export_entries_reply was called with the g_string object instead of the address of the string itself. This somehow worked, maybe due to the layout of GString structure, but could lead to crashes or invalid behavior if the underlying GString implementation changed. --- src/phonebook.c | 92 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/phonebook.c b/src/phonebook.c index 8c7e5f100bd3..122ba83c066e 100644 --- a/src/phonebook.c +++ b/src/phonebook.c @@ -53,7 +53,8 @@ struct ofono_phonebook { DBusMessage *pending; int storage_index; /* go through all supported storage */ int flags; - GString *vcards; /* entries with vcard 3.0 format */ + struct l_string *vcards_builder; /* entries with vcard 3.0 format */ + char *cached_vcards; GSList *merge_list; /* cache the entries that may need a merge */ const struct ofono_phonebook_driver *driver; void *driver_data; @@ -79,27 +80,29 @@ static const char *storage_support[] = { "SM", "ME", NULL }; static void export_phonebook(struct ofono_phonebook *pb); /* according to RFC 2425, the output string may need folding */ -static void vcard_printf(GString *str, const char *fmt, ...) +static void vcard_printf(struct l_string *str, const char *fmt, ...) { char buf[1024]; va_list ap; int len_temp, line_number, i; unsigned int line_delimit = 75; + size_t buflen; va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); + buflen = strlen(buf); line_number = strlen(buf) / line_delimit + 1; for (i = 0; i < line_number; i++) { - len_temp = MIN(line_delimit, strlen(buf) - line_delimit * i); - g_string_append_len(str, buf + line_delimit * i, len_temp); + len_temp = MIN(line_delimit, buflen - line_delimit * i); + l_string_append_fixed(str, buf + line_delimit * i, len_temp); if (i != line_number - 1) - g_string_append(str, "\r\n "); + l_string_append(str, "\r\n "); } - g_string_append(str, "\r\n"); + l_string_append(str, "\r\n"); } /* @@ -134,20 +137,21 @@ static void add_slash(char *dest, const char *src, int len_max, int len) return; } -static void vcard_printf_begin(GString *vcards) +static void vcard_printf_begin(struct l_string *vcards) { vcard_printf(vcards, "BEGIN:VCARD"); vcard_printf(vcards, "VERSION:3.0"); } -static void vcard_printf_text(GString *vcards, const char *text) +static void vcard_printf_text(struct l_string *vcards, const char *text) { char field[LEN_MAX]; add_slash(field, text, LEN_MAX, strlen(text)); vcard_printf(vcards, "FN:%s", field); } -static void vcard_printf_number(GString *vcards, const char *number, int type, +static void vcard_printf_number(struct l_string *vcards, + const char *number, int type, enum phonebook_number_type category) { char *pref = "", *intl = "", *category_string = ""; @@ -182,7 +186,7 @@ static void vcard_printf_number(GString *vcards, const char *number, int type, vcard_printf(vcards, buf, number); } -static void vcard_printf_group(GString *vcards, const char *group) +static void vcard_printf_group(struct l_string *vcards, const char *group) { int len = 0; @@ -196,7 +200,7 @@ static void vcard_printf_group(GString *vcards, const char *group) } } -static void vcard_printf_email(GString *vcards, const char *email) +static void vcard_printf_email(struct l_string *vcards, const char *email) { int len = 0; @@ -211,7 +215,7 @@ static void vcard_printf_email(GString *vcards, const char *email) } } -static void vcard_printf_sip_uri(GString *vcards, const char *sip_uri) +static void vcard_printf_sip_uri(struct l_string *vcards, const char *sip_uri) { int len = 0; @@ -225,7 +229,7 @@ static void vcard_printf_sip_uri(GString *vcards, const char *sip_uri) } } -static void vcard_printf_end(GString *vcards) +static void vcard_printf_end(struct l_string *vcards) { vcard_printf(vcards, "END:VCARD"); vcard_printf(vcards, ""); @@ -234,7 +238,7 @@ static void vcard_printf_end(GString *vcards) static void print_number(gpointer pointer, gpointer user_data) { struct phonebook_number *pn = pointer; - GString *vcards = user_data; + struct l_string *vcards = user_data; vcard_printf_number(vcards, pn->number, pn->type, pn->category); } @@ -248,7 +252,7 @@ static void destroy_number(gpointer pointer) static void print_merged_entry(gpointer pointer, gpointer user_data) { struct phonebook_person *person = pointer; - GString *vcards = user_data; + struct l_string *vcards = user_data; vcard_printf_begin(vcards); vcard_printf_text(vcards, person->text); @@ -284,7 +288,8 @@ static DBusMessage *generate_export_entries_reply(struct ofono_phonebook *pb, return NULL; dbus_message_iter_init_append(reply, &iter); - dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, pb->vcards); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, + &pb->cached_vcards); return reply; } @@ -396,20 +401,21 @@ void ofono_phonebook_entry(struct ofono_phonebook *phonebook, int index, return; } - vcard_printf_begin(phonebook->vcards); + vcard_printf_begin(phonebook->vcards_builder); if (text == NULL || text[0] == '\0') - vcard_printf_text(phonebook->vcards, number); + vcard_printf_text(phonebook->vcards_builder, number); else - vcard_printf_text(phonebook->vcards, text); + vcard_printf_text(phonebook->vcards_builder, text); - vcard_printf_number(phonebook->vcards, number, type, TEL_TYPE_OTHER); - vcard_printf_number(phonebook->vcards, adnumber, adtype, + vcard_printf_number(phonebook->vcards_builder, number, type, TEL_TYPE_OTHER); - vcard_printf_group(phonebook->vcards, group); - vcard_printf_email(phonebook->vcards, email); - vcard_printf_sip_uri(phonebook->vcards, sip_uri); - vcard_printf_end(phonebook->vcards); + vcard_printf_number(phonebook->vcards_builder, adnumber, adtype, + TEL_TYPE_OTHER); + vcard_printf_group(phonebook->vcards_builder, group); + vcard_printf_email(phonebook->vcards_builder, email); + vcard_printf_sip_uri(phonebook->vcards_builder, sip_uri); + vcard_printf_end(phonebook->vcards_builder); } static void export_phonebook_cb(const struct ofono_error *error, void *data) @@ -423,13 +429,12 @@ static void export_phonebook_cb(const struct ofono_error *error, void *data) /* convert the collected entries that are already merged to vcard */ phonebook->merge_list = g_slist_reverse(phonebook->merge_list); g_slist_foreach(phonebook->merge_list, print_merged_entry, - phonebook->vcards); + phonebook->vcards_builder); g_slist_free_full(phonebook->merge_list, destroy_merged_entry); phonebook->merge_list = NULL; phonebook->storage_index++; export_phonebook(phonebook); - return; } static void export_phonebook(struct ofono_phonebook *phonebook) @@ -443,6 +448,10 @@ static void export_phonebook(struct ofono_phonebook *phonebook) return; } + phonebook->cached_vcards = l_string_unwrap(phonebook->vcards_builder); + phonebook->vcards_builder = NULL; + phonebook->flags |= PHONEBOOK_FLAG_CACHED; + reply = generate_export_entries_reply(phonebook, phonebook->pending); if (reply == NULL) { dbus_message_unref(phonebook->pending); @@ -450,31 +459,23 @@ static void export_phonebook(struct ofono_phonebook *phonebook) } __ofono_dbus_pending_reply(&phonebook->pending, reply); - phonebook->flags |= PHONEBOOK_FLAG_CACHED; } static DBusMessage *import_entries(DBusConnection *conn, DBusMessage *msg, void *data) { struct ofono_phonebook *phonebook = data; - DBusMessage *reply; - - if (phonebook->pending) { - reply = __ofono_error_busy(phonebook->pending); - g_dbus_send_message(conn, reply); - return NULL; - } - if (phonebook->flags & PHONEBOOK_FLAG_CACHED) { - reply = generate_export_entries_reply(phonebook, msg); - g_dbus_send_message(conn, reply); - return NULL; - } + if (phonebook->pending) + return __ofono_error_busy(phonebook->pending); - g_string_set_size(phonebook->vcards, 0); - phonebook->storage_index = 0; + if (phonebook->flags & PHONEBOOK_FLAG_CACHED) + return generate_export_entries_reply(phonebook, msg); phonebook->pending = dbus_message_ref(msg); + + phonebook->vcards_builder = l_string_new(0); + phonebook->storage_index = 0; export_phonebook(phonebook); return NULL; @@ -514,13 +515,12 @@ static void phonebook_remove(struct ofono_atom *atom) if (pb->driver && pb->driver->remove) pb->driver->remove(pb); - g_string_free(pb->vcards, TRUE); + l_string_free(pb->vcards_builder); + l_free(pb->cached_vcards); g_free(pb); } -OFONO_DEFINE_ATOM_CREATE(phonebook, OFONO_ATOM_TYPE_PHONEBOOK, { - atom->vcards = g_string_new(NULL); -}) +OFONO_DEFINE_ATOM_CREATE(phonebook, OFONO_ATOM_TYPE_PHONEBOOK) void ofono_phonebook_register(struct ofono_phonebook *pb) {