Patch -i support from Berhnard Fischer.

This commit is contained in:
Rob Landley
2005-09-01 03:02:23 +00:00
parent e0537f6194
commit 078bacf1e9
3 changed files with 26 additions and 14 deletions

View File

@@ -107,14 +107,24 @@ extern int patch_main(int argc, char **argv)
{
unsigned int patch_level = -1;
char *patch_line;
int ret = 0;
int ret;
FILE *patch_file = NULL;
/* Handle 'p' option */
if (argv[1] && (argv[1][0] == '-') && (argv[1][1] == 'p')) {
patch_level = atoi(&argv[1][2]);
{
char *p, *i;
ret = bb_getopt_ulflags(argc, argv, "p:i:", &p, &i);
if (ret & 1)
patch_level = bb_xgetularg10_bnd(p, -1, USHRT_MAX);
if (ret & 2) {
patch_file = bb_xfopen(i, "r");
}
ret = 0;
}
patch_line = bb_get_line_from_file(stdin);
if (!patch_file)
patch_file = stdin;
patch_line = bb_get_line_from_file(patch_file);
while (patch_line) {
FILE *src_stream;
FILE *dst_stream;
@@ -133,14 +143,14 @@ extern int patch_main(int argc, char **argv)
*/
while (patch_line && strncmp(patch_line, "--- ", 4) != 0) {
free(patch_line);
patch_line = bb_get_line_from_file(stdin);
patch_line = bb_get_line_from_file(patch_file);
}
/* Extract the filename used before the patch was generated */
original_filename = extract_filename(patch_line, patch_level);
free(patch_line);
patch_line = bb_get_line_from_file(stdin);
patch_line = bb_get_line_from_file(patch_file);
if (strncmp(patch_line, "+++ ", 4) != 0) {
ret = 2;
bb_error_msg("Invalid patch");
@@ -183,7 +193,7 @@ extern int patch_main(int argc, char **argv)
printf("patching file %s\n", new_filename);
/* Handle each hunk */
patch_line = bb_get_line_from_file(stdin);
patch_line = bb_get_line_from_file(patch_file);
while (patch_line) {
unsigned int count;
unsigned int src_beg_line;
@@ -214,7 +224,7 @@ extern int patch_main(int argc, char **argv)
}
hunk_offset_start = src_cur_line;
while ((patch_line = bb_get_line_from_file(stdin)) != NULL) {
while ((patch_line = bb_get_line_from_file(patch_file)) != NULL) {
if ((*patch_line == '-') || (*patch_line == ' ')) {
char *src_line = NULL;
if (src_stream) {