- break;
- }
- case 'g': /* Replace pattern space with hold space */
- free(pattern_space);
- pattern_space = bb_xstrdup(bbg.hold_space ? bbg.hold_space : "");
- break;
- case 'G': /* Append newline and hold space to pattern space */
- {
- int pattern_space_size = 2;
- int hold_space_size = 0;
-
- if (pattern_space)
- pattern_space_size += strlen(pattern_space);
- if (bbg.hold_space)
- hold_space_size = strlen(bbg.hold_space);
- pattern_space = xrealloc(pattern_space,
- pattern_space_size + hold_space_size);
- if (pattern_space_size == 2) pattern_space[0]=0;
- strcat(pattern_space, "\n");
- if (bbg.hold_space)
- strcat(pattern_space, bbg.hold_space);
- no_newline=0;
-
- break;
- }
- case 'h': /* Replace hold space with pattern space */
- free(bbg.hold_space);
- bbg.hold_space = bb_xstrdup(pattern_space);
- break;
- case 'H': /* Append newline and pattern space to hold space */
- {
- int hold_space_size = 2;
- int pattern_space_size = 0;
-
- if (bbg.hold_space)
- hold_space_size += strlen(bbg.hold_space);
- if (pattern_space)
- pattern_space_size = strlen(pattern_space);
- bbg.hold_space = xrealloc(bbg.hold_space,
- hold_space_size + pattern_space_size);
-
- if (hold_space_size == 2) *bbg.hold_space=0;
- strcat(bbg.hold_space, "\n");
- if (pattern_space) strcat(bbg.hold_space, pattern_space);
-
- break;
- }
- case 'x': /* Exchange hold and pattern space */
- {
- char *tmp = pattern_space;
- pattern_space = bbg.hold_space;
- no_newline=0;
- bbg.hold_space = tmp;
- break;
- }
- }