- if (sscanf(path, "%511[^:]", spath) < 1)
- return 0;
- sprintf(spath + strlen(spath), "/%s", name);
+ const char *path_sep = 0;
+ size_t len = 0;
+ size_t slen = 0;
+
+ *spath = '\0';
+ if (path)
+ {
+ /* somewhat dirty since we have to consider Windows
+ * drive letters..
+ */
+ if (strchr ("/\\.", *path))
+ {
+ path_sep = strchr (path+1, ':');
+ }
+ else if (path[0] && path[1])
+ path_sep = strchr (path+2, ':');
+ if (path_sep)
+ len = path_sep - path;
+ else
+ len = strlen(path);
+ if (!strchr ("/\\", *path) && base)
+ {
+ strcpy (spath, base);
+ slen = strlen(spath);
+ spath[slen++] = '/';
+ }
+ memcpy (spath+slen, path, len);
+ slen += len;
+ if (!strchr("/\\", spath[slen-1]))
+ spath[slen++] = '/';
+ }
+ strcpy (spath+slen, name);