Merge lp:~ubuntu-43/undrop-for-innodb/pierre into lp:undrop-for-innodb
- pierre
- Merge into trunk
Proposed by
Aleksandr Kuzminsky
Status: | Merged |
---|---|
Merged at revision: | 33 |
Proposed branch: | lp:~ubuntu-43/undrop-for-innodb/pierre |
Merge into: | lp:undrop-for-innodb |
Diff against target: |
303 lines (+73/-36) (has conflicts) 3 files modified
Makefile (+10/-6) c_parser.c (+45/-25) print_data.c (+18/-5) Text conflict in c_parser.c Text conflict in print_data.c |
To merge this branch: | bzr merge lp:~ubuntu-43/undrop-for-innodb/pierre |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Aleksandr Kuzminsky | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Makefile' | |||
2 | --- Makefile 2014-09-03 23:24:55 +0000 | |||
3 | +++ Makefile 2014-10-19 02:20:41 +0000 | |||
4 | @@ -3,19 +3,23 @@ | |||
5 | 3 | SRCS = stream_parser.c include/mysql_def.h c_parser.c | 3 | SRCS = stream_parser.c include/mysql_def.h c_parser.c |
6 | 4 | INC_PATH = -I./include | 4 | INC_PATH = -I./include |
7 | 5 | LIBS = -pthread -lm | 5 | LIBS = -pthread -lm |
8 | 6 | BINDIR = ./bin | ||
9 | 6 | 7 | ||
10 | 7 | CC ?= gcc | 8 | CC ?= gcc |
11 | 9 | INSTALL ?=install | ||
12 | 8 | YACC = bison | 10 | YACC = bison |
13 | 9 | LEX = flex | 11 | LEX = flex |
14 | 10 | 12 | ||
16 | 11 | CFLAGS += -g -O3 | 13 | CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -g -O3 -pipe -fomit-frame-pointer -march=k8 |
17 | 14 | #LDFLAGS=-static | ||
18 | 15 | INSTALLFLAGS ?=-s | ||
19 | 12 | CentOS5 = $(findstring .el5,$(shell cat /proc/version)) | 16 | CentOS5 = $(findstring .el5,$(shell cat /proc/version)) |
20 | 13 | ifeq ($(CentOS5), .el5) | 17 | ifeq ($(CentOS5), .el5) |
21 | 14 | CFLAGS += -DCentOS5 | 18 | CFLAGS += -DCentOS5 |
22 | 15 | endif | 19 | endif |
23 | 16 | 20 | ||
24 | 17 | all: $(TARGETS) | 21 | all: $(TARGETS) |
26 | 18 | 22 | ||
27 | 19 | debug: LEX_DEBUG = -d | 23 | debug: LEX_DEBUG = -d |
28 | 20 | debug: YACC_DEBUG = -r all | 24 | debug: YACC_DEBUG = -r all |
29 | 21 | debug: CFLAGS += -DDEBUG -DSTREAM_PARSER_DEBUG | 25 | debug: CFLAGS += -DDEBUG -DSTREAM_PARSER_DEBUG |
30 | @@ -25,7 +29,7 @@ | |||
31 | 25 | $(CC) $(CFLAGS) $(INC_PATH) -c $< | 29 | $(CC) $(CFLAGS) $(INC_PATH) -c $< |
32 | 26 | 30 | ||
33 | 27 | stream_parser: stream_parser.o | 31 | stream_parser: stream_parser.o |
35 | 28 | $(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) $(LIBS) $< -o $@ | 32 | $(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) $(LIBS) $(LDFLAGS) $< -o $@ |
36 | 29 | 33 | ||
37 | 30 | sql_parser.o: sql_parser.c | 34 | sql_parser.o: sql_parser.c |
38 | 31 | $(CC) $(CFLAGS) $(INC_PATH) -c $< | 35 | $(CC) $(CFLAGS) $(INC_PATH) -c $< |
39 | @@ -49,17 +53,17 @@ | |||
40 | 49 | $(CC) $(CFLAGS) $(INC_PATH) -c $< | 53 | $(CC) $(CFLAGS) $(INC_PATH) -c $< |
41 | 50 | 54 | ||
42 | 51 | c_parser: sql_parser.o c_parser.o tables_dict.o print_data.o check_data.o | 55 | c_parser: sql_parser.o c_parser.o tables_dict.o print_data.o check_data.o |
44 | 52 | $(CC) $(CFLAGS) $(INC_PATH) $(LIB_PATH) $^ -o $@ $(LIBS) | 56 | $(CC) $(CFLAGS) $(LDFLAGS) $(INC_PATH) $(LIB_PATH) $^ -o $@ $(LIBS) |
45 | 53 | 57 | ||
46 | 54 | innochecksum_changer: innochecksum.c include/innochecksum.h | 58 | innochecksum_changer: innochecksum.c include/innochecksum.h |
48 | 55 | $(CC) $(CFLAGS) $(INC_PATH) -o $@ $< | 59 | $(CC) $(CFLAGS) $(LDFLAGS) $(INC_PATH) -o $@ $< |
49 | 56 | 60 | ||
50 | 57 | sys_parser: sys_parser.c | 61 | sys_parser: sys_parser.c |
51 | 58 | @ which mysql_config || (echo "sys_parser needs mysql development package( either -devel or -dev)"; exit -1) | 62 | @ which mysql_config || (echo "sys_parser needs mysql development package( either -devel or -dev)"; exit -1) |
52 | 59 | $(CC) `mysql_config --cflags` `mysql_config --libs` -o $@ $< | 63 | $(CC) `mysql_config --cflags` `mysql_config --libs` -o $@ $< |
53 | 60 | 64 | ||
54 | 61 | install: $(TARGETS) | 65 | install: $(TARGETS) |
56 | 62 | $(INSTALL) $(INSTALLFLAGS) $(TARGETS) $(BINDIR)/$(TARGETS) | 66 | $(INSTALL) $(INSTALLFLAGS) $(TARGETS) $(BINDIR) |
57 | 63 | 67 | ||
58 | 64 | clean: | 68 | clean: |
59 | 65 | rm -f $(OBJECTS) $(TARGETS) lex.yy.c sql_parser.c sql_parser.output sys_parser | 69 | rm -f $(OBJECTS) $(TARGETS) lex.yy.c sql_parser.c sql_parser.output sys_parser |
60 | 66 | 70 | ||
61 | === modified file 'c_parser.c' | |||
62 | --- c_parser.c 2014-10-07 22:51:39 +0000 | |||
63 | +++ c_parser.c 2014-10-19 02:20:41 +0000 | |||
64 | @@ -89,12 +89,13 @@ | |||
65 | 89 | int use_filter_id = 0; | 89 | int use_filter_id = 0; |
66 | 90 | 90 | ||
67 | 91 | FILE* f_result; | 91 | FILE* f_result; |
68 | 92 | FILE* f_sql; | ||
69 | 92 | 93 | ||
70 | 93 | extern int load_table(char*); | 94 | extern int load_table(char*); |
71 | 94 | 95 | ||
72 | 95 | inline void error(char *msg) { | 96 | inline void error(char *msg) { |
75 | 96 | printf("Error: %s\n", msg); | 97 | fprintf(stderr, "Error: %s\n", msg); |
76 | 97 | exit(1); | 98 | exit(1); |
77 | 98 | } | 99 | } |
78 | 99 | 100 | ||
79 | 100 | 101 | ||
80 | @@ -612,7 +613,7 @@ | |||
81 | 612 | } | 613 | } |
82 | 613 | fprintf(f_result, ", Records list: %s", is_page_valid? "Valid": "Invalid"); | 614 | fprintf(f_result, ", Records list: %s", is_page_valid? "Valid": "Invalid"); |
83 | 614 | expected_records_inheader = mach_read_from_2(page + PAGE_HEADER + PAGE_N_RECS); | 615 | expected_records_inheader = mach_read_from_2(page + PAGE_HEADER + PAGE_N_RECS); |
85 | 615 | fprintf(f_result, ", Expected records: (%u %lu)", expected_records, expected_records_inheader); | 616 | fprintf(f_result, ", Expected records: (%u %u)", expected_records, expected_records_inheader); |
86 | 616 | fprintf(f_result, "\n"); | 617 | fprintf(f_result, "\n"); |
87 | 617 | if (debug) printf("Starting offset: %lu (%lX). Checking %d table definitions.\n", offset, offset, table_definitions_cnt); | 618 | if (debug) printf("Starting offset: %lu (%lX). Checking %d table definitions.\n", offset, offset, table_definitions_cnt); |
88 | 618 | 619 | ||
89 | @@ -692,8 +693,8 @@ | |||
90 | 692 | while ((read_bytes = read(fn, page, UNIV_PAGE_SIZE)) == UNIV_PAGE_SIZE) { | 693 | while ((read_bytes = read(fn, page, UNIV_PAGE_SIZE)) == UNIV_PAGE_SIZE) { |
91 | 693 | pos = lseek(fn, 0, SEEK_CUR); | 694 | pos = lseek(fn, 0, SEEK_CUR); |
92 | 694 | 695 | ||
95 | 695 | if (pos % (UNIV_PAGE_SIZE * 10) == 0) { | 696 | if (pos % (UNIV_PAGE_SIZE * 512) == 0) { |
96 | 696 | fprintf(stderr, "-- %.2f%% done\n", 100.0 * pos / st.st_size); | 697 | fprintf(f_sql, "-- %.2f%% done\n", 100.0 * pos / st.st_size); |
97 | 697 | } | 698 | } |
98 | 698 | 699 | ||
99 | 699 | if (deleted_pages_only) { | 700 | if (deleted_pages_only) { |
100 | @@ -746,6 +747,7 @@ | |||
101 | 746 | " -f <InnoDB page(s)> -- InnoDB page or directory with pages(all pages should have same index_id)\n" | 747 | " -f <InnoDB page(s)> -- InnoDB page or directory with pages(all pages should have same index_id)\n" |
102 | 747 | " -t <table.sql> -- CREATE statement of a table\n" | 748 | " -t <table.sql> -- CREATE statement of a table\n" |
103 | 748 | " -o <file> -- Save dump in this file. Otherwise print to stdout\n" | 749 | " -o <file> -- Save dump in this file. Otherwise print to stdout\n" |
104 | 750 | " -l <file> -- Save SQL statements in this file. Otherwise print to stderr\n" | ||
105 | 749 | " -h -- Print this help\n" | 751 | " -h -- Print this help\n" |
106 | 750 | " -d -- Process only those pages which potentially could have deleted records (default = NO)\n" | 752 | " -d -- Process only those pages which potentially could have deleted records (default = NO)\n" |
107 | 751 | " -D -- Recover deleted rows only (default = NO)\n" | 753 | " -D -- Recover deleted rows only (default = NO)\n" |
108 | @@ -770,12 +772,19 @@ | |||
109 | 770 | struct stat st; | 772 | struct stat st; |
110 | 771 | char src[256] = ""; | 773 | char src[256] = ""; |
111 | 772 | 774 | ||
113 | 773 | char buffer[16*1024]; | 775 | char buffer[BUFSIZ]; |
114 | 774 | setvbuf(stdout, buffer, _IOFBF, sizeof(buffer)); | 776 | setvbuf(stdout, buffer, _IOFBF, sizeof(buffer)); |
115 | 775 | 777 | ||
116 | 776 | f_result = stdout; | 778 | f_result = stdout; |
117 | 779 | f_sql = stderr; | ||
118 | 777 | char result_file[1024]; | 780 | char result_file[1024]; |
119 | 781 | <<<<<<< TREE | ||
120 | 778 | while ((ch = getopt(argc, argv, "t:456hdDUVf:T:b:p:o:i:")) != -1) { | 782 | while ((ch = getopt(argc, argv, "t:456hdDUVf:T:b:p:o:i:")) != -1) { |
121 | 783 | ======= | ||
122 | 784 | char sql_file[1024]; | ||
123 | 785 | |||
124 | 786 | while ((ch = getopt(argc, argv, "t:456hdDUVf:T:b:p:o:l:")) != -1) { | ||
125 | 787 | >>>>>>> MERGE-SOURCE | ||
126 | 779 | switch (ch) { | 788 | switch (ch) { |
127 | 780 | case 'd': | 789 | case 'd': |
128 | 781 | deleted_pages_only = 1; | 790 | deleted_pages_only = 1; |
129 | @@ -794,10 +803,21 @@ | |||
130 | 794 | exit(-1); | 803 | exit(-1); |
131 | 795 | } | 804 | } |
132 | 796 | break; | 805 | break; |
133 | 806 | <<<<<<< TREE | ||
134 | 797 | case 'i': | 807 | case 'i': |
135 | 798 | strncpy(path_ibdata, optarg, sizeof(path_ibdata)); | 808 | strncpy(path_ibdata, optarg, sizeof(path_ibdata)); |
136 | 799 | external_in_ibdata = 1; | 809 | external_in_ibdata = 1; |
137 | 800 | break; | 810 | break; |
138 | 811 | ======= | ||
139 | 812 | case 'l': | ||
140 | 813 | strncpy(sql_file, optarg, sizeof(sql_file)); | ||
141 | 814 | if(NULL == (f_sql = fopen(sql_file, "w"))){ | ||
142 | 815 | fprintf(stderr, "Can't open file %s for writing\n", sql_file); | ||
143 | 816 | exit(-1); | ||
144 | 817 | } | ||
145 | 818 | break; | ||
146 | 819 | |||
147 | 820 | >>>>>>> MERGE-SOURCE | ||
148 | 801 | case 't': | 821 | case 't': |
149 | 802 | if(load_table(optarg) != 0){ | 822 | if(load_table(optarg) != 0){ |
150 | 803 | fprintf(stderr, "Failed to parse table structure\n"); | 823 | fprintf(stderr, "Failed to parse table structure\n"); |
151 | @@ -882,63 +902,63 @@ | |||
152 | 882 | close(fn); | 902 | close(fn); |
153 | 883 | } | 903 | } |
154 | 884 | table_def_t *table = &(table_definitions[0]); | 904 | table_def_t *table = &(table_definitions[0]); |
157 | 885 | fprintf(stderr, "SET FOREIGN_KEY_CHECKS=0;\n"); | 905 | fprintf(f_sql, "SET FOREIGN_KEY_CHECKS=0;\n"); |
158 | 886 | fprintf(stderr, "LOAD DATA LOCAL INFILE '"); | 906 | fprintf(f_sql, "LOAD DATA LOCAL INFILE '"); |
159 | 887 | if(f_result == stdout){ | 907 | if(f_result == stdout){ |
161 | 888 | fprintf(stderr, "%s/dumps/%s/%s", getenv("PWD"), dump_prefix, table->name); | 908 | fprintf(f_sql, "%s/dumps/%s/%s", getenv("PWD"), dump_prefix, table->name); |
162 | 889 | } | 909 | } |
163 | 890 | else{ | 910 | else{ |
165 | 891 | fprintf(stderr, "%s", result_file); | 911 | fprintf(f_sql, "%s", result_file); |
166 | 892 | } | 912 | } |
168 | 893 | fprintf(stderr, "' REPLACE INTO TABLE `%s` FIELDS TERMINATED BY '\\t' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '%s\\t' ", table->name, table->name); | 913 | fprintf(f_sql, "' REPLACE INTO TABLE `%s` FIELDS TERMINATED BY '\\t' OPTIONALLY ENCLOSED BY '\"' LINES STARTING BY '%s\\t' ", table->name, table->name); |
169 | 894 | int i = 0; | 914 | int i = 0; |
170 | 895 | int comma = 0; | 915 | int comma = 0; |
171 | 896 | int has_set = 0; | 916 | int has_set = 0; |
173 | 897 | fprintf(stderr, "("); | 917 | fprintf(f_sql, "("); |
174 | 898 | for(i = 0; i < table->fields_count; i++) { | 918 | for(i = 0; i < table->fields_count; i++) { |
175 | 899 | if(table->fields[i].type == FT_INTERNAL) continue; | 919 | if(table->fields[i].type == FT_INTERNAL) continue; |
177 | 900 | if(comma) fprintf(stderr, ", "); | 920 | if(comma) fprintf(f_sql, ", "); |
178 | 901 | switch(table->fields[i].type){ | 921 | switch(table->fields[i].type){ |
179 | 902 | case FT_BLOB: | 922 | case FT_BLOB: |
180 | 903 | case FT_BIN: | 923 | case FT_BIN: |
182 | 904 | fprintf(stderr, "@var_%s", table->fields[i].name); | 924 | fprintf(f_sql, "@var_%s", table->fields[i].name); |
183 | 905 | has_set = 1; | 925 | has_set = 1; |
184 | 906 | break; | 926 | break; |
185 | 907 | case FT_BIT: | 927 | case FT_BIT: |
187 | 908 | fprintf(stderr, "@var_%s", table->fields[i].name); | 928 | fprintf(f_sql, "@var_%s", table->fields[i].name); |
188 | 909 | has_set = 1; | 929 | has_set = 1; |
189 | 910 | break; | 930 | break; |
190 | 911 | default: | 931 | default: |
192 | 912 | fprintf(stderr, "`%s`", table->fields[i].name); | 932 | fprintf(f_sql, "`%s`", table->fields[i].name); |
193 | 913 | } | 933 | } |
194 | 914 | comma = 1; | 934 | comma = 1; |
195 | 915 | } | 935 | } |
197 | 916 | fprintf(stderr, ")"); | 936 | fprintf(f_sql, ")"); |
198 | 917 | comma = 0; | 937 | comma = 0; |
199 | 918 | if(has_set){ | 938 | if(has_set){ |
201 | 919 | fprintf(stderr, "\nSET\n"); | 939 | fprintf(f_sql, "\nSET\n"); |
202 | 920 | for(i = 0; i < table->fields_count; i++) { | 940 | for(i = 0; i < table->fields_count; i++) { |
203 | 921 | if(table->fields[i].type == FT_INTERNAL) continue; | 941 | if(table->fields[i].type == FT_INTERNAL) continue; |
204 | 922 | switch(table->fields[i].type){ | 942 | switch(table->fields[i].type){ |
205 | 923 | case FT_BLOB: | 943 | case FT_BLOB: |
206 | 924 | case FT_BIN: | 944 | case FT_BIN: |
209 | 925 | if(comma) fprintf(stderr, ",\n"); | 945 | if(comma) fprintf(f_sql, ",\n"); |
210 | 926 | fprintf(stderr, " %s = UNHEX(@var_%s)", table->fields[i].name, table->fields[i].name); | 946 | fprintf(f_sql, " %s = UNHEX(@var_%s)", table->fields[i].name, table->fields[i].name); |
211 | 927 | comma = 1; | 947 | comma = 1; |
212 | 928 | break; | 948 | break; |
213 | 929 | case FT_BIT: | 949 | case FT_BIT: |
216 | 930 | if(comma) fprintf(stderr, ",\n"); | 950 | if(comma) fprintf(f_sql, ",\n"); |
217 | 931 | fprintf(stderr, " %s = CAST(@var_%s AS UNSIGNED)", table->fields[i].name, table->fields[i].name); | 951 | fprintf(f_sql, " %s = CAST(@var_%s AS UNSIGNED)", table->fields[i].name, table->fields[i].name); |
218 | 932 | comma = 1; | 952 | comma = 1; |
219 | 933 | break; | 953 | break; |
220 | 934 | default: break; | 954 | default: break; |
221 | 935 | } | 955 | } |
222 | 936 | } | 956 | } |
223 | 937 | } | 957 | } |
225 | 938 | fprintf(stderr, ";\n"); | 958 | fprintf(f_sql, ";\n"); |
226 | 939 | if (!process_compact && !process_redundant) { | 959 | if (!process_compact && !process_redundant) { |
229 | 940 | printf("Error: Please, specify what format your datafile in. Use -4 for mysql 4.1 and below and -5 for 5.X+\n"); | 960 | fprintf(stderr,"Error: Please, specify what format your datafile in. Use -4 for mysql 4.1 and below and -5 for 5.X+\n"); |
230 | 941 | usage(); | 961 | usage(); |
231 | 942 | } | 962 | } |
232 | 943 | 963 | ||
233 | 944 | return 0; | 964 | return 0; |
234 | 945 | 965 | ||
235 | === modified file 'print_data.c' | |||
236 | --- print_data.c 2014-10-08 00:15:51 +0000 | |||
237 | +++ print_data.c 2014-10-19 02:20:41 +0000 | |||
238 | @@ -112,11 +112,19 @@ | |||
239 | 112 | void print_string_raw(char *value, ulint len) { | 112 | void print_string_raw(char *value, ulint len) { |
240 | 113 | ulint i; | 113 | ulint i; |
241 | 114 | for(i = 0; i < len; i++) { | 114 | for(i = 0; i < len; i++) { |
242 | 115 | <<<<<<< TREE | ||
243 | 115 | if (value[i] == '"') fprintf(f_result, "\\\""); | 116 | if (value[i] == '"') fprintf(f_result, "\\\""); |
244 | 116 | else if (value[i] == '\n') fprintf(f_result, "\\n"); | 117 | else if (value[i] == '\n') fprintf(f_result, "\\n"); |
245 | 117 | else if (value[i] == '\r') fprintf(f_result, "\\r"); | 118 | else if (value[i] == '\r') fprintf(f_result, "\\r"); |
246 | 118 | else fprintf(f_result, "%c", value[i]); | 119 | else fprintf(f_result, "%c", value[i]); |
247 | 119 | } | 120 | } |
248 | 121 | ======= | ||
249 | 122 | if (value[i] == '"') fprintf(f_result,"\\\""); | ||
250 | 123 | else if (value[i] == '\n') fprintf(f_result,"\\n"); | ||
251 | 124 | else if (value[i] == '\r') fprintf(f_result,"\\r"); | ||
252 | 125 | else fprintf(f_result, "%c", value[i]); | ||
253 | 126 | } | ||
254 | 127 | >>>>>>> MERGE-SOURCE | ||
255 | 120 | } | 128 | } |
256 | 121 | 129 | ||
257 | 122 | void print_hex(char *value, ulint len) { | 130 | void print_hex(char *value, ulint len) { |
258 | @@ -196,10 +204,8 @@ | |||
259 | 196 | 204 | ||
260 | 197 | /*******************************************************************/ | 205 | /*******************************************************************/ |
261 | 198 | inline void print_set(int value, field_def_t *field) { | 206 | inline void print_set(int value, field_def_t *field) { |
266 | 199 | int i; | 207 | /* int i; |
267 | 200 | int comma = 0; | 208 | int comma = 0 |
264 | 201 | fprintf(f_result, "%d", value); | ||
265 | 202 | /* | ||
268 | 203 | fprintf(f_result, "\""); | 209 | fprintf(f_result, "\""); |
269 | 204 | for(i=0; i<field->limits.set_values_count; i++){ | 210 | for(i=0; i<field->limits.set_values_count; i++){ |
270 | 205 | if(((value>>i) % 2) == 1){ | 211 | if(((value>>i) % 2) == 1){ |
271 | @@ -210,6 +216,7 @@ | |||
272 | 210 | } | 216 | } |
273 | 211 | fprintf(f_result, "\""); | 217 | fprintf(f_result, "\""); |
274 | 212 | */ | 218 | */ |
275 | 219 | fprintf(f_result, "%d", value); | ||
276 | 213 | } | 220 | } |
277 | 214 | 221 | ||
278 | 215 | /*******************************************************************/ | 222 | /*******************************************************************/ |
279 | @@ -336,7 +343,7 @@ | |||
280 | 336 | 343 | ||
281 | 337 | /*******************************************************************/ | 344 | /*******************************************************************/ |
282 | 338 | inline void print_field_value(byte *value, ulint len, field_def_t *field) { | 345 | inline void print_field_value(byte *value, ulint len, field_def_t *field) { |
284 | 339 | time_t t; | 346 | /* time_t t;*/ |
285 | 340 | 347 | ||
286 | 341 | switch (field->type) { | 348 | switch (field->type) { |
287 | 342 | case FT_INTERNAL: | 349 | case FT_INTERNAL: |
288 | @@ -481,9 +488,15 @@ | |||
289 | 481 | if (len_sum >= extern_len) | 488 | if (len_sum >= extern_len) |
290 | 482 | break; | 489 | break; |
291 | 483 | } else { | 490 | } else { |
292 | 491 | <<<<<<< TREE | ||
293 | 484 | fprintf(stderr, "-- #####CannotOpen_%s;\n", tmp); | 492 | fprintf(stderr, "-- #####CannotOpen_%s;\n", tmp); |
294 | 485 | perror("-- print_field_value_with_external(): open()"); | 493 | perror("-- print_field_value_with_external(): open()"); |
295 | 486 | break; | 494 | break; |
296 | 495 | ======= | ||
297 | 496 | fprintf(stderr, "-- #####CannotOpen_%s;\n", tmp); | ||
298 | 497 | perror("External page:"); | ||
299 | 498 | break; | ||
300 | 499 | >>>>>>> MERGE-SOURCE | ||
301 | 487 | } | 500 | } |
302 | 488 | } | 501 | } |
303 | 489 | if (field->type == FT_TEXT) { | 502 | if (field->type == FT_TEXT) { |
conflicts fixed