Ok, back to use '@func refer' inside alsa.conf (following Abramo's

interpellation).
This commit is contained in:
Jaroslav Kysela 2001-06-19 10:36:31 +00:00
parent 735e5473e0
commit 455edb9e21
9 changed files with 264 additions and 549 deletions

View file

@ -190,7 +190,7 @@ pcm.front {
default 0 default 0
} }
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -208,9 +208,13 @@ pcm.front {
name { name {
@func concat @func concat
strings [ strings [
"pcm.front_" $DEV ":CARD=" $CARD "cards."
] {
@func card_strtype
card $CARD
} }
".pcm.front." $DEV ":CARD=" $CARD
]
} }
} }
@ -238,7 +242,7 @@ pcm.rear {
default 0 default 0
} }
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -256,9 +260,13 @@ pcm.rear {
name { name {
@func concat @func concat
strings [ strings [
"pcm.rear_" $DEV ":CARD=" $CARD "cards."
] {
@func card_strtype
card $CARD
} }
".pcm.rear." $DEV ":CARD=" $CARD
]
} }
} }
@ -286,7 +294,7 @@ pcm.center_lfe {
default 0 default 0
} }
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -304,9 +312,13 @@ pcm.center_lfe {
name { name {
@func concat @func concat
strings [ strings [
"pcm.center_lfe_" $DEV ":CARD=" $CARD "cards."
] {
@func card_strtype
card $CARD
} }
".pcm.center_lfe." $DEV ":CARD=" $CARD
]
} }
} }
@ -334,7 +346,7 @@ pcm.surround40 {
default 0 default 0
} }
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -352,9 +364,13 @@ pcm.surround40 {
name { name {
@func concat @func concat
strings [ strings [
"pcm.surround40_" $DEV ":CARD=" $CARD "cards."
] {
@func card_strtype
card $CARD
} }
".pcm.surround40." $DEV ":CARD=" $CARD
]
} }
} }
@ -382,7 +398,7 @@ pcm.surround51 {
default 0 default 0
} }
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -400,9 +416,13 @@ pcm.surround51 {
name { name {
@func concat @func concat
strings [ strings [
"pcm.surround51_" $DEV ":CARD=" $CARD "cards."
] {
@func card_strtype
card $CARD
} }
".pcm.surround51." $DEV ":CARD=" $CARD
]
} }
} }
@ -450,7 +470,7 @@ pcm.iec958 {
# fs=48000Hz, clock accuracy=1000ppm # fs=48000Hz, clock accuracy=1000ppm
default 0x02 default 0x02
} }
refer { @func refer
file { file {
@func concat @func concat
strings [ strings [
@ -468,7 +488,12 @@ pcm.iec958 {
name { name {
@func concat @func concat
strings [ strings [
"pcm.iec958_" $DEV ":" "cards."
{
@func card_strtype
card $CARD
}
".pcm.iec958." $DEV ":"
"CARD=" $CARD "," "CARD=" $CARD ","
"AES0=" $AES0 "," "AES0=" $AES0 ","
"AES1=" $AES1 "," "AES1=" $AES1 ","
@ -476,7 +501,6 @@ pcm.iec958 {
"AES3=" $AES3 "AES3=" $AES3
] ]
} }
}
} }
pcm.spdif pcm.iec958 pcm.spdif pcm.iec958

View file

@ -2,54 +2,26 @@
# Configuration for the EMU10K1 chip # Configuration for the EMU10K1 chip
# #
pcm.emu10k1_front { cards.EMU10K1.pcm.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 0
strings [ "pcm.emu10k1_front:" $CARD ",0,-1" ]
}
} }
pcm.emu10k1_rear { cards.EMU10K1.pcm.rear.0 {
@args [ CARD DEV SUBDEV ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"pcm.emu10k1_front:" $CARD "," $DEV "," $SUBDEV device 0
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems
@ -70,36 +42,13 @@ pcm.emu10k1_rear {
} }
} }
pcm.rear_0 { cards.EMU10K1.pcm.center_lfe {
@args [ CARD ] @args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.emu10k1_rear:" $CARD ",0,-1" ]
}
}
pcm.emu10k1_center_lfe {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"pcm.emu10k1_front:" $CARD "," $DEV "," $SUBDEV device 0
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems
@ -132,19 +81,7 @@ pcm.emu10k1_center_lfe {
} }
} }
pcm.center_lfe_0 { cards.EMU10K1.pcm.surround40.0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.emu10k1_center_lfe:" $CARD ",0,-1" ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -155,7 +92,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.emu10k1_front:" $CARD ",0,-1" "cards.EMU10K1.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -164,7 +101,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.emu10k1_rear:" $CARD ",0,-1" "cards.EMU10K1.pcm.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -178,7 +115,7 @@ pcm.surround40_0 {
] ]
} }
pcm.surround51_0 { cards.EMU10K1.pcm.surround51.0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -189,7 +126,7 @@ pcm.surround51_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.emu10k1_front:" $CARD ",0,-1" "cards.EMU10K1.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -198,7 +135,7 @@ pcm.surround51_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.emu10k1_rear:" $CARD ",0,-1" "cards.EMU10K1.pcm.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -207,7 +144,7 @@ pcm.surround51_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.emu10k1_center_lfe:" $CARD ",0,-1" "cards.EMU10K1.pcm.center_lfe.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -223,7 +160,7 @@ pcm.surround51_0 {
] ]
} }
pcm.iec958_0 { cards.EMU10K1.pcm.iec958.0 {
@args [ CARD DEV AES0 AES1 AES2 AES3 ] @args [ CARD DEV AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type integer type integer
@ -245,13 +182,9 @@ pcm.iec958_0 {
} }
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"hw:" device 3
"CARD=" $CARD ","
"DEV=3,"
"SUBDEV=0"
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems

View file

@ -2,54 +2,26 @@
# Configuration for the ENS1370 chip # Configuration for the ENS1370 chip
# #
pcm.ens1370_front { cards.ENS1370.pcm.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 1
strings [ "pcm.ens1370_front:" $CARD ",0,-1" ]
}
} }
pcm.ens1370_rear { cards.ENS1370.pcm.rear.0 {
@args [ CARD DEV SUBDEV ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"pcm.ens1370_front:" $CARD "," $DEV "," $SUBDEV device 0
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems
@ -70,19 +42,7 @@ pcm.ens1370_rear {
} }
} }
pcm.rear_0 { cards.ENS1370.pcm.surround40.0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.ens1370_rear:" $CARD ",0,-1" ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -94,7 +54,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.ens1370_front:" $CARD ",0,-1" "cards.ENS1370.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -103,7 +63,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.ens1370_rear:" $CARD ",0,-1" "cards.ENS1370.pcm.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2

View file

@ -2,37 +2,7 @@
# Configuration for the FM801 chip # Configuration for the FM801 chip
# #
pcm.fm801_front { cards.FM801.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.fm801_front:" $CARD ",0,-1" ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -40,21 +10,12 @@ pcm.surround40_0 {
type hw type hw
card $CARD card $CARD
device 0 device 0
subdevice 0
} }
pcm.surround51_0 { cards.FM801.surround40.0 "cards.FM801.front.0"
@args [ CARD ] cards.FM801.surround51.0 "cards.FM801.front.0"
@args.CARD {
type integer
}
type hw
card $CARD
device 0
subdevice 0
}
pcm.iec958_0 { cards.FM801.iec958.0 {
@args [ CARD DEV AES0 AES1 AES2 AES3 ] @args [ CARD DEV AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type integer type integer
@ -76,13 +37,9 @@ pcm.iec958_0 {
} }
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"hw:" device 0
"CARD=" $CARD ","
"DEV=0,"
"SUBDEV=0"
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems

View file

@ -2,37 +2,17 @@
# Configuration for the INTEL8X0 chip # Configuration for the INTEL8X0 chip
# #
pcm.intel8x0_front { cards.INTEL8X0.pcm.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 0
strings [ "pcm.intel8x0_front:" $CARD ",0,-1" ]
}
} }
pcm.surround40_0 { cards.INTEL8X0.pcm.surround40.0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -43,7 +23,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.intel8x0_front:" $CARD ",0,-1" "cards.INTEL8X0.pcm.front.0:CARD=" $CARD
] ]
} }
channels 4 channels 4
@ -57,7 +37,7 @@ pcm.surround40_0 {
] ]
} }
pcm.surround51_0 { cards.INTEL8X0.pcm.surround51.0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -68,7 +48,7 @@ pcm.surround51_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.intel8x0_front:" $CARD ",0,-1" "cards.INTEL8X0.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -84,7 +64,7 @@ pcm.surround51_0 {
] ]
} }
pcm.iec958_0 { cards.INTEL8X0.pcm.iec958.0 {
@args [ CARD DEV AES0 AES1 AES2 AES3 ] @args [ CARD DEV AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type integer type integer
@ -106,13 +86,9 @@ pcm.iec958_0 {
} }
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"hw:" device 0
"CARD=" $CARD ","
"DEV=0,"
"SUBDEV=0"
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems

View file

@ -2,54 +2,26 @@
# Configuration for the SI7018 chip # Configuration for the SI7018 chip
# #
pcm.si7018_front { cards.SI_7018.pcm.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 0
strings [ "pcm.si7018_front:" $CARD ",0,-1" ]
}
} }
pcm.si7018_rear { cards.SI_7018.pcm.rear.0 {
@args [ CARD DEV SUBDEV ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"pcm.si7018_front:" $CARD "," $DEV "," $SUBDEV device 0
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems
@ -64,19 +36,7 @@ pcm.si7018_rear {
} }
} }
pcm.rear_0 { cards.SI_7018.pcm.surround40.0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.si7018_rear:" $CARD ",0,-1" ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -87,7 +47,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.si7018_front:" $CARD ",0,-1" "cards.SI_7018.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -96,7 +56,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.si7018_rear:" $CARD ",0,-1" "cards.SI_7018.pcm.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2

View file

@ -2,61 +2,32 @@
# Configuration for the Trident 4D-Wave NX chip # Configuration for the Trident 4D-Wave NX chip
# #
pcm.trid4dwavenx_front { cards.TRID4DWAVENX.pcm.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 0
strings [ "pcm.trid4dwavenx_front:" $CARD ",0,-1" ]
}
} }
pcm.trid4dwavenx_rear { cards.TRID4DWAVENX.pcm.rear.0 {
@args [ CARD DEV SUBDEV ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"pcm.trid4dwavenx_front:CARD=" $CARD ",DEV=" $DEV ",SUBDEV=" $SUBDEV device 0
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems
hook_args [ hook_args [
{ {
name "Rear Path" name "Rear Path"
index { @func private_pcm_subdevice }
lock true lock true
preserve true preserve true
value true value true
@ -66,32 +37,20 @@ pcm.trid4dwavenx_rear {
index { @func private_pcm_subdevice } index { @func private_pcm_subdevice }
lock true lock true
preserve true preserve true
value [ 0 0 ] value 0
} }
{ {
name "PCM Reverb Playback Volume" name "PCM Reverb Playback Volume"
index { @func private_pcm_subdevice } index { @func private_pcm_subdevice }
lock true lock true
preserve true preserve true
value [ 127 127 ] value 127
} }
] ]
} }
} }
pcm.rear_0 { cards.TRID4DWAVENX.pcm.surround40.0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.trid4dwavenx_rear:" $CARD ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -102,7 +61,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.trid4dwavenx_front:" $CARD ",0,-1" "cards.TRID4DWAVENX.pcm.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -111,7 +70,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.trid4dwavenx_rear:" $CARD ",0,-1" "cards.TRID4DWAVENX.pcm.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -125,14 +84,11 @@ pcm.surround40_0 {
] ]
} }
pcm.iec958_0 { cards.TRID4DWAVENX.pcm.iec958.0 {
@args [ CARD DEV AES0 AES1 AES2 AES3 ] @args [ CARD AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type integer type integer
} }
@args.DEV {
type integer
}
@args.AES0 { @args.AES0 {
type integer type integer
} }

View file

@ -2,37 +2,17 @@
# Configuration for the YMFPCI chip # Configuration for the YMFPCI chip
# #
pcm.ymfpci_front { cards.YMFPCI.front.0 {
@args [ CARD DEV SUBDEV ]
@args.CARD {
type integer
}
@args.DEV {
type integer
}
@args.SUBDEV {
type integer
default -1
}
type hw
card $CARD
device $DEV
subdevice $SUBDEV
}
pcm.front_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
} }
@func refer type hw
name { card $CARD
@func concat device 0
strings [ "pcm.ymfpci_front:" $CARD ",0,-1" ]
}
} }
pcm.ymfpci_rear { cards.YMFPCI.rear.0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -40,22 +20,9 @@ pcm.ymfpci_rear {
type hw type hw
card $CARD card $CARD
device 2 device 2
subdevice 0
} }
pcm.rear_0 { cards.YMFPCI.surround40.0 {
@args [ CARD ]
@args.CARD {
type integer
}
@func refer
name {
@func concat
strings [ "pcm.ymfpci_rear:" $CARD ]
}
}
pcm.surround40_0 {
@args [ CARD ] @args [ CARD ]
@args.CARD { @args.CARD {
type integer type integer
@ -66,7 +33,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.ymfpci_front:" $CARD ",0,-1" "cards.YMFPCI.front.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -75,7 +42,7 @@ pcm.surround40_0 {
pcm { pcm {
@func concat @func concat
strings [ strings [
"pcm.ymfpci_rear:" $CARD "cards.YMFPCI.rear.0:CARD=" $CARD
] ]
} }
channels 2 channels 2
@ -89,7 +56,7 @@ pcm.surround40_0 {
] ]
} }
pcm.iec958_0 { cards.YMFPCI.iec958.0 {
@args [ CARD DEV AES0 AES1 AES2 AES3 ] @args [ CARD DEV AES0 AES1 AES2 AES3 ]
@args.CARD { @args.CARD {
type integer type integer
@ -111,13 +78,9 @@ pcm.iec958_0 {
} }
type hooks type hooks
slave.pcm { slave.pcm {
@func concat type hw
strings [ card $CARD
"hw:" device 1
"CARD=" $CARD ","
"DEV=1,"
"SUBDEV=0"
]
} }
hooks.0 { hooks.0 {
type ctl_elems type ctl_elems

View file

@ -624,16 +624,15 @@ int snd_func_private_pcm_subdevice(snd_config_t **dst, snd_config_t *root ATTRIB
return err; return err;
} }
int snd_func_refer(snd_config_t **dst, snd_config_t *_root, snd_config_t *src, void *private_data) int snd_func_refer(snd_config_t **dst, snd_config_t *root, snd_config_t *src, void *private_data)
{ {
snd_config_t *n; snd_config_t *n;
snd_config_t *root;
const char *file = NULL, *name = NULL; const char *file = NULL, *name = NULL;
int err; int err;
err = snd_config_search(src, "file", &n); err = snd_config_search(src, "file", &n);
if (err >= 0) { if (err >= 0) {
err = snd_config_evaluate(n, _root, private_data, NULL); err = snd_config_evaluate(n, root, private_data, NULL);
if (err < 0) { if (err < 0) {
SNDERR("error evaluating file"); SNDERR("error evaluating file");
goto _end; goto _end;
@ -646,7 +645,7 @@ int snd_func_refer(snd_config_t **dst, snd_config_t *_root, snd_config_t *src, v
} }
err = snd_config_search(src, "name", &n); err = snd_config_search(src, "name", &n);
if (err >= 0) { if (err >= 0) {
err = snd_config_evaluate(n, _root, private_data, NULL); err = snd_config_evaluate(n, root, private_data, NULL);
if (err < 0) { if (err < 0) {
SNDERR("error evaluating name"); SNDERR("error evaluating name");
goto _end; goto _end;
@ -657,18 +656,13 @@ int snd_func_refer(snd_config_t **dst, snd_config_t *_root, snd_config_t *src, v
goto _end; goto _end;
} }
} }
if (!file && !name) { if (!name) {
err = -EINVAL; err = -EINVAL;
SNDERR("neither file or name are specified"); SNDERR("name is not specified");
goto _end; goto _end;
} }
if (!file) if (file) {
root = _root;
else {
snd_input_t *input; snd_input_t *input;
err = snd_config_top(&root);
if (err < 0)
goto _end;
err = snd_input_stdio_open(&input, file, "r"); err = snd_input_stdio_open(&input, file, "r");
if (err < 0) { if (err < 0) {
SNDERR("Unable to open file %s: %s", file, snd_strerror(err)); SNDERR("Unable to open file %s: %s", file, snd_strerror(err));
@ -680,19 +674,11 @@ int snd_func_refer(snd_config_t **dst, snd_config_t *_root, snd_config_t *src, v
goto _end; goto _end;
} }
} }
if (!name) {
if (root == _root)
err = snd_config_copy(dst, root);
else {
*dst = root;
err = 0;
}
} else
err = snd_config_search_definition(root, NULL, name, dst); err = snd_config_search_definition(root, NULL, name, dst);
if (err >= 0) if (err >= 0)
err = snd_config_set_id(*dst, snd_config_get_id(src)); err = snd_config_set_id(*dst, snd_config_get_id(src));
else
SNDERR("Unable to find definition '%s'", name);
_end: _end:
if (root && root != _root)
snd_config_delete(root);
return err; return err;
} }