Loading crypto/dso/dso_win32.c +29 −5 Original line number Original line Diff line number Diff line Loading @@ -313,6 +313,7 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, struct file_st *result = NULL; struct file_st *result = NULL; enum { IN_NODE, IN_DEVICE, IN_FILE } position; enum { IN_NODE, IN_DEVICE, IN_FILE } position; const char *start = filename; const char *start = filename; char last; if (!filename) if (!filename) { { Loading Loading @@ -343,7 +344,8 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, do do { { switch(filename[0]) last = filename[0]; switch(last) { { case ':': case ':': if(position != IN_DEVICE) if(position != IN_DEVICE) Loading @@ -368,10 +370,19 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, start = ++filename; start = ++filename; result->dir = start; result->dir = start; } } else if(position == IN_DEVICE) { position = IN_FILE; filename++; result->dir = start; result->dirlen = filename - start; start = filename; } else else { { filename++; filename++; result->dirlen += filename - start; result->dirlen += filename - start; start = filename; } } break; break; case '\0': case '\0': Loading @@ -385,12 +396,19 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, { { if (assume_last_is_dir) if (assume_last_is_dir) { { result->devicelen += filename - start; if (position == IN_DEVICE) { result->dir = start; result->dirlen = 0; } result->dirlen += filename - start; } } else else { { result->file = start; result->file = start; result->filelen = filename - start; result->filelen = filename - start; } } } } } } Loading @@ -400,7 +418,7 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, break; break; } } } } while(*filename); while(last); if(!result->nodelen) result->node = NULL; if(!result->nodelen) result->node = NULL; if(!result->devicelen) result->device = NULL; if(!result->devicelen) result->device = NULL; Loading Loading @@ -488,10 +506,13 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; start = end + 1; start = end + 1; } } #if 0 /* Not needed, since the directory converter above already appeneded a backslash */ if(file_split->predir && (file_split->dir || file_split->file)) if(file_split->predir && (file_split->dir || file_split->file)) { { result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; } } #endif start = file_split->dir; start = file_split->dir; while(file_split->dirlen > (start - file_split->dir)) while(file_split->dirlen > (start - file_split->dir)) { { Loading @@ -506,10 +527,13 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; start = end + 1; start = end + 1; } } #if 0 /* Not needed, since the directory converter above already appeneded a backslash */ if(file_split->dir && file_split->file) if(file_split->dir && file_split->file) { { result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; } } #endif strncpy(&result[offset], file_split->file, strncpy(&result[offset], file_split->file, file_split->filelen); offset += file_split->filelen; file_split->filelen); offset += file_split->filelen; result[offset] = '\0'; result[offset] = '\0'; Loading Loading @@ -560,7 +584,7 @@ static char *win32_merger(DSO *dso, const char *filespec1, const char *filespec2 return(NULL); return(NULL); } } filespec2_split = win32_splitter(dso, filespec2, 0); filespec2_split = win32_splitter(dso, filespec2, 0); if (!filespec1_split) if (!filespec2_split) { { DSOerr(DSO_F_WIN32_MERGER, DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); ERR_R_MALLOC_FAILURE); Loading Loading
crypto/dso/dso_win32.c +29 −5 Original line number Original line Diff line number Diff line Loading @@ -313,6 +313,7 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, struct file_st *result = NULL; struct file_st *result = NULL; enum { IN_NODE, IN_DEVICE, IN_FILE } position; enum { IN_NODE, IN_DEVICE, IN_FILE } position; const char *start = filename; const char *start = filename; char last; if (!filename) if (!filename) { { Loading Loading @@ -343,7 +344,8 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, do do { { switch(filename[0]) last = filename[0]; switch(last) { { case ':': case ':': if(position != IN_DEVICE) if(position != IN_DEVICE) Loading @@ -368,10 +370,19 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, start = ++filename; start = ++filename; result->dir = start; result->dir = start; } } else if(position == IN_DEVICE) { position = IN_FILE; filename++; result->dir = start; result->dirlen = filename - start; start = filename; } else else { { filename++; filename++; result->dirlen += filename - start; result->dirlen += filename - start; start = filename; } } break; break; case '\0': case '\0': Loading @@ -385,12 +396,19 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, { { if (assume_last_is_dir) if (assume_last_is_dir) { { result->devicelen += filename - start; if (position == IN_DEVICE) { result->dir = start; result->dirlen = 0; } result->dirlen += filename - start; } } else else { { result->file = start; result->file = start; result->filelen = filename - start; result->filelen = filename - start; } } } } } } Loading @@ -400,7 +418,7 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, break; break; } } } } while(*filename); while(last); if(!result->nodelen) result->node = NULL; if(!result->nodelen) result->node = NULL; if(!result->devicelen) result->device = NULL; if(!result->devicelen) result->device = NULL; Loading Loading @@ -488,10 +506,13 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; start = end + 1; start = end + 1; } } #if 0 /* Not needed, since the directory converter above already appeneded a backslash */ if(file_split->predir && (file_split->dir || file_split->file)) if(file_split->predir && (file_split->dir || file_split->file)) { { result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; } } #endif start = file_split->dir; start = file_split->dir; while(file_split->dirlen > (start - file_split->dir)) while(file_split->dirlen > (start - file_split->dir)) { { Loading @@ -506,10 +527,13 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; start = end + 1; start = end + 1; } } #if 0 /* Not needed, since the directory converter above already appeneded a backslash */ if(file_split->dir && file_split->file) if(file_split->dir && file_split->file) { { result[offset] = '\\'; offset++; result[offset] = '\\'; offset++; } } #endif strncpy(&result[offset], file_split->file, strncpy(&result[offset], file_split->file, file_split->filelen); offset += file_split->filelen; file_split->filelen); offset += file_split->filelen; result[offset] = '\0'; result[offset] = '\0'; Loading Loading @@ -560,7 +584,7 @@ static char *win32_merger(DSO *dso, const char *filespec1, const char *filespec2 return(NULL); return(NULL); } } filespec2_split = win32_splitter(dso, filespec2, 0); filespec2_split = win32_splitter(dso, filespec2, 0); if (!filespec1_split) if (!filespec2_split) { { DSOerr(DSO_F_WIN32_MERGER, DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); ERR_R_MALLOC_FAILURE); Loading