Re: [PATCH] add status.relativePaths config variable
- From
Jeff King <peff@peff.net>
- Date
- Dec 8, 2007, 08:45 UTC
- Message-ID
- <20071208084552.GA5206@coredump.intra.peff.net>
- In-Reply-To
- <7v63z9y5k2.fsf@gitster.siamese.dyndns.org>
On Sat, Dec 08, 2007 at 12:05:49AM -0800, Junio C Hamano wrote:
Show 16 quoted lines
> >> index 225fb4d..63d50f2 100644
> >> --- a/wt-status.h
> >> +++ b/wt-status.h
> >> @@ -28,6 +28,7 @@ struct wt_status {
> >>
> >> int git_status_config(const char *var, const char *value);
> >> int wt_status_use_color;
> >> +int wt_status_relative_paths;
> >> void wt_status_prepare(struct wt_status *s);
> >> void wt_status_print(struct wt_status *s);
> >
> > Shouldn't both of these ints be marked "extern"? I'm surprised it worked
> > at all (or perhaps the part of my brain that stores C linkage issues is
> > rotting?).
>
> Yes, rotting very much.Nope, there's still a little grey matter left. It is not technically guaranteed by the standard to work, since the declaration in every source file which includes wt-status.h is a "tentative definition." Fortunately, the linker is nice enough to figure out what's going on as long as only one is actually initialized. This is listed in C99 Section J.5.11 as a "Common extension".
The Summit C FAQ mentions it as well:
http://c-faq.com/decl/decldef.html
So "extern" is better, but apparently not required for any linkers we care about. Note that omitting "extern" _is_ illegal in C++, but fortunately we _really_ don't care about those linkers. :)
But at least I'm not totally crazy.
-Peff