@@ -46,6 +46,8 @@ int dock_count_instances(object *objp);
4646
4747object *dock_get_first_docked_object (object *objp)
4848{
49+ Assert (objp != NULL );
50+
4951 // are we docked?
5052 if (!object_is_docked (objp))
5153 return NULL ;
@@ -55,6 +57,8 @@ object *dock_get_first_docked_object(object *objp)
5557
5658bool dock_check_docked_one_on_one (object *objp)
5759{
60+ Assert (objp != NULL );
61+
5862 // we must be docked
5963 if (!object_is_docked (objp))
6064 return false ;
@@ -76,11 +80,14 @@ bool dock_check_docked_one_on_one(object *objp)
7680
7781int dock_count_direct_docked_objects (object *objp)
7882{
83+ Assert (objp != NULL );
7984 return dock_count_instances (objp);
8085}
8186
8287int dock_count_total_docked_objects (object *objp)
8388{
89+ Assert (objp != NULL );
90+
8491 dock_function_info dfi;
8592
8693 dock_evaluate_all_docked_objects (objp, &dfi, dock_count_total_docked_objects_helper);
@@ -90,11 +97,17 @@ int dock_count_total_docked_objects(object *objp)
9097
9198bool dock_check_find_direct_docked_object (object *objp, object *other_objp)
9299{
100+ Assert (objp != NULL );
101+ Assert (other_objp != NULL );
102+
93103 return (dock_find_instance (objp, other_objp) != NULL );
94104}
95105
96106bool dock_check_find_docked_object (object *objp, object *other_objp)
97107{
108+ Assert (objp != NULL );
109+ Assert (other_objp != NULL );
110+
98111 dock_function_info dfi;
99112 dfi.parameter_variables .objp_value = other_objp;
100113
@@ -105,6 +118,8 @@ bool dock_check_find_docked_object(object *objp, object *other_objp)
105118
106119object *dock_find_object_at_dockpoint (object *objp, int dockpoint)
107120{
121+ Assert (objp != NULL );
122+
108123 dock_instance *result = dock_find_instance (objp, dockpoint);
109124
110125 if (result == NULL )
@@ -115,6 +130,9 @@ object *dock_find_object_at_dockpoint(object *objp, int dockpoint)
115130
116131int dock_find_dockpoint_used_by_object (object *objp, object *other_objp)
117132{
133+ Assert (objp != NULL );
134+ Assert (other_objp != NULL );
135+
118136 dock_instance *result = dock_find_instance (objp, other_objp);
119137
120138 if (result == NULL )
@@ -125,6 +143,9 @@ int dock_find_dockpoint_used_by_object(object *objp, object *other_objp)
125143
126144void dock_calc_docked_center (vec3d *dest, object *objp)
127145{
146+ Assert (dest != NULL );
147+ Assert (objp != NULL );
148+
128149 vm_vec_zero (dest);
129150
130151 dock_function_info dfi;
@@ -138,6 +159,9 @@ void dock_calc_docked_center(vec3d *dest, object *objp)
138159
139160void dock_calc_docked_center_of_mass (vec3d *dest, object *objp)
140161{
162+ Assert (dest != NULL );
163+ Assert (objp != NULL );
164+
141165 vm_vec_zero (dest);
142166
143167 dock_function_info dfi;
@@ -151,6 +175,8 @@ void dock_calc_docked_center_of_mass(vec3d *dest, object *objp)
151175
152176float dock_calc_total_docked_mass (object *objp)
153177{
178+ Assert (objp != NULL );
179+
154180 dock_function_info dfi;
155181
156182 dock_evaluate_all_docked_objects (objp, &dfi, dock_calc_total_docked_mass_helper);
@@ -160,6 +186,8 @@ float dock_calc_total_docked_mass(object *objp)
160186
161187float dock_calc_max_cross_sectional_radius_perpendicular_to_axis (object *objp, axis_type axis)
162188{
189+ Assert (objp != NULL );
190+
163191 vec3d local_line_end;
164192 vec3d *world_line_start, world_line_end;
165193 dock_function_info dfi;
@@ -210,6 +238,8 @@ float dock_calc_max_cross_sectional_radius_perpendicular_to_axis(object *objp, a
210238
211239float dock_calc_max_semilatus_rectum_parallel_to_axis (object *objp, axis_type axis)
212240{
241+ Assert (objp != NULL );
242+
213243 vec3d local_line_end;
214244 vec3d *world_line_start, world_line_end;
215245 dock_function_info dfi;
@@ -260,6 +290,8 @@ float dock_calc_max_semilatus_rectum_parallel_to_axis(object *objp, axis_type ax
260290
261291float dock_calc_docked_fspeed (object *objp)
262292{
293+ Assert (objp != NULL );
294+
263295 // *sigh*... the docked fspeed is simply the max fspeed of all docked objects
264296 dock_function_info dfi;
265297 dock_evaluate_all_docked_objects (objp, &dfi, dock_find_max_fspeed_helper);
@@ -268,6 +300,8 @@ float dock_calc_docked_fspeed(object *objp)
268300
269301float dock_calc_docked_speed (object *objp)
270302{
303+ Assert (objp != NULL );
304+
271305 // ditto with speed
272306 dock_function_info dfi;
273307 dock_evaluate_all_docked_objects (objp, &dfi, dock_find_max_speed_helper);
@@ -370,6 +404,8 @@ void dock_evaluate_tree(object *objp, dock_function_info *infop, void (*function
370404
371405void dock_move_docked_objects (object *objp)
372406{
407+ Assert (objp != NULL );
408+
373409 if ((objp->type != OBJ_SHIP) && (objp->type != OBJ_START))
374410 return ;
375411
@@ -601,6 +637,9 @@ void dock_find_max_speed_helper(object *objp, dock_function_info *infop)
601637// dock management functions -------------------------------------------------------------------------------------
602638void dock_dock_objects (object *objp1, int dockpoint1, object *objp2, int dockpoint2)
603639{
640+ Assert (objp1 != NULL );
641+ Assert (objp2 != NULL );
642+
604643#ifndef NDEBUG
605644 if ((dock_find_instance (objp1, objp2) != NULL ) || (dock_find_instance (objp2, objp1) != NULL ))
606645 {
@@ -620,18 +659,26 @@ void dock_dock_objects(object *objp1, int dockpoint1, object *objp2, int dockpoi
620659
621660void dock_undock_objects (object *objp1, object *objp2)
622661{
623- #ifndef NDEBUG
624- if ((dock_find_instance (objp1, objp2) == NULL ) || (dock_find_instance (objp2, objp1) == NULL ))
625- {
626- Error (LOCATION, " Trying to undock an object that isn't docked!\n " );
627- }
628- #endif
662+ Assert (objp1 != NULL );
663+ Assert (objp2 != NULL );
629664
630665 // remove objects from each others' dock lists
631666 dock_remove_instance (objp1, objp2);
632667 dock_remove_instance (objp2, objp1);
633668}
634669
670+ void dock_undock_all (object *objp)
671+ {
672+ Assert (objp != NULL );
673+
674+ while (object_is_docked (objp))
675+ {
676+ object* dockee = dock_get_first_docked_object (objp);
677+
678+ dock_undock_objects (objp, dockee);
679+ }
680+ }
681+
635682// dock list functions -------------------------------------------------------------------------------------------
636683bool dock_check_assume_hub ()
637684{
@@ -719,11 +766,18 @@ void dock_remove_instance(object *objp, object *other_objp)
719766 // delete it
720767 vm_free (ptr);
721768 }
769+ else
770+ {
771+ // Trigger an assertion, we can recover from this one, thankfully.
772+ Assertion (false , " Tried to undock an object that isn't docked!\n " );
773+ }
722774}
723775
724776// just free the list without worrying about undocking anything
725777void dock_free_dock_list (object *objp)
726778{
779+ Assert (objp != NULL );
780+
727781 while (objp->dock_list != NULL )
728782 {
729783 dock_instance *ptr = objp->dock_list ;
0 commit comments