xref: /freebsd/contrib/pkgconf/cli/spdxtool/simplelicensing.c (revision 592efe252472a3385acf36b1f49ecf710a7f3d9c)
1*592efe25SPierre Pronchery /*
2*592efe25SPierre Pronchery  * SPDX-License-Identifier: BSD-2-Clause
3*592efe25SPierre Pronchery  *
4*592efe25SPierre Pronchery  *​ Copyright (c) 2025 The FreeBSD Foundation
5*592efe25SPierre Pronchery  *​
6*592efe25SPierre Pronchery  *​ Portions of this software were developed by
7*592efe25SPierre Pronchery  * Tuukka Pasanen <tuukka.pasanen@ilmi.fi> under sponsorship from
8*592efe25SPierre Pronchery  * the FreeBSD Foundation
9*592efe25SPierre Pronchery  */
10*592efe25SPierre Pronchery 
11*592efe25SPierre Pronchery #include <stdlib.h>
12*592efe25SPierre Pronchery #include <string.h>
13*592efe25SPierre Pronchery #include "util.h"
14*592efe25SPierre Pronchery #include "serialize.h"
15*592efe25SPierre Pronchery #include "software.h"
16*592efe25SPierre Pronchery #include "core.h"
17*592efe25SPierre Pronchery #include "simplelicensing.h"
18*592efe25SPierre Pronchery 
19*592efe25SPierre Pronchery /*
20*592efe25SPierre Pronchery  * !doc
21*592efe25SPierre Pronchery  *
22*592efe25SPierre Pronchery  * .. c:function:: spdxtool_simplelicensing_license_expression_t *spdxtool_simplelicensing_licenseExpression_new(pkgconf_client_t *client, char *license)
23*592efe25SPierre Pronchery  *
24*592efe25SPierre Pronchery  *    Create new /SimpleLicensing/SimpleLicensingText struct
25*592efe25SPierre Pronchery  *
26*592efe25SPierre Pronchery  *    :param pkgconf_client_t *client: The pkgconf client being accessed.
27*592efe25SPierre Pronchery  *    :param char *license: SPDX name of license
28*592efe25SPierre Pronchery  *    :return: NULL if some problem occurs and SimpleLicensingText struct if not
29*592efe25SPierre Pronchery  */
30*592efe25SPierre Pronchery spdxtool_simplelicensing_license_expression_t *
spdxtool_simplelicensing_licenseExpression_new(pkgconf_client_t * client,const char * license)31*592efe25SPierre Pronchery spdxtool_simplelicensing_licenseExpression_new(pkgconf_client_t *client, const char *license)
32*592efe25SPierre Pronchery {
33*592efe25SPierre Pronchery 	if (!client || !license)
34*592efe25SPierre Pronchery 		return NULL;
35*592efe25SPierre Pronchery 
36*592efe25SPierre Pronchery 	spdxtool_simplelicensing_license_expression_t *expression = calloc(1, sizeof(spdxtool_simplelicensing_license_expression_t));
37*592efe25SPierre Pronchery 	if (!expression)
38*592efe25SPierre Pronchery 		goto err;
39*592efe25SPierre Pronchery 
40*592efe25SPierre Pronchery 	expression->type = "simplelicensing_LicenseExpression";
41*592efe25SPierre Pronchery 	expression->license_expression = strdup(license);
42*592efe25SPierre Pronchery 	expression->spdx_id = spdxtool_util_get_spdx_id_string(client, expression->type, license);
43*592efe25SPierre Pronchery 
44*592efe25SPierre Pronchery 	if (!expression->license_expression || !expression->spdx_id)
45*592efe25SPierre Pronchery 		goto err;
46*592efe25SPierre Pronchery 
47*592efe25SPierre Pronchery 	return expression;
48*592efe25SPierre Pronchery 
49*592efe25SPierre Pronchery err:
50*592efe25SPierre Pronchery 	pkgconf_error(client, "spdxtool_simplelicensing_licenseExpression_new: out of memory");
51*592efe25SPierre Pronchery 	spdxtool_simplelicensing_licenseExpression_free(expression);
52*592efe25SPierre Pronchery 	return NULL;
53*592efe25SPierre Pronchery }
54*592efe25SPierre Pronchery 
55*592efe25SPierre Pronchery /*
56*592efe25SPierre Pronchery  * !doc
57*592efe25SPierre Pronchery  *
58*592efe25SPierre Pronchery  * .. c:function:: void spdxtool_simplelicensing_licenseExpression_free(spdxtool_simplelicensing_license_expression_t *expression)
59*592efe25SPierre Pronchery  *
60*592efe25SPierre Pronchery  *    Free /SimpleLicensing/SimpleLicensingText struct
61*592efe25SPierre Pronchery  *
62*592efe25SPierre Pronchery  *    :param spdxtool_simplelicensing_license_expression_t *expression: SimpleLicensingText struct to be freed.
63*592efe25SPierre Pronchery  *    :return: nothing
64*592efe25SPierre Pronchery  */
65*592efe25SPierre Pronchery void
spdxtool_simplelicensing_licenseExpression_free(spdxtool_simplelicensing_license_expression_t * expression)66*592efe25SPierre Pronchery spdxtool_simplelicensing_licenseExpression_free(spdxtool_simplelicensing_license_expression_t *expression)
67*592efe25SPierre Pronchery {
68*592efe25SPierre Pronchery 	if(!expression)
69*592efe25SPierre Pronchery 		return;
70*592efe25SPierre Pronchery 
71*592efe25SPierre Pronchery 	free(expression->spdx_id);
72*592efe25SPierre Pronchery 	free(expression->license_expression);
73*592efe25SPierre Pronchery 
74*592efe25SPierre Pronchery 	free(expression);
75*592efe25SPierre Pronchery }
76*592efe25SPierre Pronchery 
77*592efe25SPierre Pronchery /*
78*592efe25SPierre Pronchery  * !doc
79*592efe25SPierre Pronchery  *
80*592efe25SPierre Pronchery  * .. c:function:: spdxtool_serialize_value_t *spdxtool_simplelicensing_licenseExpression_to_object(const char *creation_info, const spdxtool_simplelicensing_license_expression_t *expression)
81*592efe25SPierre Pronchery  *
82*592efe25SPierre Pronchery  *    Serialize /SimpleLicensing/LicenseExpression struct to a JSON value tree.
83*592efe25SPierre Pronchery  *
84*592efe25SPierre Pronchery  *    :param const char *creation_info: The creationInfo ID string to embed in the object.
85*592efe25SPierre Pronchery  *    :param const spdxtool_simplelicensing_license_expression_t *expression: LicenseExpression struct to be serialized.
86*592efe25SPierre Pronchery  *    :return: spdxtool_serialize_value_t * representing the LicenseExpression object.
87*592efe25SPierre Pronchery  */
88*592efe25SPierre Pronchery spdxtool_serialize_value_t *
spdxtool_simplelicensing_licenseExpression_to_object(pkgconf_client_t * client,const char * creation_info,const spdxtool_simplelicensing_license_expression_t * expression)89*592efe25SPierre Pronchery spdxtool_simplelicensing_licenseExpression_to_object(pkgconf_client_t *client, const char *creation_info, const spdxtool_simplelicensing_license_expression_t *expression)
90*592efe25SPierre Pronchery {
91*592efe25SPierre Pronchery 	spdxtool_serialize_value_t *ret = NULL;
92*592efe25SPierre Pronchery 	spdxtool_serialize_object_list_t *object_list = spdxtool_serialize_object_list_new();
93*592efe25SPierre Pronchery 	if (!object_list)
94*592efe25SPierre Pronchery 		goto err;
95*592efe25SPierre Pronchery 
96*592efe25SPierre Pronchery 	if (!(spdxtool_serialize_object_add_string(object_list, "type", "simplelicensing_LicenseExpression") &&
97*592efe25SPierre Pronchery 		spdxtool_serialize_object_add_string(object_list, "creationInfo", creation_info) &&
98*592efe25SPierre Pronchery 		spdxtool_serialize_object_add_string(object_list, "spdxId", expression->spdx_id) &&
99*592efe25SPierre Pronchery 		spdxtool_serialize_object_add_string(object_list, "simplelicensing_licenseExpression", expression->license_expression)))
100*592efe25SPierre Pronchery 	{
101*592efe25SPierre Pronchery 		goto err;
102*592efe25SPierre Pronchery 	}
103*592efe25SPierre Pronchery 
104*592efe25SPierre Pronchery 	ret = spdxtool_serialize_value_object(object_list);
105*592efe25SPierre Pronchery 	object_list = NULL;
106*592efe25SPierre Pronchery 
107*592efe25SPierre Pronchery err:
108*592efe25SPierre Pronchery 	if (!ret)
109*592efe25SPierre Pronchery 		pkgconf_error(client, "spdxtool_simplelicensing_licenseExpression_to_object: out of memory");
110*592efe25SPierre Pronchery 
111*592efe25SPierre Pronchery 	spdxtool_serialize_object_list_free(object_list);
112*592efe25SPierre Pronchery 	return ret;
113*592efe25SPierre Pronchery }
114