along with this program. If not, see <http://www.gnu.org/licenses/>.
SPDX-License-Identifier: AGPL3.0-or-later
-*/
+ */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define TIMEOUT "5s"
static void
-kwait (pid_t chld)
+kwait(pid_t chld)
{
int ret;
- kill (chld, SIGKILL);
- waitpid (chld, &ret, 0);
+ kill(chld, SIGKILL);
+ waitpid(chld, &ret, 0);
}
* else 0
*/
int
-gns_resolve_name (int af, const char *name, struct userdata *u)
+gns_resolve_name(int af, const char *name, struct userdata *u)
{
FILE *p;
char line[128];
int out[2];
pid_t pid;
- if (0 != pipe (out))
+ if (0 != pipe(out))
return -1;
- pid = fork ();
+ pid = fork();
if (-1 == pid)
return -1;
if (0 == pid)
- {
- char *argv[] = {"gnunet-gns",
- "-r",
- "-t",
- (AF_INET6 == af) ? "AAAA" : "A",
- "-u",
- (char *) name,
- "-T",
- TIMEOUT,
- NULL};
+ {
+ char *argv[] = { "gnunet-gns",
+ "-r",
+ "-t",
+ (AF_INET6 == af) ? "AAAA" : "A",
+ "-u",
+ (char *)name,
+ "-T",
+ TIMEOUT,
+ NULL };
- (void) close (STDOUT_FILENO);
- if ((0 != close (out[0])) ||
- (STDOUT_FILENO != dup2 (out[1], STDOUT_FILENO)))
- _exit (1);
- (void) execvp ("gnunet-gns", argv);
- _exit (1);
- }
- (void) close (out[1]);
- p = fdopen (out[0], "r");
+ (void)close(STDOUT_FILENO);
+ if ((0 != close(out[0])) ||
+ (STDOUT_FILENO != dup2(out[1], STDOUT_FILENO)))
+ _exit(1);
+ (void)execvp("gnunet-gns", argv);
+ _exit(1);
+ }
+ (void)close(out[1]);
+ p = fdopen(out[0], "r");
if (NULL == p)
- {
- kwait (pid);
- return -1;
- }
- while (NULL != fgets (line, sizeof (line), p))
- {
- if (u->count >= MAX_ENTRIES)
- break;
- if (line[strlen (line) - 1] == '\n')
{
- line[strlen (line) - 1] = '\0';
- if (AF_INET == af)
- {
- if (inet_pton (af, line, &u->data.ipv4[u->count]))
- {
- u->count++;
- u->data_len += sizeof (ipv4_address_t);
- }
- else
- {
- (void) fclose (p);
- kwait (pid);
- errno = EINVAL;
- return -1;
- }
- }
- else if (AF_INET6 == af)
- {
- if (inet_pton (af, line, &u->data.ipv6[u->count]))
- {
- u->count++;
- u->data_len += sizeof (ipv6_address_t);
- }
- else
+ kwait(pid);
+ return -1;
+ }
+ while (NULL != fgets(line, sizeof(line), p))
+ {
+ if (u->count >= MAX_ENTRIES)
+ break;
+ if (line[strlen(line) - 1] == '\n')
{
- (void) fclose (p);
- kwait (pid);
- errno = EINVAL;
- return -1;
+ line[strlen(line) - 1] = '\0';
+ if (AF_INET == af)
+ {
+ if (inet_pton(af, line, &u->data.ipv4[u->count]))
+ {
+ u->count++;
+ u->data_len += sizeof(ipv4_address_t);
+ }
+ else
+ {
+ (void)fclose(p);
+ kwait(pid);
+ errno = EINVAL;
+ return -1;
+ }
+ }
+ else if (AF_INET6 == af)
+ {
+ if (inet_pton(af, line, &u->data.ipv6[u->count]))
+ {
+ u->count++;
+ u->data_len += sizeof(ipv6_address_t);
+ }
+ else
+ {
+ (void)fclose(p);
+ kwait(pid);
+ errno = EINVAL;
+ return -1;
+ }
+ }
}
- }
}
- }
- (void) fclose (p);
- waitpid (pid, &ret, 0);
- if (! WIFEXITED (ret))
+ (void)fclose(p);
+ waitpid(pid, &ret, 0);
+ if (!WIFEXITED(ret))
return -1;
- if (4 == WEXITSTATUS (ret))
+ if (4 == WEXITSTATUS(ret))
return -2; /* not for GNS */
if (3 == ret)
return -3; /* timeout -> not found */
- if ((2 == WEXITSTATUS (ret)) || (1 == WEXITSTATUS (ret)))
+ if ((2 == WEXITSTATUS(ret)) || (1 == WEXITSTATUS(ret)))
return -2; /* launch failure -> service unavailable */
return 0;
}