2 * Copyright (C) 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 * SPDX-License-Identifier: LGPL-2.1-only
11 #include <common/error.h>
12 #include <common/macros.h>
15 int parse_application_context(const char *str
, char **out_provider_name
,
18 const char app_ctx_prefix
[] = "$app.";
19 char *provider_name
= NULL
, *ctx_name
= NULL
;
20 size_t i
, len
, colon_pos
= 0, provider_name_len
, ctx_name_len
;
22 if (!str
|| !out_provider_name
|| !out_ctx_name
) {
27 if (len
<= sizeof(app_ctx_prefix
) - 1) {
31 /* String starts with $app. */
32 if (strncmp(str
, app_ctx_prefix
, sizeof(app_ctx_prefix
) - 1)) {
36 /* Validate that the ':' separator is present. */
37 for (i
= sizeof(app_ctx_prefix
); i
< len
; i
++) {
38 const char c
= str
[i
];
47 * No colon found or no ctx name ("$app.provider:") or no provider name
48 * given ("$app.:..."), which is invalid.
50 if (!colon_pos
|| colon_pos
== len
||
51 colon_pos
== sizeof(app_ctx_prefix
)) {
55 provider_name_len
= colon_pos
- sizeof(app_ctx_prefix
) + 2;
56 provider_name
= zmalloc(provider_name_len
);
58 PERROR("malloc provider_name");
61 strncpy(provider_name
, str
+ sizeof(app_ctx_prefix
) - 1,
62 provider_name_len
- 1);
64 ctx_name_len
= len
- colon_pos
;
65 ctx_name
= zmalloc(ctx_name_len
);
67 PERROR("malloc ctx_name");
70 strncpy(ctx_name
, str
+ colon_pos
+ 1, ctx_name_len
- 1);
72 *out_provider_name
= provider_name
;
73 *out_ctx_name
= ctx_name
;
This page took 0.030406 seconds and 4 git commands to generate.