store error messages into the bad_pcm Bug: 190004833 Test: mm libtinyalsa Change-Id: I7742bfeb0ecf6816857222dbcee1b85a4f385037
diff --git a/pcm.c b/pcm.c index 1d84dc0..1709be9 100644 --- a/pcm.c +++ b/pcm.c
@@ -912,8 +912,10 @@ return &bad_pcm; /* TODO: could support default config here */ } pcm = calloc(1, sizeof(struct pcm)); - if (!pcm) + if (!pcm) { + oops(&bad_pcm, ENOMEM, "can't allocate PCM object"); return &bad_pcm; /* TODO: could support default config here */ + } pcm->config = *config; pcm->flags = flags; @@ -927,13 +929,13 @@ pcm->fd = pcm->ops->open(card, device, flags, &pcm->data, pcm->snd_node); if (pcm->fd < 0) { - oops(pcm, errno, "cannot open device %u for card %u", + oops(&bad_pcm, errno, "cannot open device %u for card %u", device, card); goto fail_open; } if (pcm->ops->ioctl(pcm->data, SNDRV_PCM_IOCTL_INFO, &info)) { - oops(pcm, errno, "cannot get info"); + oops(&bad_pcm, errno, "cannot get info"); goto fail_close; } pcm->subdevice = info.subdevice; @@ -955,7 +957,7 @@ if (flags & PCM_NOIRQ) { if (!(flags & PCM_MMAP)) { - oops(pcm, EINVAL, "noirq only currently supported with mmap()."); + oops(&bad_pcm, EINVAL, "noirq only currently supported with mmap()."); goto fail_close; } @@ -971,7 +973,7 @@ SNDRV_PCM_ACCESS_RW_INTERLEAVED); if (pcm->ops->ioctl(pcm->data, SNDRV_PCM_IOCTL_HW_PARAMS, ¶ms)) { - oops(pcm, errno, "cannot set hw params"); + oops(&bad_pcm, errno, "cannot set hw params"); goto fail_close; } @@ -985,7 +987,7 @@ pcm_frames_to_bytes(pcm, pcm->buffer_size), PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, 0); if (pcm->mmap_buffer == MAP_FAILED) { - oops(pcm, errno, "failed to mmap buffer %d bytes\n", + oops(&bad_pcm, errno, "failed to mmap buffer %d bytes\n", pcm_frames_to_bytes(pcm, pcm->buffer_size)); goto fail_close; } @@ -1033,13 +1035,13 @@ pcm->boundary *= 2; if (pcm->ops->ioctl(pcm->data, SNDRV_PCM_IOCTL_SW_PARAMS, &sparams)) { - oops(pcm, errno, "cannot set sw params"); + oops(&bad_pcm, errno, "cannot set sw params"); goto fail; } rc = pcm_hw_mmap_status(pcm); if (rc < 0) { - oops(pcm, errno, "mmap status failed"); + oops(&bad_pcm, errno, "mmap status failed"); goto fail; } @@ -1048,7 +1050,7 @@ int arg = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC; rc = pcm->ops->ioctl(pcm->data, SNDRV_PCM_IOCTL_TTSTAMP, &arg); if (rc < 0) { - oops(pcm, errno, "cannot set timestamp type"); + oops(&bad_pcm, errno, "cannot set timestamp type"); goto fail; } }