+2011-04-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * sound.c: Don't assume sizes fit in 'int'.
+ (struct sound_device.period_size, alsa_period_size):
+ Return size_t, not int.
+ (struct sound_device.write, vox_write, alsa_write):
+ Accept size_t, not int.
+ (wav_play, au_play): Use size_t to store sizes, and ssize_t to
+ record read return values.
+
2011-04-12 Andreas Schwab <schwab@linux-m68k.org>
* charset.c (Fclear_charset_maps): Use xfree instead of free.
/* Return a preferred data size in bytes to be sent to write (below)
each time. 2048 is used if this is NULL. */
- int (* period_size) (struct sound_device *sd);
+ size_t (* period_size) (struct sound_device *sd);
/* Write NYBTES bytes from BUFFER to device SD. */
void (* write) (struct sound_device *sd, const char *buffer,
- int nbytes);
+ size_t nbytes);
/* A place for devices to store additional data. */
void *data;
static void vox_close (struct sound_device *sd);
static void vox_choose_format (struct sound_device *, struct sound *);
static int vox_init (struct sound_device *);
-static void vox_write (struct sound_device *, const char *, int);
+static void vox_write (struct sound_device *, const char *, size_t);
static void find_sound_type (struct sound *);
static u_int32_t le2hl (u_int32_t);
static u_int16_t le2hs (u_int16_t);
else
{
char *buffer;
- int nbytes = 0;
- int blksize = sd->period_size ? sd->period_size (sd) : 2048;
- int data_left = header->data_length;
+ ssize_t nbytes = 0;
+ size_t blksize = sd->period_size ? sd->period_size (sd) : 2048;
+ size_t data_left = header->data_length;
buffer = (char *) alloca (blksize);
lseek (s->fd, sizeof *header, SEEK_SET);
SBYTES (s->data) - header->data_offset);
else
{
- int blksize = sd->period_size ? sd->period_size (sd) : 2048;
+ size_t blksize = sd->period_size ? sd->period_size (sd) : 2048;
char *buffer;
- int nbytes;
+ ssize_t nbytes;
/* Seek */
lseek (s->fd, header->data_offset, SEEK_SET);
/* Write NBYTES bytes from BUFFER to device SD. */
static void
-vox_write (struct sound_device *sd, const char *buffer, int nbytes)
+vox_write (struct sound_device *sd, const char *buffer, size_t nbytes)
{
- ssize_t nwritten = emacs_write (sd->fd, buffer, nbytes);
- if (nwritten < 0)
+ if (emacs_write (sd->fd, buffer, nbytes) != nbytes)
sound_perror ("Error writing to sound device");
}
alsa_sound_perror (file, err);
}
-static int
+static size_t
alsa_period_size (struct sound_device *sd)
{
struct alsa_params *p = (struct alsa_params *) sd->data;
/* Write NBYTES bytes from BUFFER to device SD. */
static void
-alsa_write (struct sound_device *sd, const char *buffer, int nbytes)
+alsa_write (struct sound_device *sd, const char *buffer, size_t nbytes)
{
struct alsa_params *p = (struct alsa_params *) sd->data;
/* The the third parameter to snd_pcm_writei is frames, not bytes. */
int fact = snd_pcm_format_size (sd->format, 1) * sd->channels;
- int nwritten = 0;
+ size_t nwritten = 0;
int err;
while (nwritten < nbytes)