Skip to content
  • Jeff King's avatar
    refactor skip_prefix to return a boolean · cf4fff57
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The skip_prefix() function returns a pointer to the content
    past the prefix, or NULL if the prefix was not found. While
    this is nice and simple, in practice it makes it hard to use
    for two reasons:
    
      1. When you want to conditionally skip or keep the string
         as-is, you have to introduce a temporary variable.
         For example:
    
           tmp = skip_prefix(buf, "foo");
           if (tmp)
    	       buf = tmp;
    
      2. It is verbose to check the outcome in a conditional, as
         you need extra parentheses to silence compiler
         warnings. For example:
    
           if ((cp = skip_prefix(buf, "foo"))
    	       /* do something with cp */
    
    Both of these make it harder to use for long if-chains, and
    we tend to use starts_with() instead. However, the first line
    of "do something" is often to then skip forward in buf past
    the prefix, either using a magic constant or with an extra
    strlen(3) (which is generally computed at compile time, but
    means we are repeating ourselves).
    
    This patch refactors skip_prefix() to return a simple boolean,
    and to provide the pointer value as an out-parameter. If the
    prefix is not found, the out-parameter is untouched. This
    lets you write:
    
      if (skip_prefix(arg, "foo ", &arg))
    	  do_foo(arg);
      else if (skip_prefix(arg, "bar ", &arg))
    	  do_bar(arg);
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    cf4fff57