snd_mixer_oss_build_input(): fix for __you_cannot_kmalloc_that_much failure with gcc-3.2

Rework this functions so that gcc-3.2 can successfully perform
constant-folding.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Jaroslav Kysela <perex@suse.cz>
Cc: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Jean Delvare and committed by Linus Torvalds 22a860a9 ce8c628a

+63 -38
+63 -38
sound/core/oss/mixer_oss.c
··· 925 rslot->number = idx; 926 } 927 928 /* 929 * build an OSS mixer element. 930 * ptr_allocated means the entry is dynamically allocated (change via proc file). ··· 1006 1007 memset(&slot, 0, sizeof(slot)); 1008 memset(slot.numid, 0xff, sizeof(slot.numid)); /* ID_UNKNOWN */ 1009 - if (snd_mixer_oss_build_test(mixer, &slot, ptr->name, ptr->index, 1010 - SNDRV_MIXER_OSS_ITEM_GLOBAL)) 1011 - return 0; 1012 - sprintf(str, "%s Switch", ptr->name); 1013 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1014 - SNDRV_MIXER_OSS_ITEM_GSWITCH)) 1015 - return 0; 1016 - sprintf(str, "%s Route", ptr->name); 1017 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1018 - SNDRV_MIXER_OSS_ITEM_GROUTE)) 1019 - return 0; 1020 - sprintf(str, "%s Volume", ptr->name); 1021 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1022 - SNDRV_MIXER_OSS_ITEM_GVOLUME)) 1023 - return 0; 1024 - sprintf(str, "%s Playback Switch", ptr->name); 1025 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1026 - SNDRV_MIXER_OSS_ITEM_PSWITCH)) 1027 - return 0; 1028 - sprintf(str, "%s Playback Route", ptr->name); 1029 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1030 - SNDRV_MIXER_OSS_ITEM_PROUTE)) 1031 - return 0; 1032 - sprintf(str, "%s Playback Volume", ptr->name); 1033 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1034 - SNDRV_MIXER_OSS_ITEM_PVOLUME)) 1035 - return 0; 1036 - sprintf(str, "%s Capture Switch", ptr->name); 1037 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1038 - SNDRV_MIXER_OSS_ITEM_CSWITCH)) 1039 - return 0; 1040 - sprintf(str, "%s Capture Route", ptr->name); 1041 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1042 - SNDRV_MIXER_OSS_ITEM_CROUTE)) 1043 - return 0; 1044 - sprintf(str, "%s Capture Volume", ptr->name); 1045 - if (snd_mixer_oss_build_test(mixer, &slot, str, ptr->index, 1046 - SNDRV_MIXER_OSS_ITEM_CVOLUME)) 1047 return 0; 1048 down_read(&mixer->card->controls_rwsem); 1049 if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) {
··· 925 rslot->number = idx; 926 } 927 928 + /* In a separate function to keep gcc 3.2 happy - do NOT merge this in 929 + snd_mixer_oss_build_input! */ 930 + static int snd_mixer_oss_build_test_all(struct snd_mixer_oss *mixer, 931 + struct snd_mixer_oss_assign_table *ptr, 932 + struct slot *slot) 933 + { 934 + char str[64]; 935 + int err; 936 + 937 + err = snd_mixer_oss_build_test(mixer, slot, ptr->name, ptr->index, 938 + SNDRV_MIXER_OSS_ITEM_GLOBAL); 939 + if (err) 940 + return err; 941 + sprintf(str, "%s Switch", ptr->name); 942 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 943 + SNDRV_MIXER_OSS_ITEM_GSWITCH); 944 + if (err) 945 + return err; 946 + sprintf(str, "%s Route", ptr->name); 947 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 948 + SNDRV_MIXER_OSS_ITEM_GROUTE); 949 + if (err) 950 + return err; 951 + sprintf(str, "%s Volume", ptr->name); 952 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 953 + SNDRV_MIXER_OSS_ITEM_GVOLUME); 954 + if (err) 955 + return err; 956 + sprintf(str, "%s Playback Switch", ptr->name); 957 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 958 + SNDRV_MIXER_OSS_ITEM_PSWITCH); 959 + if (err) 960 + return err; 961 + sprintf(str, "%s Playback Route", ptr->name); 962 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 963 + SNDRV_MIXER_OSS_ITEM_PROUTE); 964 + if (err) 965 + return err; 966 + sprintf(str, "%s Playback Volume", ptr->name); 967 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 968 + SNDRV_MIXER_OSS_ITEM_PVOLUME); 969 + if (err) 970 + return err; 971 + sprintf(str, "%s Capture Switch", ptr->name); 972 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 973 + SNDRV_MIXER_OSS_ITEM_CSWITCH); 974 + if (err) 975 + return err; 976 + sprintf(str, "%s Capture Route", ptr->name); 977 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 978 + SNDRV_MIXER_OSS_ITEM_CROUTE); 979 + if (err) 980 + return err; 981 + sprintf(str, "%s Capture Volume", ptr->name); 982 + err = snd_mixer_oss_build_test(mixer, slot, str, ptr->index, 983 + SNDRV_MIXER_OSS_ITEM_CVOLUME); 984 + if (err) 985 + return err; 986 + 987 + return 0; 988 + } 989 + 990 /* 991 * build an OSS mixer element. 992 * ptr_allocated means the entry is dynamically allocated (change via proc file). ··· 944 945 memset(&slot, 0, sizeof(slot)); 946 memset(slot.numid, 0xff, sizeof(slot.numid)); /* ID_UNKNOWN */ 947 + if (snd_mixer_oss_build_test_all(mixer, ptr, &slot)) 948 return 0; 949 down_read(&mixer->card->controls_rwsem); 950 if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) {