26
26
char * fn_format(char * to, const char *name, const char *dir,
27
const char *extension, uint32_t flag)
27
const char *extension, uint flag)
29
char dev[FN_REFLEN], buff[FN_REFLEN], *pos;
30
const char *startpos = name;
29
char dev[FN_REFLEN], buff[FN_REFLEN], *pos, *startpos;
32
31
register size_t length;
35
34
/* Copy and skip directory */
36
name+=(length=dirname_part(dev, startpos, &dev_length));
35
name+=(length=dirname_part(dev, (startpos=(char *) name), &dev_length));
37
36
if (length == 0 || (flag & MY_REPLACE_DIR))
39
38
/* Use given directory */
40
convert_dirname(dev,dir,NULL); /* Fix to this OS */
39
convert_dirname(dev,dir,NullS); /* Fix to this OS */
42
41
else if ((flag & MY_RELATIVE_PATH) && !test_if_hard_path(dev))
44
43
/* Put 'dir' before the given path */
45
44
strmake(buff,dev,sizeof(buff)-1);
46
pos=convert_dirname(dev,dir,NULL);
45
pos=convert_dirname(dev,dir,NullS);
47
46
strmake(pos,buff,sizeof(buff)-1- (int) (pos-dev));
53
52
(void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */
55
54
if (!(flag & MY_APPEND_EXT) &&
56
(pos= (char*) strchr(name,FN_EXTCHAR)) != NULL)
55
(pos= (char*) strchr(name,FN_EXTCHAR)) != NullS)
58
57
if ((flag & MY_REPLACE_EXT) == 0) /* If we should keep old ext */
77
76
/* To long path, return original or NULL */
79
78
if (flag & MY_SAFE_PATH)
81
80
tmp_length= strlength(startpos);
82
(void) strmake(to,startpos,cmin(tmp_length,FN_REFLEN-1));
81
(void) strmake(to,startpos,min(tmp_length,FN_REFLEN-1));
88
87
memcpy(buff, name, length); /* Save name for last copy */
91
pos=strmake(my_stpcpy(to,dev),name,length);
92
(void) my_stpcpy(pos,ext); /* Don't convert extension */
90
pos=strmake(strmov(to,dev),name,length);
91
(void) strmov(pos,ext); /* Don't convert extension */
95
94
If MY_RETURN_REAL_PATH and MY_RESOLVE_SYMLINK is given, only do