@@ -74,7 +74,7 @@ func PreprocessSketchWithCtags(
74
74
}
75
75
76
76
if src , err := ctagsTarget .ReadFile (); err == nil {
77
- filteredSource := filterSketchSource (sketch , bytes .NewReader (src ), false )
77
+ filteredSource := filterSketchSource (sketch , bytes .NewReader (src ), false , stderr )
78
78
if err := ctagsTarget .WriteFile ([]byte (filteredSource )); err != nil {
79
79
return & Result {args : result .Args (), stdout : stdout .Bytes (), stderr : stderr .Bytes ()}, err
80
80
}
@@ -208,7 +208,7 @@ func RunCTags(ctx context.Context, sourceFile *paths.Path, buildProperties *prop
208
208
return stdout , stderr , args , err
209
209
}
210
210
211
- func filterSketchSource (sketch * sketch.Sketch , source io.Reader , removeLineMarkers bool ) string {
211
+ func filterSketchSource (sketch * sketch.Sketch , source io.Reader , removeLineMarkers bool , stderr * bytes. Buffer ) string {
212
212
fileNames := paths .NewPathList ()
213
213
fileNames .Add (sketch .MainFile )
214
214
fileNames .AddAll (sketch .OtherSketchFiles )
@@ -217,6 +217,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
217
217
filtered := ""
218
218
219
219
scanner := bufio .NewScanner (source )
220
+
221
+ var buf []byte
222
+ const maxTokenSize = 1024 * 1024 // 1 MB
223
+ scanner .Buffer (buf , maxTokenSize )
224
+
220
225
for scanner .Scan () {
221
226
line := scanner .Text ()
222
227
if filename := cpp .ParseLineMarker (line ); filename != nil {
@@ -230,6 +235,11 @@ func filterSketchSource(sketch *sketch.Sketch, source io.Reader, removeLineMarke
230
235
filtered += line + "\n "
231
236
}
232
237
}
238
+ if errors .Is (scanner .Err (), bufio .ErrTooLong ) {
239
+ fmt .Fprintf (stderr , "%s: %s" ,
240
+ i18n .Tr ("An error occurred adding prototypes" ),
241
+ i18n .Tr ("line too long\n " ))
242
+ }
233
243
234
244
return filtered
235
245
}
0 commit comments