This commit is contained in:
@@ -58,6 +58,7 @@ static int act_umode_file=0;
|
||||
#include "nwfile.h"
|
||||
#include "nwconn.h"
|
||||
#include "namspace.h"
|
||||
#include "namedos.h"
|
||||
#include "connect.h"
|
||||
|
||||
/* connect.h may already be include-guarded through another header before
|
||||
@@ -2446,6 +2447,34 @@ int nw_scan_dir_info(int dir_handle, uint8 *data, int len, uint8 *subnr,
|
||||
|
||||
|
||||
|
||||
static void build_dos_attr_name(int volume, uint8 *path, char *unixname,
|
||||
struct stat *stb, uint8 *out, int out_len)
|
||||
{
|
||||
char parent[300];
|
||||
char *slash;
|
||||
uint8 *leaf = path;
|
||||
|
||||
if (!out || out_len < 2) return;
|
||||
*out = '\0';
|
||||
|
||||
if (unixname && *unixname) {
|
||||
strmaxcpy(parent, unixname, sizeof(parent)-1);
|
||||
slash = strrchr(parent, '/');
|
||||
if (slash) {
|
||||
*slash = '\0';
|
||||
if (*(slash+1)) leaf = (uint8*)(slash+1);
|
||||
if (!*parent) strcpy(parent, "/");
|
||||
build_dos_83_alias(get_volume_options(volume), (uint8*)parent,
|
||||
leaf, stb ? stb->st_ino : 0, out, out_len);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
build_dos_83_alias(get_volume_options(volume), NULL,
|
||||
leaf, stb ? stb->st_ino : 0, out, out_len);
|
||||
}
|
||||
|
||||
|
||||
void get_dos_file_attrib(NW_DOS_FILE_INFO *f,
|
||||
struct stat *stb,
|
||||
int volume,
|
||||
@@ -2454,9 +2483,8 @@ void get_dos_file_attrib(NW_DOS_FILE_INFO *f,
|
||||
{
|
||||
uint8 spath[14];
|
||||
uint32 nw_owner=get_file_owner(stb);
|
||||
f->namlen=min(strlen((char*)path), 12);
|
||||
strmaxcpy(spath, path, 12);
|
||||
up_fn(spath);
|
||||
build_dos_attr_name(volume, path, unixname, stb, spath, sizeof(spath));
|
||||
f->namlen=min(strlen((char*)spath), 12);
|
||||
strncpy((char*)f->name, (char*)spath, f->namlen);
|
||||
U32_TO_32(get_nw_attrib_dword(volume, unixname, stb), f->attributes);
|
||||
U16_TO_16(tru_get_inherited_mask(volume, unixname, stb),
|
||||
@@ -2481,9 +2509,8 @@ void get_dos_dir_attrib(NW_DOS_DIR_INFO *f,
|
||||
char *unixname)
|
||||
{
|
||||
uint8 spath[14];
|
||||
f->namlen=min(strlen((char*)path), 12);
|
||||
strmaxcpy(spath, path, 12);
|
||||
up_fn(spath);
|
||||
build_dos_attr_name(volume, path, unixname, stb, spath, sizeof(spath));
|
||||
f->namlen=min(strlen((char*)spath), 12);
|
||||
strncpy((char*)f->name, (char*)spath, f->namlen);
|
||||
U32_TO_32(get_nw_attrib_dword(volume, unixname, stb),
|
||||
f->attributes);
|
||||
|
||||
Reference in New Issue
Block a user