mirror of
https://github.com/ksherlock/gopher.git
synced 2025-01-02 20:29:14 +00:00
set filetype based on destination name
This commit is contained in:
parent
5915160c21
commit
d8552c1317
87
smb.c
87
smb.c
@ -25,6 +25,11 @@
|
|||||||
#include "smb.errors.h"
|
#include "smb.errors.h"
|
||||||
#include "asn1.h"
|
#include "asn1.h"
|
||||||
|
|
||||||
|
|
||||||
|
static FileInfoRecGS FileInfo;
|
||||||
|
static Word FileAttr;
|
||||||
|
|
||||||
|
|
||||||
static struct smb2_header_sync header;
|
static struct smb2_header_sync header;
|
||||||
|
|
||||||
|
|
||||||
@ -1221,7 +1226,6 @@ int do_smb(char *url, URLComponents *components)
|
|||||||
char *host;
|
char *host;
|
||||||
char *user;
|
char *user;
|
||||||
char *password;
|
char *password;
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
uint16_t *path;
|
uint16_t *path;
|
||||||
|
|
||||||
@ -1229,6 +1233,9 @@ int do_smb(char *url, URLComponents *components)
|
|||||||
Word terr;
|
Word terr;
|
||||||
Word ok;
|
Word ok;
|
||||||
FILE *file = stdout;
|
FILE *file = stdout;
|
||||||
|
char *filename = NULL;
|
||||||
|
|
||||||
|
FileAttr = 0;
|
||||||
|
|
||||||
if (!components->portNumber) components->portNumber = 445;
|
if (!components->portNumber) components->portNumber = 445;
|
||||||
|
|
||||||
@ -1252,6 +1259,81 @@ int do_smb(char *url, URLComponents *components)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags._o)
|
||||||
|
{
|
||||||
|
filename = flags._o;
|
||||||
|
if (filename && !filename[0])
|
||||||
|
filename = NULL;
|
||||||
|
if (filename && filename[0] == '-' && !filename[1])
|
||||||
|
filename = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags._O)
|
||||||
|
{
|
||||||
|
// cpath is never freed. oh well.
|
||||||
|
char *cpath = NULL;
|
||||||
|
|
||||||
|
cpath = URLComponentGetCMalloc(url, components, URLComponentPath);
|
||||||
|
if (cpath)
|
||||||
|
{
|
||||||
|
// path starts with /.
|
||||||
|
|
||||||
|
filename = strrchr(cpath + 1, '/');
|
||||||
|
if (filename) // *filename == '/'
|
||||||
|
{
|
||||||
|
filename++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
filename = cpath + 1; // ? should have caught it above...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!filename || !filename[0])
|
||||||
|
{
|
||||||
|
fprintf(stderr, "-O flag cannot be used with this URL.\n");
|
||||||
|
free(path);
|
||||||
|
free(cpath);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filename)
|
||||||
|
{
|
||||||
|
file = fopen(filename, "w");
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Unable to to open file ``%s'': %s\n",
|
||||||
|
filename, strerror(errno));
|
||||||
|
|
||||||
|
free(path);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// hmm, flag for this vs content type?
|
||||||
|
if (parse_extension_c(filename, &FileInfo.fileType, &FileInfo.auxType))
|
||||||
|
{
|
||||||
|
FileAttr |= ATTR_FILETYPE | ATTR_AUXTYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FileAttr & ATTR_FILETYPE)
|
||||||
|
{
|
||||||
|
switch (FileInfo.fileType)
|
||||||
|
{
|
||||||
|
case 0x04:
|
||||||
|
case 0xb0:
|
||||||
|
fsettext(file);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fsetbinary(file);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ok = ConnectLoop(host, components->portNumber, &connection);
|
ok = ConnectLoop(host, components->portNumber, &connection);
|
||||||
free(host);
|
free(host);
|
||||||
|
|
||||||
@ -1294,5 +1376,8 @@ int do_smb(char *url, URLComponents *components)
|
|||||||
fflush(file);
|
fflush(file);
|
||||||
if (file != stdout) fclose(file);
|
if (file != stdout) fclose(file);
|
||||||
|
|
||||||
|
if (filename) setfileattr(filename, &FileInfo, FileAttr);
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user