diff options
author | rubidium <rubidium@openttd.org> | 2013-11-23 21:42:45 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-11-23 21:42:45 +0000 |
commit | 5e2d22da799799ba787fbf8d6a34a6f88f04f190 (patch) | |
tree | f601ba2c764b11c8d00649491bdbe634e3bae764 /src | |
parent | 5049e938f5e78726352217ab7b6eba2465f030a1 (diff) | |
download | openttd-5e2d22da799799ba787fbf8d6a34a6f88f04f190.tar.xz |
(svn r26077) -Codechange: handle strings like strings when scanning a tar instead of merely blobs of memory
Diffstat (limited to 'src')
-rw-r--r-- | src/fileio.cpp | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp index d2bfe0396..1b773f0e8 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -761,7 +761,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha TarHeader th; char buf[sizeof(th.name) + 1], *end; - char name[sizeof(th.prefix) + 1 + sizeof(th.name) + 1]; + char name[sizeof(th.prefix) + 1 + sizeof(th.name) + 1] = ""; char link[sizeof(th.linkname) + 1]; char dest[sizeof(th.prefix) + 1 + sizeof(th.name) + 1 + 1 + sizeof(th.linkname) + 1]; size_t num = 0, pos = 0; @@ -784,25 +784,17 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha return false; } - name[0] = '\0'; - size_t len = 0; - /* The prefix contains the directory-name */ if (th.prefix[0] != '\0') { - memcpy(name, th.prefix, sizeof(th.prefix)); - name[sizeof(th.prefix)] = '\0'; - len = strlen(name); - name[len] = PATHSEPCHAR; - len++; + ttd_strlcpy(name, th.prefix, lengthof(name)); + ttd_strlcat(name, PATHSEP, lengthof(name)); } /* Copy the name of the file in a safe way at the end of 'name' */ - memcpy(&name[len], th.name, sizeof(th.name)); - name[len + sizeof(th.name)] = '\0'; + ttd_strlcat(name, th.name, lengthof(name)); /* Calculate the size of the file.. for some strange reason this is stored as a string */ - memcpy(buf, th.size, sizeof(th.size)); - buf[sizeof(th.size)] = '\0'; + ttd_strlcpy(buf, th.size, lengthof(buf)); size_t skip = strtoul(buf, &end, 8); switch (th.typeflag) { @@ -831,8 +823,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha case '1': // hard links case '2': { // symbolic links /* Copy the destination of the link in a safe way at the end of 'linkname' */ - memcpy(link, th.linkname, sizeof(th.linkname)); - link[sizeof(th.linkname)] = '\0'; + ttd_strlcpy(link, th.linkname, lengthof(link)); if (strlen(name) == 0 || strlen(link) == 0) break; @@ -848,7 +839,7 @@ bool TarScanner::AddFile(const char *filename, size_t basepath_length, const cha /* Process relative path. * Note: The destination of links must not contain any directory-links. */ - strecpy(dest, name, lastof(dest)); + ttd_strlcpy(dest, name, lengthof(dest)); char *destpos = strrchr(dest, PATHSEPCHAR); if (destpos == NULL) destpos = dest; *destpos = '\0'; |