vmstate: add VMS_MUST_EXIST
Can be used to verify a required field exists or validate state in some other way. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> (cherry picked from commit5bf81c8d63) Conflicts: vmstate.c *removed dependency onb6fcfa59(Move VMState code to vmstate.c) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									25062a7521
								
							
						
					
					
						commit
						a075a3a27e
					
				| 
						 | 
					@ -100,6 +100,7 @@ enum VMStateFlags {
 | 
				
			||||||
    VMS_MULTIPLY         = 0x200,  /* multiply "size" field by field_size */
 | 
					    VMS_MULTIPLY         = 0x200,  /* multiply "size" field by field_size */
 | 
				
			||||||
    VMS_VARRAY_UINT8     = 0x400,  /* Array with size in uint8_t field*/
 | 
					    VMS_VARRAY_UINT8     = 0x400,  /* Array with size in uint8_t field*/
 | 
				
			||||||
    VMS_VARRAY_UINT32    = 0x800,  /* Array with size in uint32_t field*/
 | 
					    VMS_VARRAY_UINT32    = 0x800,  /* Array with size in uint32_t field*/
 | 
				
			||||||
 | 
					    VMS_MUST_EXIST       = 0x1000, /* Field must exist in input */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								savevm.c
								
								
								
								
							
							
						
						
									
										10
									
								
								savevm.c
								
								
								
								
							| 
						 | 
					@ -1762,6 +1762,10 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
 | 
				
			||||||
                    return ret;
 | 
					                    return ret;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (field->flags & VMS_MUST_EXIST) {
 | 
				
			||||||
 | 
					            fprintf(stderr, "Input validation failed: %s/%s\n",
 | 
				
			||||||
 | 
					                    vmsd->name, field->name);
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        field++;
 | 
					        field++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1802,6 +1806,12 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
 | 
				
			||||||
                    field->info->put(f, addr, size);
 | 
					                    field->info->put(f, addr, size);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            if (field->flags & VMS_MUST_EXIST) {
 | 
				
			||||||
 | 
					                fprintf(stderr, "Output state validation failed: %s/%s\n",
 | 
				
			||||||
 | 
					                        vmsd->name, field->name);
 | 
				
			||||||
 | 
					                assert(!(field->flags & VMS_MUST_EXIST));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        field++;
 | 
					        field++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue