-/* $RCSfile: array.c,v $$Revision: 4.0.1.1 $$Date: 91/06/07 10:19:08 $
+/* $RCSfile: array.c,v $$Revision: 4.0.1.2 $$Date: 91/11/05 16:00:14 $
*
* Copyright (c) 1991, Larry Wall
*
* License or the Artistic License, as specified in the README file.
*
* $Log: array.c,v $
+ * Revision 4.0.1.2 91/11/05 16:00:14 lwall
+ * patch11: random cleanup
+ * patch11: passing non-existend array elements to subrouting caused core dump
+ *
* Revision 4.0.1.1 91/06/07 10:19:08 lwall
* patch4: new copyright notice
*
ar->ary_max = newmax;
}
}
- if ((ar->ary_flags & ARF_REAL) && ar->ary_fill < key) {
- while (++ar->ary_fill < key) {
- if (ar->ary_array[ar->ary_fill] != Nullstr) {
- str_free(ar->ary_array[ar->ary_fill]);
- ar->ary_array[ar->ary_fill] = Nullstr;
+ if (ar->ary_flags & ARF_REAL) {
+ if (ar->ary_fill < key) {
+ while (++ar->ary_fill < key) {
+ if (ar->ary_array[ar->ary_fill] != Nullstr) {
+ str_free(ar->ary_array[ar->ary_fill]);
+ ar->ary_array[ar->ary_fill] = Nullstr;
+ }
}
}
+ retval = (ar->ary_array[key] != Nullstr);
+ if (retval)
+ str_free(ar->ary_array[key]);
}
- retval = (ar->ary_array[key] != Nullstr);
- if (retval && (ar->ary_flags & ARF_REAL))
- str_free(ar->ary_array[key]);
+ else
+ retval = 0;
ar->ary_array[key] = val;
return retval;
}
ar->ary_max = size - 1;
ar->ary_flags = 0;
while (size--) {
- (*strp++)->str_pok &= ~SP_TEMP;
+ if (*strp)
+ (*strp)->str_pok &= ~SP_TEMP;
+ strp++;
}
return ar;
}
if (!ar || !(ar->ary_flags & ARF_REAL) || ar->ary_max < 0)
return;
+ /*SUPPRESS 560*/
if (key = ar->ary_array - ar->ary_alloc) {
ar->ary_max += key;
ar->ary_array -= key;
if (!ar)
return;
+ /*SUPPRESS 560*/
if (key = ar->ary_array - ar->ary_alloc) {
ar->ary_max += key;
ar->ary_array -= key;
#ifdef BUGGY_MSC5
# pragma loop_opt(off) /* don't loop-optimize the following code */
#endif /* BUGGY_MSC5 */
- for (i = ar->ary_fill; i >= 0; i--) {
+ for (i = ar->ary_fill - num; i >= 0; i--) {
*dstr-- = *sstr--;
#ifdef BUGGY_MSC5
# pragma loop_opt() /* loop-optimization back to command-line setting */