Skip to content

Commit d4b494c

Browse files
committed
Make the returned device names constant to avoid allocating them
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
1 parent 128c21e commit d4b494c

5 files changed

Lines changed: 15 additions & 30 deletions

File tree

include/cubeb/cubeb.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,8 @@ typedef struct {
287287

288288
/** Audio device description */
289289
typedef struct {
290-
char * output_name; /**< The name of the output device */
291-
char * input_name; /**< The name of the input device */
290+
const char * output_name; /**< The name of the output device */
291+
const char * input_name; /**< The name of the input device */
292292
} cubeb_device;
293293

294294
/** Stream states signaled via state_callback. */

src/cubeb_jack.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,14 +1086,14 @@ cbjack_stream_get_current_device(cubeb_stream * stm,
10861086
const char * empty = "";
10871087

10881088
if (stm->devs == DUPLEX) {
1089-
(*device)->input_name = strdup(j_in);
1090-
(*device)->output_name = strdup(j_out);
1089+
(*device)->input_name = j_in;
1090+
(*device)->output_name = j_out;
10911091
} else if (stm->devs == IN_ONLY) {
1092-
(*device)->input_name = strdup(j_in);
1093-
(*device)->output_name = strdup(empty);
1092+
(*device)->input_name = j_in;
1093+
(*device)->output_name = empty;
10941094
} else if (stm->devs == OUT_ONLY) {
1095-
(*device)->input_name = strdup(empty);
1096-
(*device)->output_name = strdup(j_out);
1095+
(*device)->input_name = empty;
1096+
(*device)->output_name = j_out;
10971097
}
10981098

10991099
return CUBEB_OK;
@@ -1102,10 +1102,6 @@ cbjack_stream_get_current_device(cubeb_stream * stm,
11021102
static int
11031103
cbjack_stream_device_destroy(cubeb_stream * /*stream*/, cubeb_device * device)
11041104
{
1105-
if (device->input_name)
1106-
free(device->input_name);
1107-
if (device->output_name)
1108-
free(device->output_name);
11091105
free(device);
11101106
return CUBEB_OK;
11111107
}

src/cubeb_oss.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,19 +1312,15 @@ oss_get_current_device(cubeb_stream * stream, cubeb_device ** const device)
13121312
if (*device == NULL) {
13131313
return CUBEB_ERROR;
13141314
}
1315-
(*device)->input_name =
1316-
stream->record.fd != -1 ? strdup(stream->record.name) : NULL;
1317-
(*device)->output_name =
1318-
stream->play.fd != -1 ? strdup(stream->play.name) : NULL;
1315+
(*device)->input_name = stream->record.fd != -1 ? stream->record.name : NULL;
1316+
(*device)->output_name = stream->play.fd != -1 ? stream->play.name : NULL;
13191317
return CUBEB_OK;
13201318
}
13211319

13221320
static int
13231321
oss_stream_device_destroy(cubeb_stream * stream, cubeb_device * device)
13241322
{
13251323
(void)stream;
1326-
free(device->input_name);
1327-
free(device->output_name);
13281324
free(device);
13291325
return CUBEB_OK;
13301326
}

src/cubeb_pulse.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,13 +1535,12 @@ pulse_stream_get_current_device(cubeb_stream * stm,
15351535
return CUBEB_ERROR;
15361536

15371537
if (stm->input_stream) {
1538-
const char * name = WRAP(pa_stream_get_device_name)(stm->input_stream);
1539-
(*device)->input_name = (name == NULL) ? NULL : strdup(name);
1538+
(*device)->input_name = WRAP(pa_stream_get_device_name)(stm->input_stream);
15401539
}
15411540

15421541
if (stm->output_stream) {
1543-
const char * name = WRAP(pa_stream_get_device_name)(stm->output_stream);
1544-
(*device)->output_name = (name == NULL) ? NULL : strdup(name);
1542+
(*device)->output_name =
1543+
WRAP(pa_stream_get_device_name)(stm->output_stream);
15451544
}
15461545

15471546
return CUBEB_OK;
@@ -1554,8 +1553,6 @@ static int
15541553
pulse_stream_device_destroy(cubeb_stream * stream, cubeb_device * device)
15551554
{
15561555
(void)stream;
1557-
free(device->input_name);
1558-
free(device->output_name);
15591556
free(device);
15601557
return CUBEB_OK;
15611558
}

src/cubeb_sun.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -696,19 +696,15 @@ sun_get_current_device(cubeb_stream * stream, cubeb_device ** const device)
696696
if (*device == NULL) {
697697
return CUBEB_ERROR;
698698
}
699-
(*device)->input_name =
700-
stream->record.fd != -1 ? strdup(stream->record.name) : NULL;
701-
(*device)->output_name =
702-
stream->play.fd != -1 ? strdup(stream->play.name) : NULL;
699+
(*device)->input_name = stream->record.fd != -1 ? stream->record.name : NULL;
700+
(*device)->output_name = stream->play.fd != -1 ? stream->play.name : NULL;
703701
return CUBEB_OK;
704702
}
705703

706704
static int
707705
sun_stream_device_destroy(cubeb_stream * stream, cubeb_device * device)
708706
{
709707
(void)stream;
710-
free(device->input_name);
711-
free(device->output_name);
712708
free(device);
713709
return CUBEB_OK;
714710
}

0 commit comments

Comments
 (0)