Skip to content
/ git Public
forked from git/git

Commit

Permalink
utf8-bom: introduce skip_utf8_bom() helper
Browse files Browse the repository at this point in the history
With the recent change to ignore the UTF8 BOM at the beginning of
.gitignore files, we now have two codepaths that do such a skipping
(the other one is for reading the configuration files).

Introduce utf8_bom[] constant string and skip_utf8_bom() helper
and teach .gitignore code how to use it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Apr 16, 2015
1 parent cb0abea commit dde843e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
9 changes: 4 additions & 5 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "refs.h"
#include "wildmatch.h"
#include "pathspec.h"
#include "utf8.h"

struct path_simplify {
int len;
Expand Down Expand Up @@ -538,7 +539,6 @@ int add_excludes_from_file_to_list(const char *fname,
struct stat st;
int fd, i, lineno = 1;
size_t size = 0;
static const unsigned char *utf8_bom = (unsigned char *) "\xef\xbb\xbf";
char *buf, *entry;

fd = open(fname, O_RDONLY);
Expand Down Expand Up @@ -576,10 +576,9 @@ int add_excludes_from_file_to_list(const char *fname,

el->filebuf = buf;

if (size >= 3 && !memcmp(buf, utf8_bom, 3)) {
buf += 3;
size -= 3;
}
if (skip_utf8_bom(&buf, size))
size -= buf - el->filebuf;

entry = buf;

for (i = 0; i < size; i++) {
Expand Down
11 changes: 11 additions & 0 deletions utf8.c
Original file line number Diff line number Diff line change
Expand Up @@ -633,3 +633,14 @@ int is_hfs_dotgit(const char *path)

return 1;
}

const char utf8_bom[] = "\357\273\277";

int skip_utf8_bom(char **text, size_t len)
{
if (len < strlen(utf8_bom) ||
memcmp(*text, utf8_bom, strlen(utf8_bom)))
return 0;
*text += strlen(utf8_bom);
return 1;
}
3 changes: 3 additions & 0 deletions utf8.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ int same_encoding(const char *, const char *);
__attribute__((format (printf, 2, 3)))
int utf8_fprintf(FILE *, const char *, ...);

extern const char utf8_bom[];
extern int skip_utf8_bom(char **, size_t);

void strbuf_add_wrapped_text(struct strbuf *buf,
const char *text, int indent, int indent2, int width);
void strbuf_add_wrapped_bytes(struct strbuf *buf, const char *data, int len,
Expand Down

0 comments on commit dde843e

Please sign in to comment.