Handle out of memory conditions.
malloc and realloc could return NULL when no memory is available. The code doesn't handle errors, so use xmalloc/xrealloc instead. While at it, sync alloclen's type with len's type, so both are ssize_t.
This commit is contained in:
parent
5e73c83262
commit
30986cb22e
6
pwdx.c
6
pwdx.c
@ -65,7 +65,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
int retval = 0, i;
|
int retval = 0, i;
|
||||||
int alloclen = 128;
|
ssize_t alloclen = 128;
|
||||||
char *pathbuf;
|
char *pathbuf;
|
||||||
|
|
||||||
static const struct option longopts[] = {
|
static const struct option longopts[] = {
|
||||||
@ -99,7 +99,7 @@ int main(int argc, char *argv[])
|
|||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
usage(stderr);
|
usage(stderr);
|
||||||
|
|
||||||
pathbuf = malloc(alloclen);
|
pathbuf = xmalloc(alloclen);
|
||||||
|
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
char *s;
|
char *s;
|
||||||
@ -128,7 +128,7 @@ int main(int argc, char *argv[])
|
|||||||
*/
|
*/
|
||||||
while ((len = readlink(buf, pathbuf, alloclen)) == alloclen) {
|
while ((len = readlink(buf, pathbuf, alloclen)) == alloclen) {
|
||||||
alloclen *= 2;
|
alloclen *= 2;
|
||||||
pathbuf = realloc(pathbuf, alloclen);
|
pathbuf = xrealloc(pathbuf, alloclen);
|
||||||
}
|
}
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user