2 * Copyright (C) 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 * SPDX-License-Identifier: LGPL-2.1-only
11 #include <common/error.hpp>
12 #include <common/macros.hpp>
14 int parse_application_context(const char *str
, char **out_provider_name
,
17 const char app_ctx_prefix
[] = "$app.";
18 char *provider_name
= NULL
, *ctx_name
= NULL
;
19 size_t i
, len
, colon_pos
= 0, provider_name_len
, ctx_name_len
;
21 if (!str
|| !out_provider_name
|| !out_ctx_name
) {
26 if (len
<= sizeof(app_ctx_prefix
) - 1) {
30 /* String starts with $app. */
31 if (strncmp(str
, app_ctx_prefix
, sizeof(app_ctx_prefix
) - 1)) {
35 /* Validate that the ':' separator is present. */
36 for (i
= sizeof(app_ctx_prefix
); i
< len
; i
++) {
37 const char c
= str
[i
];
46 * No colon found or no ctx name ("$app.provider:") or no provider name
47 * given ("$app.:..."), which is invalid.
49 if (!colon_pos
|| colon_pos
== len
||
50 colon_pos
== sizeof(app_ctx_prefix
)) {
54 provider_name_len
= colon_pos
- sizeof(app_ctx_prefix
) + 2;
55 provider_name
= calloc
<char>(provider_name_len
);
57 PERROR("malloc provider_name");
60 strncpy(provider_name
, str
+ sizeof(app_ctx_prefix
) - 1,
61 provider_name_len
- 1);
63 ctx_name_len
= len
- colon_pos
;
64 ctx_name
= calloc
<char>(ctx_name_len
);
66 PERROR("malloc ctx_name");
69 strncpy(ctx_name
, str
+ colon_pos
+ 1, ctx_name_len
- 1);
71 *out_provider_name
= provider_name
;
72 *out_ctx_name
= ctx_name
;
This page took 0.043528 seconds and 4 git commands to generate.