From 3c55dcabbf8d853b2bfcf184802c64889c0ca250 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 14 Nov 2002 08:48:29 +0000 Subject: [PATCH] Sverker Wiberg Opening the patch ROM on GusPnP always fails: * iwffff_get_rom_header() gets the card directory wrong when opening the ROM file. * iwffff_get_rom_header() forgets that the ROM header is padded to 512 bytes length. I also fixed some small stuff: * Tried to improve snd_instr_iwffff_open_rom()'s doxygen comment. The commingling of file-system files (denoted by names) and ROM-embedded files (numbers) is somewhat confusing --- I'm still looking for the right words to explain it. * Oh, and snd_instr_iwffff_open_rom() returns -EPERM for invalid bank/file values --- it means the wrong thing: ENOENT would be better. --- src/instr/iwffff.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/instr/iwffff.c b/src/instr/iwffff.c index 7ed46a2f..c2b401c7 100644 --- a/src/instr/iwffff.c +++ b/src/instr/iwffff.c @@ -39,8 +39,8 @@ #ifndef DOC_HIDDEN -#define IW_RAM_FILE "/proc/asound/%i/gus-ram-%i" -#define IW_ROM_FILE "/proc/asound/%i/gus-rom-%i" +#define IW_RAM_FILE "/proc/asound/card%i/gus-ram-%i" +#define IW_ROM_FILE "/proc/asound/card%i/gus-rom-%i" #undef IW_ROM_DEBUG @@ -208,6 +208,10 @@ static int iwffff_get_rom_header(int card, int bank, iwffff_rom_header_t *header close(fd); return -EIO; } + if (lseek(fd, IWFFFF_ROM_HDR_SIZE, SEEK_SET) < 0) { + close(fd); + return -errno; + } return fd; } @@ -276,7 +280,10 @@ int snd_instr_iwffff_open(snd_iwffff_handle_t **handle, const char *name_fff, co * \param card card number * \param bank ROM bank number (0-3) * \param file ROM file number - * \return 0 on success otherwise a negative error code + * \return 0 on success otherwise a negative \c errno code + * + * Opens \a file in \a bank in the ROM image of card \a card, and + * writes a handle pointer into \a *handle. */ int snd_instr_iwffff_open_rom(snd_iwffff_handle_t **handle, int card, int bank, int file) { @@ -291,7 +298,7 @@ int snd_instr_iwffff_open_rom(snd_iwffff_handle_t **handle, int card, int bank, *handle = NULL; idx = 0; if (bank > 3 || file > 255) - return -1; + return -ENOENT; fd = iwffff_get_rom_header(card, bank, &header); if (fd < 0) return fd; -- 2.47.1