mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pw-cat: improve midi errors
EINVAL for invalid events and file ENOENT for unknown event
This commit is contained in:
		
							parent
							
								
									8ecef35e80
								
							
						
					
					
						commit
						9bec2e5d8a
					
				
					 2 changed files with 9 additions and 6 deletions
				
			
		| 
						 | 
					@ -59,7 +59,7 @@ static int read_mthd(struct midi_file *mf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (mf_avail(mf) < 14 ||
 | 
						if (mf_avail(mf) < 14 ||
 | 
				
			||||||
	    memcmp(mf->p, "MThd", 4) != 0)
 | 
						    memcmp(mf->p, "MThd", 4) != 0)
 | 
				
			||||||
		return -EIO;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mf->length = parse_be32(mf->p + 4);
 | 
						mf->length = parse_be32(mf->p + 4);
 | 
				
			||||||
	mf->format = parse_be16(mf->p + 8);
 | 
						mf->format = parse_be16(mf->p + 8);
 | 
				
			||||||
| 
						 | 
					@ -94,7 +94,7 @@ static int read_mtrk(struct midi_file *mf, struct midi_track *track)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (mf_avail(mf) < 8 ||
 | 
						if (mf_avail(mf) < 8 ||
 | 
				
			||||||
	    memcmp(mf->p, "MTrk", 4) != 0)
 | 
						    memcmp(mf->p, "MTrk", 4) != 0)
 | 
				
			||||||
		return -EIO;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	track->data = track->p = mf->p + 8;
 | 
						track->data = track->p = mf->p + 8;
 | 
				
			||||||
	track->size = parse_be32(mf->p + 4);
 | 
						track->size = parse_be32(mf->p + 4);
 | 
				
			||||||
| 
						 | 
					@ -162,7 +162,7 @@ static int peek_event(struct midi_file *mf, struct midi_track *tr, struct midi_e
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 0x51:
 | 
							case 0x51:
 | 
				
			||||||
			if (size < 3)
 | 
								if (size < 3)
 | 
				
			||||||
				return -EIO;
 | 
									return -EINVAL;
 | 
				
			||||||
			mf->tick_sec = event->sec;
 | 
								mf->tick_sec = event->sec;
 | 
				
			||||||
			mf->tick_start = tr->tick;
 | 
								mf->tick_start = tr->tick;
 | 
				
			||||||
			mf->tempo = (tr->p[0]<<16) | (tr->p[1]<<8) | tr->p[2];
 | 
								mf->tempo = (tr->p[0]<<16) | (tr->p[1]<<8) | tr->p[2];
 | 
				
			||||||
| 
						 | 
					@ -176,7 +176,7 @@ static int peek_event(struct midi_file *mf, struct midi_track *tr, struct midi_e
 | 
				
			||||||
			return res;
 | 
								return res;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return -EIO;
 | 
							return -ENOENT;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	event->data = tr->p;
 | 
						event->data = tr->p;
 | 
				
			||||||
	tr->p = save;
 | 
						tr->p = save;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1031,8 +1031,11 @@ static int setup_midifile(struct data *data)
 | 
				
			||||||
		close(data->midi.fd);
 | 
							close(data->midi.fd);
 | 
				
			||||||
		return -errno;
 | 
							return -errno;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if ((res = midi_file_init(&data->midi.mf, "r", data->midi.mem, data->midi.st.st_size)) < 0)
 | 
						if ((res = midi_file_init(&data->midi.mf, "r", data->midi.mem, data->midi.st.st_size)) < 0) {
 | 
				
			||||||
		return -errno;
 | 
							fprintf(stderr, "error: can't read midi file '%s': %s\n", data->filename, spa_strerror(res));
 | 
				
			||||||
 | 
							close(data->midi.fd);
 | 
				
			||||||
 | 
							return res;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data->verbose)
 | 
						if (data->verbose)
 | 
				
			||||||
		printf("opened file \"%s\" format %08x ntracks:%d div:%d\n",
 | 
							printf("opened file \"%s\" format %08x ntracks:%d div:%d\n",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue