/* Standard find_debuginfo callback for libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
try_open (const char *dir, const char *subdir, const char *debuglink,
char **debuginfo_file_name)
{
- char *fname = NULL;
+ char *fname;
if (dir == NULL && subdir == NULL)
- fname = strdup (debuglink);
- else if (subdir == NULL)
- asprintf (&fname, "%s/%s", dir, debuglink);
- else if (dir == NULL)
- asprintf (&fname, "%s/%s", subdir, debuglink);
- else
- asprintf (&fname, "%s/%s/%s", dir, subdir, debuglink);
-
- if (fname == NULL)
+ {
+ fname = strdup (debuglink);
+ if (fname == NULL)
+ return -1;
+ }
+ else if ((subdir == NULL ? asprintf (&fname, "%s/%s", dir, debuglink)
+ : dir == NULL ? asprintf (&fname, "%s/%s", subdir, debuglink)
+ : asprintf (&fname, "%s/%s/%s", dir, subdir, debuglink)) < 0)
return -1;
int fd = TEMP_FAILURE_RETRY (open64 (fname, O_RDONLY));
/* Standard libdwfl callbacks for debugging the running Linux kernel.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005, 2006, 2007 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
if (dwfl == NULL)
return -1;
- char *fname = NULL;
- if (release[0] == '/')
- asprintf (&fname, "%s/vmlinux", release);
- else
- asprintf (&fname, "/boot/vmlinux-%s", release);
+ char *fname;
+ if ((release[0] == '/'
+ ? asprintf (&fname, "%s/vmlinux", release)
+ : asprintf (&fname, "/boot/vmlinux-%s", release)) < 0)
+ return -1;
int fd = try_kernel_name (dwfl, &fname);
if (fd < 0 && release[0] != '/')
{
free (fname);
- fname = NULL;
- asprintf (&fname, MODULEDIRFMT "/vmlinux", release);
+ if (asprintf (&fname, MODULEDIRFMT "/vmlinux", release) < 0)
+ return -1;
fd = try_kernel_name (dwfl, &fname);
}
modulesdir[0] = (char *) release;
else
{
- asprintf (&modulesdir[0], MODULEDIRFMT "/kernel", release);
- if (modulesdir[0] == NULL)
+ if (asprintf (&modulesdir[0], MODULEDIRFMT "/kernel", release) < 0)
return errno;
}
/* Do "find /lib/modules/`uname -r`/kernel -name MODULE_NAME.ko". */
char *modulesdir[] = { NULL, NULL };
- asprintf (&modulesdir[0], MODULEDIRFMT "/kernel", release);
- if (modulesdir[0] == NULL)
+ if (asprintf (&modulesdir[0], MODULEDIRFMT "/kernel", release) < 0)
return -1;
FTS *fts = fts_open (modulesdir, FTS_LOGICAL | FTS_NOSTAT, NULL);
const GElf_Shdr *shdr __attribute__ ((unused)),
Dwarf_Addr *addr)
{
- char *sysfile = NULL;
- asprintf (&sysfile, SECADDRDIRFMT "%s", modname, secname);
- if (sysfile == NULL)
+ char *sysfile;
+ if (asprintf (&sysfile, SECADDRDIRFMT "%s", modname, secname))
return ENOMEM;
FILE *f = fopen (sysfile, "r");
const bool is_init = !strncmp (secname, ".init", 5);
if (is_init)
{
- sysfile = NULL;
- asprintf (&sysfile, SECADDRDIRFMT "_%s", modname, &secname[1]);
- if (sysfile == NULL)
+ if (asprintf (&sysfile, SECADDRDIRFMT "_%s",
+ modname, &secname[1]) < 0)
return ENOMEM;
f = fopen (sysfile, "r");
free (sysfile);
size_t namelen = strlen (secname);
if (namelen >= MODULE_SECT_NAME_LEN)
{
- sysfile = NULL;
int len = asprintf (&sysfile, SECADDRDIRFMT "%s",
modname, secname);
- if (sysfile == NULL)
+ if (len < 0)
return ENOMEM;
char *end = sysfile + len;
do