linux-decnet-commit Mailing List for DECnet for Linux (Page 25)
Brought to you by:
chrissie_c,
ph3-der-loewe
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(15) |
Nov
(16) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(20) |
Feb
(27) |
Mar
(25) |
Apr
(12) |
May
(2) |
Jun
(6) |
Jul
(36) |
Aug
(12) |
Sep
(12) |
Oct
(16) |
Nov
(5) |
Dec
(5) |
2003 |
Jan
(8) |
Feb
(9) |
Mar
(25) |
Apr
(18) |
May
(29) |
Jun
(4) |
Jul
(1) |
Aug
|
Sep
(10) |
Oct
(5) |
Nov
(3) |
Dec
(9) |
2004 |
Jan
(17) |
Feb
|
Mar
(9) |
Apr
|
May
(4) |
Jun
(1) |
Jul
(2) |
Aug
(21) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2005 |
Jan
(5) |
Feb
|
Mar
(13) |
Apr
|
May
(3) |
Jun
(1) |
Jul
|
Aug
|
Sep
(13) |
Oct
(83) |
Nov
(2) |
Dec
|
2006 |
Jan
(21) |
Feb
(1) |
Mar
(32) |
Apr
(31) |
May
(3) |
Jun
(1) |
Jul
|
Aug
(7) |
Sep
|
Oct
(1) |
Nov
(3) |
Dec
(13) |
2007 |
Jan
(1) |
Feb
(7) |
Mar
|
Apr
(2) |
May
|
Jun
(1) |
Jul
(2) |
Aug
(20) |
Sep
|
Oct
|
Nov
|
Dec
(7) |
2008 |
Jan
(4) |
Feb
(13) |
Mar
(24) |
Apr
(18) |
May
(10) |
Jun
|
Jul
|
Aug
(40) |
Sep
(72) |
Oct
(61) |
Nov
(9) |
Dec
(2) |
2009 |
Jan
(6) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
(7) |
Jul
|
Aug
|
Sep
|
Oct
(8) |
Nov
|
Dec
(3) |
2010 |
Jan
|
Feb
|
Mar
|
Apr
(5) |
May
|
Jun
|
Jul
(41) |
Aug
(28) |
Sep
(2) |
Oct
(5) |
Nov
(4) |
Dec
|
2011 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Patrick C. <pa...@us...> - 2005-10-13 11:54:11
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25616 Modified Files: filenames.c Log Message: Grrr Index: filenames.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/filenames.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** filenames.c 13 Oct 2005 11:47:39 -0000 1.3 --- filenames.c 13 Oct 2005 11:54:04 -0000 1.4 *************** *** 152,156 **** { sprintf(vmsname, "[]%s", unixname+1); ! goto retname; } --- 152,156 ---- { sprintf(vmsname, "[]%s", unixname+1); ! return; } *************** *** 179,183 **** } } - retname: } --- 179,182 ---- |
From: Patrick C. <pa...@us...> - 2005-10-13 11:47:48
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24529 Modified Files: dapfs.c dapfs_dap.cc filenames.c Log Message: Cope with subdirectories Index: dapfs.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** dapfs.c 13 Oct 2005 09:50:23 -0000 1.4 --- dapfs.c 13 Oct 2005 11:47:39 -0000 1.5 *************** *** 251,254 **** --- 251,261 ---- else { res = dapfs_getattr_dap(path, stbuf); + + /* If this failed and there's no file type, see if it is a directory */ + if (res == -ENOENT && strchr(path, '.')==NULL) { + char dirname[1024]; + sprintf(dirname, "%s.dir", path); + res = dapfs_getattr_dap(dirname, stbuf); + } } return res; Index: dapfs_dap.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.cc,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** dapfs_dap.cc 13 Oct 2005 09:50:23 -0000 1.4 --- dapfs_dap.cc 13 Oct 2005 11:47:39 -0000 1.5 *************** *** 150,155 **** cm.write(conn); } - // Wait for ACCOMP - break; } delete m; --- 150,153 ---- *************** *** 182,185 **** --- 180,189 ---- path = wildname; } + else { + strcpy(wildname, path); + strcat(wildname, "/*.*"); + path = wildname; + } + make_vms_filespec(path, vmsname, 0); *************** *** 210,216 **** { char unixname[1024]; ! name_pending = false; make_unix_filespec(unixname, name); filler(buf, unixname, &stbuf, 0); memset(&stbuf, 0, sizeof(stbuf)); } --- 214,230 ---- { char unixname[1024]; ! make_unix_filespec(unixname, name); + if (strstr(unixname, ".dir") == unixname+strlen(unixname)-4) + { + char *ext = strstr(unixname, ".dir"); + if (ext) *ext = '\0'; + } + + /* Tell Fuse */ filler(buf, unixname, &stbuf, 0); + + /* Prepare for next name */ + name_pending = false; memset(&stbuf, 0, sizeof(stbuf)); } *************** *** 272,275 **** --- 286,294 ---- char unixname[1024]; make_unix_filespec(unixname, name); + if (strstr(unixname, ".dir") == unixname+strlen(unixname)-4) + { + char *ext = strstr(unixname, ".dir"); + if (ext) *ext = '\0'; + } filler(buf, unixname, &stbuf, 0); } Index: filenames.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/filenames.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** filenames.c 13 Oct 2005 09:50:23 -0000 1.2 --- filenames.c 13 Oct 2005 11:47:39 -0000 1.3 *************** *** 118,122 **** // Convert a Unix-style filename to a VMS-style name // No return code because this routine cannot fail :-) ! void make_vms_filespec(const char *unixname, char *vmsname, int full) { char fullname[PATH_MAX]; --- 118,122 ---- // Convert a Unix-style filename to a VMS-style name // No return code because this routine cannot fail :-) ! void make_vms_filespec(const char *unixname, char *vmsname, int isdir) { char fullname[PATH_MAX]; *************** *** 125,130 **** struct stat st; ! // Resolve all relative bits and symbolic links ! realpath(unixname, fullname); // Find the last slash in the name --- 125,130 ---- struct stat st; ! // Take a copy wwe can muck about with ! strcpy(fullname, unixname); // Find the last slash in the name *************** *** 134,174 **** // If the filename has no extension then add one. VMS seems to // expect one as does dapfs. ! if (!strchr(lastslash, '.')) strcat(fullname, "."); - #if 0 - // If it's a directory then add .DIR;1 - if (lstat(unixname, &st)==0 && S_ISDIR(st.st_mode)) - { - // Take care of dots embedded in directory names (/etc/rc.d) - if (fullname[strlen(fullname)-1] != '.') - strcat(fullname, "."); - - strcat(fullname, "DIR;1"); // last dot has already been added - } - else // else just add a version number unless the file already has one - { - if (!strchr(fullname, ';')) - strcat(fullname, ";1"); - } - #endif - // If we were only asked for the short name then return that bit now - if (!full) - { - i=strlen(fullname); - while (fullname[i--] != '/') ; - strcpy(vmsname, &fullname[i+2]); - - // Make it all uppercase - makeupper(vmsname); - return; - } - - // Count the slashes. If there is one slash we emit a filename like: - // SYSDISK:[000000]filename - // For two we use: - // SYSDISK:[DIR]filename - // for three or more we use: - // DIR:[DIR1]filename - // and so on... int slashes = 0; --- 134,139 ---- // If the filename has no extension then add one. VMS seems to // expect one as does dapfs. ! if (!strchr(lastslash, '.' && !isdir)) strcat(fullname, "."); int slashes = 0; *************** *** 184,233 **** } - // File is in the root directory if (slashes == 1) { ! sprintf(vmsname, "%s:[000000]%s", sysdisk_name, fullname+1); ! return; } ! // File is in a directory immediately below the root directory ! if (slashes == 2) { ! char *second_slash = strchr(fullname+1, '/'); ! ! *second_slash = '\0'; ! ! strcpy(vmsname, sysdisk_name); ! strcat(vmsname, ":["); ! strcat(vmsname, fullname+1); ! strcat(vmsname, "]"); ! strcat(vmsname, second_slash+1); ! ! return; ! } ! ! // Most user filenames end up here ! char *slash2 = strchr(fullname+1, '/'); ! ! *slash2 = '\0'; ! strcpy(vmsname, fullname+1); ! strcat(vmsname, ":["); ! ! // Do the directory depth ! lastslash = slash2; ! ! for (i=1; i<slashes-1; i++) ! { ! char *slash = strchr(lastslash+1, '/'); ! if (slash) ! { ! *slash = '\0'; ! strcat(vmsname, lastslash+1); ! strcat(vmsname, "."); ! lastslash = slash; ! } } ! vmsname[strlen(vmsname)-1] = ']'; ! strcat(vmsname, lastslash+1); } --- 149,183 ---- } if (slashes == 1) { ! sprintf(vmsname, "[]%s", unixname+1); ! goto retname; } ! int thisslash = 0; ! int v=0; ! for (i=0; i<=(int)strlen(fullname); i++) { ! if (i==0) ! { ! vmsname[v++] = '['; ! vmsname[v++] = '.'; ! thisslash++; ! } ! else ! { ! if (fullname[i] == '/') ! { ! thisslash++; ! if (thisslash == slashes) ! vmsname[v++] = ']'; ! else ! vmsname[v++] = '.'; ! } ! else ! vmsname[v++] = fullname[i]; ! } } ! retname: } |
From: Patrick C. <pa...@us...> - 2005-10-13 09:50:32
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4653 Modified Files: dapfs.c dapfs_dap.cc dapfs_dap.h filenames.c Added Files: dapfs.com Log Message: More! --- NEW FILE: dapfs.com --- $!----------------------------------------------------------------------------- $! (C) Eduardo Marcelo Serrat <ems...@ge...> $! dapfs DECnet OBJECT $! $! It is installed as a DECnet object to cooperate with $! Linux dapfs filesystem implementation to create directories $! and delete them. $! $! $! Installation on VAX/OpenVMS DECnet PHASE IV: $! ------------------------------------------- $! 1) copy dapfs.com to SYS$SYSTEM: $! $! 2) define the dapfs object in the DECnet database $! $! $ MCR NCP DEFINE OBJECT DAPFS NUMBER 0 FILE SYS$SYSTEM:LINUXDIR.COM $! $ MCR NCP SET OBJECT DAPFS ALL $! $! Installation on Alpha/OpenVMS DECnet-Plus or VAX/DECnet OSI $! $! 1) copy dapfs.com to SYS$SYSTEM $! $! 2) define the dapfs object in the DECnet database $! $! $ mcr ncl create node 0 session control application dapfs $! $ mcr ncl set node 0 session control application dapfs - $! addresses = {name=dapfs}, image name = sys$system:dapfs.com $! $! 3) edit and include preceding commands into: $! SYS$MANAGER:NET$STARTUP_APPLICATIONS.NCL $! $!---------------------------------------------------------------------------- $ if f$mode() .nes. "NETWORK" then exit $! $ open/read/write dapfs sys$net $ read/prompt=""/time_out=5/error=out dapfs operation $ read/prompt=""/time_out=5/error=out dapfs dirname $! $ if operation .eqs. "CREATE" then $goto create_op $ if operation .eqs. "STATFS" then $goto statfs_op $ set file/prot=(o:rwed) 'dirname' $ delete/nolog 'dirname' $ if $severity .ne. 1 then $goto del_error $ write dapfs "OK" $ goto out $del_error: $ set file/prot=(o:rwe) 'dirname' $ goto dir_error $! $create_op: $ create/directory 'dirname' $ if $severity .ne. 1 then $goto dir_error $ write dapfs "OK" $ goto out $! $statfs_op: $! TODO PJC $dir_error: $ write dapfs "ERROR" $! $out: $ close/nolog dapfs $ exit Index: dapfs.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** dapfs.c 12 Oct 2005 12:57:43 -0000 1.3 --- dapfs.c 13 Oct 2005 09:50:23 -0000 1.4 *************** *** 57,61 **** char vername[strlen(path)+3]; ! sprintf(vername, "%s;1", path); return dap_delete_file(vername); } --- 57,61 ---- char vername[strlen(path)+3]; ! sprintf(vername, "%s;*", path); return dap_delete_file(vername); } *************** *** 75,83 **** } static int dapfs_truncate(const char *path, off_t size) { ! // TODO ! return -ENOSYS; } --- 75,131 ---- } + int dapfs_chmod(const char *path, mode_t mode) + { + // Can we do this ?? + return 0; + } static int dapfs_truncate(const char *path, off_t size) { ! // TODO - DAP::CONTROL::TRUNCATE message. ! // NOTE: This can also be called at create time to overwrite an ! // existing file ! return 0; ! } ! ! static int dapfs_mkdir(const char *path, mode_t mode) ! { ! syslog(1, "PJC: dapfs_mkdir called for %s\n", path); ! // TODO Use remote object ! return -ENOSYS; ! } ! ! static int dapfs_statfs(const char *path, struct statfs *stbuf) ! { ! syslog(1, "PJC: dapfs_statfs called for %s\n", path); ! // TODO Use remote object ! return -ENOSYS; ! } ! ! ! /* This gets called for normal files too... */ ! // TODO mode is ignored. ! static int dapfs_mknod(const char *path, mode_t mode, dev_t dev) ! { ! RMSHANDLE rmsh; ! char fullname[2048]; ! char vmsname[2048]; ! ! syslog(1, "PJC: mknod, path=%s, mode=%x\n", path, mode); ! ! if (S_ISDIR(mode)) ! return -ENOSYS; // Does this happen ?? ! ! if (!S_ISREG(mode)) ! return -ENOSYS; ! ! make_vms_filespec(path, vmsname, 0); ! sprintf(fullname, "%s%s", prefix, vmsname); ! ! rmsh = rms_open(fullname, O_CREAT|O_WRONLY, NULL); ! if (!rmsh) ! return -errno; ! rms_close(rmsh); ! return 0; } *************** *** 94,101 **** make_vms_filespec(path, vmsname, 0); sprintf(fullname, "%s%s", prefix, vmsname); - syslog(1, "dapfs: filename: %s\n", fullname); h->rmsh = rms_open(fullname, fi->flags, NULL); - syslog(1, "dapfs: rms_open %p, %d\n", h, errno); if (!h->rmsh) { int saved_errno = errno; --- 142,147 ---- *************** *** 116,119 **** --- 162,171 ---- struct dapfs_handle *h = (struct dapfs_handle *)fi->fh; + if (!h) { + res = dapfs_open(path, fi); + if (!res) + return res; + } + memset(&rab, 0, sizeof(rab)); if (offset && offset != h->offset) { *************** *** 127,132 **** do { res = rms_read(h->rmsh, buf+got, size-got, &rab); ! if (res) got += res; } while (res > 0); --- 179,188 ---- do { res = rms_read(h->rmsh, buf+got, size-got, &rab); ! if (res > 0) got += res; + if (res < 0 && got) { + // Not enough room for a record but we read something + return got; + } } while (res > 0); *************** *** 149,152 **** --- 205,214 ---- struct dapfs_handle *h = (struct dapfs_handle *)fi->fh; + if (!h) { + res = dapfs_open(path, fi); + if (!res) + return res; + } + memset(&rab, 0, sizeof(rab)); if (offset && offset != h->offset) { *************** *** 156,172 **** } ! do { ! res = rms_write(h->rmsh, (char *)buf+got, size-got, &rab); ! if (res) ! got += res; ! ! } while (res > 0); ! if (res >= 0) ! res = got; ! ! if (res == -1) res = -errno; ! ! h->offset += res; return res; } --- 218,229 ---- } ! res = rms_write(h->rmsh, (char *)buf+got, size-got, &rab); ! if (res == -1) { res = -errno; ! } ! else { ! h->offset += res; ! res = size; ! } return res; } *************** *** 177,180 **** --- 234,240 ---- int ret; + if (!h) + return -EBADF; + ret = rms_close(h->rmsh); free(h); *************** *** 186,190 **** { int res; - syslog(1, "dapfs - getattr on %s\n", path); if (strcmp(path, "/") == 0) { res = stat("/", stbuf); --- 246,249 ---- *************** *** 206,209 **** --- 265,272 ---- .rmdir = dapfs_rmdir, .rename = dapfs_rename, + .mknod = dapfs_mknod, + .chmod = dapfs_chmod, + .mkdir = dapfs_mkdir, + .statfs = dapfs_statfs, .release = dapfs_release, }; *************** *** 214,217 **** --- 277,288 ---- strcpy(prefix, argv[1]); + // Make a scratch connection - also verifies the path name nice and early + if (dap_init()) { + syslog(LOG_ERR, "Cannot connect to '%s'\n", prefix); + return -ENOTCONN; + } + return fuse_main(argc-1, argv+1, &dapfs_oper); } + + // TODO statfs & mkkdir, use DECnet object used by old dapfs! Index: dapfs_dap.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.cc,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** dapfs_dap.cc 12 Oct 2005 12:57:43 -0000 1.3 --- dapfs_dap.cc 13 Oct 2005 09:50:23 -0000 1.4 *************** *** 35,42 **** } ! static int dap_connect(dap_connection &conn) { char dirname[256] = {'\0'}; ! if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { return -ENOTCONN; --- 35,45 ---- } ! // Use this for one-shot stuff like getattr & delete ! static dap_connection conn(0); ! ! static int dap_connect(dap_connection &c) { char dirname[256] = {'\0'}; ! if (!c.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { return -ENOTCONN; *************** *** 44,50 **** // Exchange config messages ! if (!conn.exchange_config()) { ! fprintf(stderr, "Error in config: %s\n", conn.get_error()); return -ENOTCONN; } --- 47,53 ---- // Exchange config messages ! if (!c.exchange_config()) { ! fprintf(stderr, "Error in config: %s\n", c.get_error()); return -ENOTCONN; } *************** *** 64,68 **** if (strstr(nm->get_namespec(), ".DIR;1")) { stbuf->st_mode |= S_IFDIR; - syslog(1, "%s is a directory\n", nm->get_namespec()); } else { --- 67,70 ---- *************** *** 94,98 **** { dap_date_message *dm = (dap_date_message *)m; - syslog(1, "got date message\n"); stbuf->st_atime = dm->get_rdt_time(); stbuf->st_ctime = dm->get_cdt_time(); --- 96,99 ---- *************** *** 105,118 **** int dapfs_getattr_dap(const char *path, struct stat *stbuf) { - dap_connection conn(0); char vmsname[1024]; char name[80]; ! int ret; int size; - ret = dap_connect(conn); - if (ret) - return ret; - make_vms_filespec(path, vmsname, 0); --- 106,114 ---- int dapfs_getattr_dap(const char *path, struct stat *stbuf) { char vmsname[1024]; char name[80]; ! int ret = 0; int size; make_vms_filespec(path, vmsname, 0); *************** *** 132,144 **** { add_to_stat(m, stbuf); ! if (m->get_type() == dap_message::ACCOMP) ! { goto finished; } delete m; } finished: ! conn.close(); ! return 0; } --- 128,160 ---- { add_to_stat(m, stbuf); ! if (m->get_type() == dap_message::ACCOMP) { ! delete m; goto finished; } + + if (m->get_type() == dap_message::STATUS) + { + dap_status_message *sm = (dap_status_message *)m; + if (sm->get_code() == 0x4030) + { + dap_contran_message cm; + cm.set_confunc(dap_contran_message::SKIP); + cm.write(conn); + } + else + { + ret = -ENOENT; // TODO better error + // Clean connection status. + dap_contran_message cm; + cm.set_confunc(dap_contran_message::SKIP); + cm.write(conn); + } + // Wait for ACCOMP + break; + } delete m; } finished: ! return ret; } *************** *** 146,150 **** off_t offset, struct fuse_file_info *fi) { ! dap_connection conn(0); char vmsname[1024]; char wildname[strlen(path)+2]; --- 162,166 ---- off_t offset, struct fuse_file_info *fi) { ! dap_connection c(0); char vmsname[1024]; char wildname[strlen(path)+2]; *************** *** 154,170 **** int ret; ! memset(&stbuf, 0, sizeof(stbuf)); ! ret = dap_connect(conn); if (ret) return ret; // Add wildcard to path if (path[strlen(path)-1] == '/') { ! sprintf(wildname, "%s*", path); path = wildname; } - make_vms_filespec(path, vmsname, 0); - syslog(1, "readdir: dir = %s: %s\n", path, vmsname); dap_access_message acc; --- 170,186 ---- int ret; ! // Use our own connection for this. ! ret = dap_connect(c); if (ret) return ret; + memset(&stbuf, 0, sizeof(stbuf)); + // Add wildcard to path if (path[strlen(path)-1] == '/') { ! sprintf(wildname, "%s*.*", path); path = wildname; } make_vms_filespec(path, vmsname, 0); dap_access_message acc; *************** *** 175,179 **** dap_access_message::DISPLAY_DATE_MASK | dap_access_message::DISPLAY_PROT_MASK); ! acc.write(conn); bool name_pending = false; --- 191,195 ---- dap_access_message::DISPLAY_DATE_MASK | dap_access_message::DISPLAY_PROT_MASK); ! acc.write(c); bool name_pending = false; *************** *** 182,186 **** // Loop through the files we find ! while ( ((m=dap_message::read_message(conn, true) )) ) { add_to_stat(m, &stbuf); --- 198,202 ---- // Loop through the files we find ! while ( ((m=dap_message::read_message(c, true) )) ) { add_to_stat(m, &stbuf); *************** *** 190,193 **** --- 206,210 ---- case dap_message::NAME: { + // Got a new name, send the old stuff. if (name_pending) { *************** *** 222,228 **** dap_contran_message cm; cm.set_confunc(dap_contran_message::SKIP); ! if (!cm.write(conn)) { ! fprintf(stderr, "Error sending skip: %s\n", conn.get_error()); goto finished; } --- 239,246 ---- dap_contran_message cm; cm.set_confunc(dap_contran_message::SKIP); ! if (!cm.write(c)) { ! fprintf(stderr, "Error sending skip: %s\n", c.get_error()); ! delete m; goto finished; } *************** *** 244,259 **** finished: // An error: ! fprintf(stderr, "Error: %s\n", conn.get_error()); ! conn.close(); return 2; flush: if (name_pending) { char unixname[1024]; make_unix_filespec(unixname, name); ! filler(buf, name, &stbuf, 0); } ! conn.close(); return 0; } --- 262,278 ---- finished: // An error: ! fprintf(stderr, "Error: %s\n", c.get_error()); ! c.close(); return 2; flush: + delete m; if (name_pending) { char unixname[1024]; make_unix_filespec(unixname, name); ! filler(buf, unixname, &stbuf, 0); } ! c.close(); return 0; } *************** *** 262,266 **** int dap_delete_file(const char *path) { - dap_connection conn(0); char vmsname[1024]; char name[80]; --- 281,284 ---- *************** *** 268,275 **** int size; - ret = dap_connect(conn); - if (ret) - return ret; - make_vms_filespec(path, vmsname, 0); --- 286,289 ---- *************** *** 282,303 **** // Wait for ACK or status ! dap_message *m = dap_message::read_message(conn, true); ! if (m) ! { switch (m->get_type()) { case dap_message::ACCOMP: ! case dap_message::ACK: ! ret = 0; case dap_message::STATUS: { dap_status_message *sm = (dap_status_message *)m; ! ret = -EPERM; // Default error! } } } ! ! conn.close(); return ret; } --- 296,321 ---- // Wait for ACK or status ! ret = 0; ! while(1) { ! dap_message *m = dap_message::read_message(conn, true); ! switch (m->get_type()) { case dap_message::ACCOMP: ! goto end; ! break; case dap_message::STATUS: { dap_status_message *sm = (dap_status_message *)m; ! if (sm->get_code() & 1 != 1) ! ret = -EPERM; // Default error! ! goto end; } + break; } + delete m; } ! end: return ret; } *************** *** 305,309 **** int dap_rename_file(const char *from, const char *to) { - dap_connection conn(0); char vmsfrom[1024]; char vmsto[1024]; --- 323,326 ---- *************** *** 311,318 **** int size; - ret = dap_connect(conn); - if (ret) - return ret; - make_vms_filespec(from, vmsfrom, 0); make_vms_filespec(to, vmsto, 0); --- 328,331 ---- *************** *** 333,344 **** // Wait for ACK or status ! dap_message *m = dap_message::read_message(conn, true); ! if (m) ! { switch (m->get_type()) { case dap_message::ACCOMP: ! case dap_message::ACK: ! ret = 0; case dap_message::STATUS: --- 346,356 ---- // Wait for ACK or status ! ret = 0; ! while (1) { ! dap_message *m = dap_message::read_message(conn, true); switch (m->get_type()) { case dap_message::ACCOMP: ! goto end; case dap_message::STATUS: *************** *** 349,354 **** } } ! ! conn.close(); return ret; } --- 361,371 ---- } } ! end: return ret; } + + + int dap_init() + { + return dap_connect(conn); + } Index: dapfs_dap.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** dapfs_dap.h 12 Oct 2005 12:57:43 -0000 1.2 --- dapfs_dap.h 13 Oct 2005 09:50:23 -0000 1.3 *************** *** 9,12 **** --- 9,13 ---- int dap_delete_file(const char *path); int dap_rename_file(const char *from, const char *to); + int dap_init(void); #ifdef __cplusplus Index: filenames.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/filenames.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** filenames.c 12 Oct 2005 10:31:31 -0000 1.1 --- filenames.c 13 Oct 2005 09:50:23 -0000 1.2 *************** *** 136,140 **** if (!strchr(lastslash, '.')) strcat(fullname, "."); ! // If it's a directory then add .DIR;1 if (lstat(unixname, &st)==0 && S_ISDIR(st.st_mode)) --- 136,140 ---- if (!strchr(lastslash, '.')) strcat(fullname, "."); ! #if 0 // If it's a directory then add .DIR;1 if (lstat(unixname, &st)==0 && S_ISDIR(st.st_mode)) *************** *** 151,155 **** strcat(fullname, ";1"); } ! // If we were only asked for the short name then return that bit now if (!full) --- 151,155 ---- strcat(fullname, ";1"); } ! #endif // If we were only asked for the short name then return that bit now if (!full) |
From: Patrick C. <pa...@us...> - 2005-10-13 07:59:43
|
Update of /cvsroot/linux-decnet/dnprogs/libdap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14275 Modified Files: protocol.cc Log Message: Fix time_t access functions of dap_date_message Index: protocol.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/libdap/protocol.cc,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** protocol.cc 1 Sep 2005 12:53:04 -0000 1.12 --- protocol.cc 13 Oct 2005 07:59:35 -0000 1.13 *************** *** 1961,1975 **** char *dap_date_message::get_udt() { ! return bdt.get_string(); } time_t dap_date_message::get_cdt_time() { ! return string_to_time_t(edt.get_string()); } time_t dap_date_message::get_rdt_time() { ! return string_to_time_t(edt.get_string()); } --- 1961,1975 ---- char *dap_date_message::get_udt() { ! return udt.get_string(); } time_t dap_date_message::get_cdt_time() { ! return string_to_time_t(cdt.get_string()); } time_t dap_date_message::get_rdt_time() { ! return string_to_time_t(rdt.get_string()); } *************** *** 1986,1990 **** time_t dap_date_message::get_udt_time() { ! return string_to_time_t(bdt.get_string()); } --- 1986,1990 ---- time_t dap_date_message::get_udt_time() { ! return string_to_time_t(udt.get_string()); } *************** *** 2044,2051 **** char month[5]; ! sscanf(d, "%d-%3s-%d %d:%d:%d", &tm.tm_mday, month, &tm.tm_year, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); - tm.tm_isdst = -1; --- 2044,2051 ---- char month[5]; ! memset(&tm, 0, sizeof(tm)); ! sscanf(d, "%02d-%3s-%02d %02d:%02d:%02d", &tm.tm_mday, month, &tm.tm_year, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); tm.tm_isdst = -1; *************** *** 2059,2062 **** --- 2059,2070 ---- } } + // Pivot year + if (tm.tm_year >= 70) + tm.tm_year += 1900; + else + tm.tm_year += 2000; + + tm.tm_year -= 1900; // for a valid 'struct tm' + return mktime(&tm); } *************** *** 2313,2317 **** int len = strlen(prot); ! if (prot[i] == '(') i++; --- 2321,2325 ---- int len = strlen(prot); ! if (prot[i] == '(') i++; |
From: Patrick C. <pa...@us...> - 2005-10-12 12:57:59
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2386 Modified Files: dapfs.c dapfs_dap.cc dapfs_dap.h Log Message: I really should be working. Index: dapfs.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** dapfs.c 12 Oct 2005 10:31:31 -0000 1.2 --- dapfs.c 12 Oct 2005 12:57:43 -0000 1.3 *************** *** 1,7 **** /* dapfs via FUSE */ - /* - FUSE: Filesystem in Userspace - Copyright (C) 2001-2005 Miklos Szeredi <mi...@sz...> This program can be distributed under the terms of the GNU GPL. See the file COPYING. --- 1,19 ---- + /****************************************************************************** + (c) 2005 P.J. Caulfield pa...@ty... + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + ****************************************************************************** + */ /* dapfs via FUSE */ + /* This program can be distributed under the terms of the GNU GPL. See the file COPYING. *************** *** 43,54 **** static int dapfs_unlink(const char *path) { ! // TODO May need to use libdap directly. ! return -ENOSYS; } static int dapfs_rmdir(const char *path) { ! // TODO May need to use libdap directly. ! return -ENOSYS; } --- 55,70 ---- static int dapfs_unlink(const char *path) { ! char vername[strlen(path)+3]; ! ! sprintf(vername, "%s;1", path); ! return dap_delete_file(vername); } static int dapfs_rmdir(const char *path) { ! char dirname[strlen(path)+7]; ! ! sprintf(dirname, "%s.DIR;1", path); ! return dap_delete_file(dirname); } *************** *** 56,61 **** static int dapfs_rename(const char *from, const char *to) { ! // TODO May need to use libdap directly. ! return -ENOSYS; } --- 72,76 ---- static int dapfs_rename(const char *from, const char *to) { ! return dap_rename_file(from, to); } Index: dapfs_dap.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.cc,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** dapfs_dap.cc 12 Oct 2005 10:31:31 -0000 1.2 --- dapfs_dap.cc 12 Oct 2005 12:57:43 -0000 1.3 *************** *** 1,2 **** --- 1,17 ---- + /****************************************************************************** + (c) 2005 P.J. Caulfield pa...@ty... + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + ****************************************************************************** + */ + #define _FILE_OFFSET_BITS 64 #define FUSE_USE_VERSION 22 *************** *** 243,244 **** --- 258,354 ---- return 0; } + + /* Path already has version number appended to it -- this may be a mistake :) */ + int dap_delete_file(const char *path) + { + dap_connection conn(0); + char vmsname[1024]; + char name[80]; + int ret; + int size; + + ret = dap_connect(conn); + if (ret) + return ret; + + make_vms_filespec(path, vmsname, 0); + + dap_access_message acc; + acc.set_accfunc(dap_access_message::ERASE); + acc.set_accopt(1); + acc.set_filespec(vmsname); + acc.set_display(0); + acc.write(conn); + + // Wait for ACK or status + dap_message *m = dap_message::read_message(conn, true); + if (m) + { + switch (m->get_type()) + { + case dap_message::ACCOMP: + case dap_message::ACK: + ret = 0; + + case dap_message::STATUS: + { + dap_status_message *sm = (dap_status_message *)m; + ret = -EPERM; // Default error! + } + } + } + + conn.close(); + return ret; + } + + int dap_rename_file(const char *from, const char *to) + { + dap_connection conn(0); + char vmsfrom[1024]; + char vmsto[1024]; + int ret; + int size; + + ret = dap_connect(conn); + if (ret) + return ret; + + make_vms_filespec(from, vmsfrom, 0); + make_vms_filespec(to, vmsto, 0); + + dap_access_message acc; + acc.set_accfunc(dap_access_message::RENAME); + acc.set_accopt(1); + acc.set_filespec(vmsfrom); + acc.set_display(0); + acc.write(conn); + + // TODO Test this, We may need to split the filespec up into DIR & FILE messages, + // at least for cross-directory renames. + dap_name_message nam; + nam.set_nametype(dap_name_message::FILESPEC); + nam.set_namespec(vmsto); + nam.write(conn); + + // Wait for ACK or status + dap_message *m = dap_message::read_message(conn, true); + if (m) + { + switch (m->get_type()) + { + case dap_message::ACCOMP: + case dap_message::ACK: + ret = 0; + + case dap_message::STATUS: + { + dap_status_message *sm = (dap_status_message *)m; + ret = -EPERM; // Default error! + } + } + } + + conn.close(); + return ret; + } Index: dapfs_dap.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** dapfs_dap.h 7 Oct 2005 13:40:33 -0000 1.1 --- dapfs_dap.h 12 Oct 2005 12:57:43 -0000 1.2 *************** *** 6,9 **** --- 6,13 ---- int dapfs_getattr_dap(const char *path, struct stat *stbuf); + + int dap_delete_file(const char *path); + int dap_rename_file(const char *from, const char *to); + #ifdef __cplusplus } |
From: Patrick C. <pa...@us...> - 2005-10-12 10:31:49
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1416 Modified Files: Makefile dapfs.c dapfs_dap.cc Added Files: filenames.c filenames.h Log Message: A bit more work. Seems basically functional now --- NEW FILE: filenames.c --- /****************************************************************************** (c) 2005 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ****************************************************************************** */ /* This code is lifted from FAL. */ #include <sys/socket.h> #include <sys/stat.h> #include <sys/param.h> #include <sys/mman.h> #include <assert.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <ctype.h> #include <syslog.h> #include <pwd.h> #include <grp.h> #include <glob.h> #include <regex.h> #include <string.h> #include <netdnet/dn.h> #include <netdnet/dnetdb.h> #include "filenames.h" static int vms_format; // Do we use this ?? #define true 1 #define false 0 const char *sysdisk_name = "SYS$SYSDEVICE"; // A couple of general utility methods: static void makelower(char *s) { unsigned int i; for (i=0; i<strlen(s); i++) s[i] = tolower(s[i]); } static void makeupper(char *s) { unsigned int i; for (i=0; i<strlen(s); i++) s[i] = toupper(s[i]); } // A test to see if the file is a VMS-type filespec or a Unix one // Also sets the 'vms_format' flag int is_vms_name(char *name) { if ( (strchr(name, '[') && strchr(name, ']')) || strchr(name, ';') || strchr(name, ':') ) return vms_format=true; else return vms_format=false; } // Splits a filename up into volume, directory and file parts. // The volume and directory are just for display purposes (they get sent back // to the client). file is the (possibly) wildcard filespec to use for // searching for files. // // Unix filenames are just returned as-is. // // volume and directory are assumed to be long enough for PATH_MAX. file // also contains the input filespec. // void split_filespec(char *volume, char *directory, char *file) { if (is_vms_name(file)) { // This converts the VMS name to a Unix name and back again. This // involves calling parse_vms_filespec twice and ourself once more. // YES THIS IS RIGHT! We need to make sense of the input file name // in our own terms and then send back our re-interpretation of // the input filename. This is what any sensible operating // system would do. (VMS certainly does!) // Convert it to a Unix filespec char unixname[PATH_MAX]; char vmsname[PATH_MAX]; make_unix_filespec(unixname, file); // Parse that Unix name strcpy(file, unixname); split_filespec(volume, directory, file); // Then convert it back to VMS make_vms_filespec(unixname, vmsname, true); // Split up the VMS spec for returning in bits parse_vms_filespec(volume, directory, vmsname); // Make sure we set this back to true after we called ourself with a // Unix filespec vms_format = true; return; } // We don't fill in the volume for unix filespecs volume[0] = '\0'; directory[0] = '\0'; } // Convert a Unix-style filename to a VMS-style name // No return code because this routine cannot fail :-) void make_vms_filespec(const char *unixname, char *vmsname, int full) { char fullname[PATH_MAX]; int i; char *lastslash; struct stat st; // Resolve all relative bits and symbolic links realpath(unixname, fullname); // Find the last slash in the name lastslash = fullname + strlen(fullname); while (*(--lastslash) != '/') ; // If the filename has no extension then add one. VMS seems to // expect one as does dapfs. if (!strchr(lastslash, '.')) strcat(fullname, "."); // If it's a directory then add .DIR;1 if (lstat(unixname, &st)==0 && S_ISDIR(st.st_mode)) { // Take care of dots embedded in directory names (/etc/rc.d) if (fullname[strlen(fullname)-1] != '.') strcat(fullname, "."); strcat(fullname, "DIR;1"); // last dot has already been added } else // else just add a version number unless the file already has one { if (!strchr(fullname, ';')) strcat(fullname, ";1"); } // If we were only asked for the short name then return that bit now if (!full) { i=strlen(fullname); while (fullname[i--] != '/') ; strcpy(vmsname, &fullname[i+2]); // Make it all uppercase makeupper(vmsname); return; } // Count the slashes. If there is one slash we emit a filename like: // SYSDISK:[000000]filename // For two we use: // SYSDISK:[DIR]filename // for three or more we use: // DIR:[DIR1]filename // and so on... int slashes = 0; // Oh, also make it all upper case for VMS's benefit. for (i=0; i<(int)strlen(fullname); i++) { if (islower(fullname[i])) fullname[i] = toupper(fullname[i]); if (fullname[i] == '/') { slashes++; } } // File is in the root directory if (slashes == 1) { sprintf(vmsname, "%s:[000000]%s", sysdisk_name, fullname+1); return; } // File is in a directory immediately below the root directory if (slashes == 2) { char *second_slash = strchr(fullname+1, '/'); *second_slash = '\0'; strcpy(vmsname, sysdisk_name); strcat(vmsname, ":["); strcat(vmsname, fullname+1); strcat(vmsname, "]"); strcat(vmsname, second_slash+1); return; } // Most user filenames end up here char *slash2 = strchr(fullname+1, '/'); *slash2 = '\0'; strcpy(vmsname, fullname+1); strcat(vmsname, ":["); // Do the directory depth lastslash = slash2; for (i=1; i<slashes-1; i++) { char *slash = strchr(lastslash+1, '/'); if (slash) { *slash = '\0'; strcat(vmsname, lastslash+1); strcat(vmsname, "."); lastslash = slash; } } vmsname[strlen(vmsname)-1] = ']'; strcat(vmsname, lastslash+1); } // Split out the volume, directory and file portions of a VMS file spec // We assume that the VMS name is (quite) well formed. void parse_vms_filespec(char *volume, char *directory, char *file) { char *colon = strchr(file, ':'); char *ptr = file; volume[0] = '\0'; directory[0] = '\0'; if (colon) // We have a volume name { char saved = *(colon+1); *(colon+1) = '\0'; strcpy(volume, file); ptr = colon+1; *ptr = saved; } char *enddir = strchr(ptr, ']'); // Don't get caught out by concatenated filespecs // like dua0:[home.patrick.][test] if (enddir && enddir[1] == '[') enddir=strchr(enddir+1, ']'); if (*ptr == '[' && enddir) // we have a directory { char saved = *(enddir+1); *(enddir+1) = '\0'; strcpy(directory, ptr); ptr = enddir+1; *ptr = saved; } // Copy the rest of the filename using memmove 'cos it might overlap if (ptr != file) memmove(file, ptr, strlen(ptr)+1); } // Convert a VMS filespec into a Unix filespec // volume names are turned into directories in the root directory // (unless they are SYSDISK which is our pseudo name) void make_unix_filespec(char *unixname, char *vmsname) { char volume[PATH_MAX]; char dir[PATH_MAX]; char file[PATH_MAX]; int ptr; int i; strcpy(file, vmsname); // Remove the trailing version number char *semi = strchr(file, ';'); if (semi) *semi = '\0'; // If the filename has a trailing dot them remove that too if (file[strlen(file)-1] == '.') file[strlen(file)-1] = '\0'; unixname[0] = '\0'; // Split it into its component parts parse_vms_filespec(volume, dir, file); // Remove the trailing colon from the volume name if (volume[strlen(volume)-1] == ':') volume[strlen(volume)-1] = '\0'; // If the filename has the dummy SYSDISK volume then start from the // filesystem root if (strcasecmp(volume, sysdisk_name) == 0) { strcpy(unixname, "/"); } else { if (volume[0] != '\0') { strcpy(unixname, "/"); strcat(unixname, volume); } } ptr = strlen(unixname); // Copy the directory for (i=0; i< (int)strlen(dir); i++) { // If the directory name starts [. then it is relative to the // user's home directory and we lose the starting slash // If there is also a volume name present then it all falls // to bits but then it's pretty dodgy on VMS too. if (dir[i] == '[' && dir[i+1] == '.') { i++; ptr = 0; continue; } if (dir[i] == '[' || dir[i] == ']' || dir[i] == '.') { unixname[ptr++] = '/'; } else { // Skip root directory specs if (dir[i] == '0' && (strncmp(&dir[i], "000000", 6) == 0)) { i += 5; continue; } if (dir[i] == '0' && (strncmp(&dir[i], "0,0", 3) == 0)) { i += 2; continue; } unixname[ptr++] = dir[i]; } } unixname[ptr++] = '\0'; // so that strcat will work properly // A special case (ugh!), if VMS sent us '*.*' (maybe as part of *.*;*) // then change it to just '*' so we get all the files. if (strcmp(file, "*.*") == 0) strcpy(file, "*"); strcat(unixname, file); // Finally convert it all to lower case. This is not the greatest way to // cope with it but because VMS will upper-case everything anyway we // can't really distinguish case. I know samba does fancy stuff with // matching various combinations of case but I really can't be bothered. makelower(unixname); // If the name ends in .dir and there is a directory of that name without // the .dir then remove it (the .dir, not the directory!) if (strstr(unixname, ".dir") == unixname+strlen(unixname)-4) { char dirname[strlen(unixname)+1]; struct stat st; strcpy(dirname, unixname); char *ext = strstr(dirname, ".dir"); if (ext) *ext = '\0'; if (stat(dirname, &st) == 0 && S_ISDIR(st.st_mode)) { char *ext = strstr(unixname, ".dir"); if (ext) *ext = '\0'; } } } --- NEW FILE: filenames.h --- /****************************************************************************** (c) 2005 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ****************************************************************************** */ /* filenames.c */ int is_vms_name(char *name); void split_filespec(char *volume, char *directory, char *file); void make_vms_filespec(const char *unixname, char *vmsname, int full); void parse_vms_filespec(char *volume, char *directory, char *file); void make_unix_filespec(char *unixname, char *vmsname); Index: Makefile =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Makefile 7 Oct 2005 13:40:33 -0000 1.1 --- Makefile 12 Oct 2005 10:31:31 -0000 1.2 *************** *** 7,11 **** MANPAGES=dapfs.1 ! PROG1OBJS=dapfs.o dapfs_dap.o all: $(PROG1) --- 7,11 ---- MANPAGES=dapfs.1 ! PROG1OBJS=dapfs.o dapfs_dap.o filenames.o all: $(PROG1) Index: dapfs.c =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** dapfs.c 7 Oct 2005 13:40:33 -0000 1.1 --- dapfs.c 12 Oct 2005 10:31:31 -0000 1.2 *************** *** 24,28 **** --- 24,34 ---- #include "rms.h" #include "dapfs_dap.h" + #include "filenames.h" + struct dapfs_handle + { + RMSHANDLE rmsh; + off_t offset; + }; char prefix[1024]; *************** *** 61,85 **** } - static int dapfs_utime(const char *path, struct utimbuf *buf) - { - // TODO - return -ENOSYS; - } - - static int dapfs_open(const char *path, struct fuse_file_info *fi) { ! RMSHANDLE h; char fullname[2048]; ! // TODO: This WILL break on VMS - we need to nick the Unix->VMS path stuff from FAL ! sprintf(fullname, "%s%s", prefix, path); syslog(1, "dapfs: filename: %s\n", fullname); ! h = rms_open(fullname, fi->flags, NULL); syslog(1, "dapfs: rms_open %p, %d\n", h, errno); ! if (!h) ! return -errno; fi->fh = (unsigned long)h; return 0; } --- 67,93 ---- } static int dapfs_open(const char *path, struct fuse_file_info *fi) { ! struct dapfs_handle *h; char fullname[2048]; + char vmsname[2048]; + + h = malloc(sizeof(struct dapfs_handle)); + if (!h) + return -ENOMEM; ! make_vms_filespec(path, vmsname, 0); ! sprintf(fullname, "%s%s", prefix, vmsname); syslog(1, "dapfs: filename: %s\n", fullname); ! h->rmsh = rms_open(fullname, fi->flags, NULL); syslog(1, "dapfs: rms_open %p, %d\n", h, errno); ! if (!h->rmsh) { ! int saved_errno = errno; ! free(h); ! return -saved_errno; ! } fi->fh = (unsigned long)h; + h->offset = 0; return 0; } *************** *** 91,109 **** int got = 0; struct RAB rab; ! RMSHANDLE h = (RMSHANDLE)fi->fh; - // TODO Detect if offset hasn't changed... memset(&rab, 0, sizeof(rab)); ! if (offset) { rab.rab$l_kbf = &offset; rab.rab$b_rac = 2;//FB$RFA; rab.rab$b_ksz = sizeof(offset); } do { ! res = rms_read(h, buf+got, size-got, &rab); if (res) got += res; - syslog(1, "rms_read returned %d (errno=%d) size = %d\n", res, errno, size); } while (res > 0); if (res >= 0) --- 99,118 ---- int got = 0; struct RAB rab; ! struct dapfs_handle *h = (struct dapfs_handle *)fi->fh; memset(&rab, 0, sizeof(rab)); ! if (offset && offset != h->offset) { rab.rab$l_kbf = &offset; rab.rab$b_rac = 2;//FB$RFA; rab.rab$b_ksz = sizeof(offset); } + + // TODO this can be quite slow, because it reads records. Maybe we + // should abandon librms and pull blocks down as per dncopy do { ! res = rms_read(h->rmsh, buf+got, size-got, &rab); if (res) got += res; } while (res > 0); if (res >= 0) *************** *** 113,116 **** --- 122,126 ---- res = -errno; + h->offset += res; return res; } *************** *** 119,129 **** off_t offset, struct fuse_file_info *fi) { ! // TODO ! return -ENOSYS; } static int dapfs_release(const char *path, struct fuse_file_info *fi) { ! return rms_close((RMSHANDLE)fi->fh); } --- 129,169 ---- off_t offset, struct fuse_file_info *fi) { ! int res; ! int got = 0; ! struct RAB rab; ! struct dapfs_handle *h = (struct dapfs_handle *)fi->fh; ! ! memset(&rab, 0, sizeof(rab)); ! if (offset && offset != h->offset) { ! rab.rab$l_kbf = &offset; ! rab.rab$b_rac = 2;//FB$RFA; ! rab.rab$b_ksz = sizeof(offset); ! } ! ! do { ! res = rms_write(h->rmsh, (char *)buf+got, size-got, &rab); ! if (res) ! got += res; ! ! } while (res > 0); ! if (res >= 0) ! res = got; ! ! if (res == -1) ! res = -errno; ! ! h->offset += res; ! return res; } static int dapfs_release(const char *path, struct fuse_file_info *fi) { ! struct dapfs_handle *h = (struct dapfs_handle *)fi->fh; ! int ret; ! ! ret = rms_close(h->rmsh); ! free(h); ! ! return ret; } *************** *** 132,141 **** int res; syslog(1, "dapfs - getattr on %s\n", path); ! if (strcmp(path, "/") == 0) ! { res = stat("/", stbuf); } ! else ! { res = dapfs_getattr_dap(path, stbuf); } --- 172,179 ---- int res; syslog(1, "dapfs - getattr on %s\n", path); ! if (strcmp(path, "/") == 0) { res = stat("/", stbuf); } ! else { res = dapfs_getattr_dap(path, stbuf); } *************** *** 153,157 **** .rmdir = dapfs_rmdir, .rename = dapfs_rename, - .utime = dapfs_utime, .release = dapfs_release, }; --- 191,194 ---- Index: dapfs_dap.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dapfs/dapfs_dap.cc,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** dapfs_dap.cc 7 Oct 2005 13:40:33 -0000 1.1 --- dapfs_dap.cc 12 Oct 2005 10:31:31 -0000 1.2 *************** *** 16,28 **** #include "protocol.h" #include "dapfs_dap.h" ! ! int dapfs_getattr_dap(const char *path, struct stat *stbuf) { - dap_connection conn(0); char dirname[256] = {'\0'}; - char name[80],cdt[25],owner[20],prot[22]; - int size; - if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { --- 16,26 ---- #include "protocol.h" #include "dapfs_dap.h" + extern "C" { + #include "filenames.h" + } ! static int dap_connect(dap_connection &conn) { char dirname[256] = {'\0'}; if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { *************** *** 34,44 **** { fprintf(stderr, "Error in config: %s\n", conn.get_error()); ! return -1; } dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); ! acc.set_filespec(path); // PJC TODO Translate to VMS format... acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | --- 32,109 ---- { fprintf(stderr, "Error in config: %s\n", conn.get_error()); ! return -ENOTCONN; ! } ! return 0; ! } ! ! static void add_to_stat(dap_message *m, struct stat *stbuf) ! { ! switch (m->get_type()) ! { ! case dap_message::NAME: ! { ! dap_name_message *nm = (dap_name_message *)m; ! ! // If name ends in .DIR;1 then add directory attribute ! if (nm->get_nametype() == dap_name_message::FILENAME) { ! if (strstr(nm->get_namespec(), ".DIR;1")) { ! stbuf->st_mode |= S_IFDIR; ! syslog(1, "%s is a directory\n", nm->get_namespec()); ! } ! else { ! stbuf->st_mode &= ~S_IFDIR; ! } ! } } + break; + + case dap_message::PROTECT: + { + dap_protect_message *pm = (dap_protect_message *)m; + stbuf->st_mode |= pm->get_mode(); + stbuf->st_uid = 0; + stbuf->st_gid = 0; + } + break; + + case dap_message::ATTRIB: + { + dap_attrib_message *am = (dap_attrib_message *)m; + stbuf->st_size = am->get_size(); + stbuf->st_blksize = am->get_bsz(); + stbuf->st_blocks = am->get_alq(); + } + break; + + case dap_message::DATE: + { + dap_date_message *dm = (dap_date_message *)m; + syslog(1, "got date message\n"); + stbuf->st_atime = dm->get_rdt_time(); + stbuf->st_ctime = dm->get_cdt_time(); + stbuf->st_mtime = dm->get_cdt_time(); + } + break; + } + } + + int dapfs_getattr_dap(const char *path, struct stat *stbuf) + { + dap_connection conn(0); + char vmsname[1024]; + char name[80]; + int ret; + int size; + + ret = dap_connect(conn); + if (ret) + return ret; + + make_vms_filespec(path, vmsname, 0); dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); ! acc.set_filespec(vmsname); acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | *************** *** 46,99 **** acc.write(conn); - bool name_pending = false; dap_message *m; - char volname[256]; // Loop through the files we find while ( ((m=dap_message::read_message(conn, true) )) ) { ! switch (m->get_type()) ! { ! case dap_message::NAME: ! break; ! ! case dap_message::PROTECT: { ! dap_protect_message *pm = (dap_protect_message *)m; ! stbuf->st_mode = pm->get_mode(); ! stbuf->st_uid = 0; ! stbuf->st_gid = 0; } - break; - - case dap_message::ATTRIB: - { - dap_attrib_message *am = (dap_attrib_message *)m; - stbuf->st_size = am->get_size(); - stbuf->st_blksize = am->get_bsz(); - stbuf->st_blocks = am->get_alq(); - } - break; - - case dap_message::DATE: - { - dap_date_message *dm = (dap_date_message *)m; - stbuf->st_atime = dm->get_rdt_time(); - stbuf->st_ctime = dm->get_cdt_time(); - stbuf->st_mtime = dm->get_cdt_time(); - } - break; - - case dap_message::ACK: - break; - - case dap_message::STATUS: - case dap_message::ACCOMP: delete m; - goto finished; - } } - // TODO if name ends in .DIR;1 then add DIRECTORY to st_mode - // TODO Errors; finished: conn.close(); --- 111,126 ---- acc.write(conn); dap_message *m; // Loop through the files we find while ( ((m=dap_message::read_message(conn, true) )) ) { ! add_to_stat(m, stbuf); ! if (m->get_type() == dap_message::ACCOMP) { ! goto finished; } delete m; } finished: conn.close(); *************** *** 105,128 **** { dap_connection conn(0); ! char dirname[256] = {'\0'}; ! char name[80],cdt[25],owner[20],prot[22]; int size; ! if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) ! { ! return -ENOTCONN; ! } ! // Exchange config messages ! if (!conn.exchange_config()) ! { ! fprintf(stderr, "Error in config: %s\n", conn.get_error()); ! return -1; } dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); ! acc.set_filespec(path); // PJC TODO Translate to VMS format... acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | --- 132,160 ---- { dap_connection conn(0); ! char vmsname[1024]; ! char wildname[strlen(path)+2]; ! char name[80]; ! struct stat stbuf; int size; + int ret; ! memset(&stbuf, 0, sizeof(stbuf)); ! ret = dap_connect(conn); ! if (ret) ! return ret; ! // Add wildcard to path ! if (path[strlen(path)-1] == '/') { ! sprintf(wildname, "%s*", path); ! path = wildname; } + make_vms_filespec(path, vmsname, 0); + syslog(1, "readdir: dir = %s: %s\n", path, vmsname); + dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); ! acc.set_filespec(vmsname); acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | *************** *** 137,140 **** --- 169,174 ---- while ( ((m=dap_message::read_message(conn, true) )) ) { + add_to_stat(m, &stbuf); + switch (m->get_type()) { *************** *** 143,149 **** if (name_pending) { name_pending = false; ! // TODO fill stat ! filler(buf, name, NULL, 0); } --- 177,185 ---- if (name_pending) { + char unixname[1024]; name_pending = false; ! make_unix_filespec(unixname, name); ! filler(buf, unixname, &stbuf, 0); ! memset(&stbuf, 0, sizeof(stbuf)); } *************** *** 163,193 **** break; - case dap_message::PROTECT: - { - dap_protect_message *pm = (dap_protect_message *)m; - strcpy(owner, pm->get_owner()); - strcpy(prot, pm->get_protection()); - } - break; - - case dap_message::ATTRIB: - { - dap_attrib_message *am = (dap_attrib_message *)m; - size = am->get_size(); - } - break; - - case dap_message::DATE: - { - dap_date_message *dm = (dap_date_message *)m; - strcpy(cdt, dm->make_y2k(dm->get_cdt())); - } - break; - - case dap_message::ACK: - { - } - break; - case dap_message::STATUS: { --- 199,202 ---- *************** *** 206,211 **** else { ! printf("Error opening %s: %s\n", dirname, ! sm->get_message()); name_pending = false; goto flush; --- 215,219 ---- else { ! printf("Error opening %s: %s\n", vmsname, sm->get_message()); name_pending = false; goto flush; *************** *** 228,233 **** if (name_pending) { ! // TODO fill stat ! filler(buf, name, NULL, 0); } conn.close(); --- 236,242 ---- if (name_pending) { ! char unixname[1024]; ! make_unix_filespec(unixname, name); ! filler(buf, name, &stbuf, 0); } conn.close(); |
From: Patrick C. <pa...@us...> - 2005-10-07 13:40:41
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21440/dapfs Added Files: Makefile dapfs.c dapfs_dap.cc dapfs_dap.h Log Message: The start of a dapfs that uses FUSE. --- NEW FILE: Makefile --- # Makefile for dapfs include ../Makefile.common PROG1=dapfs MANPAGES=dapfs.1 PROG1OBJS=dapfs.o dapfs_dap.o all: $(PROG1) $(PROG1): $(PROG1OBJS) $(DEPLIBS) g++ -o$(PROG1) $(PROG1OBJS) -lrms -lfuse install: install -d $(prefix)/bin install -d $(manprefix)/man/man1 install -m 0755 -s $(PROG1) $(prefix)/bin install -m 0644 $(MANPAGES) $(manprefix)/man/man1 dep depend: $(CXX) $(CXXFLAGS) -MM *.cc >.depend 2>/dev/null clean: rm -f $(PROG1) *.o *.bak .depend ifeq (.depend,$(wildcard .depend)) include .depend endif --- NEW FILE: dapfs.c --- /* dapfs via FUSE */ /* FUSE: Filesystem in Userspace Copyright (C) 2001-2005 Miklos Szeredi <mi...@sz...> This program can be distributed under the terms of the GNU GPL. See the file COPYING. */ #define _FILE_OFFSET_BITS 64 #define FUSE_USE_VERSION 22 #include <fuse.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <syslog.h> #include <dirent.h> #include <errno.h> #include <sys/statfs.h> #include <netdnet/dn.h> #include "rms.h" #include "dapfs_dap.h" char prefix[1024]; static int dapfs_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) { return dapfs_readdir_dap(path, buf, filler, offset, fi); } static int dapfs_unlink(const char *path) { // TODO May need to use libdap directly. return -ENOSYS; } static int dapfs_rmdir(const char *path) { // TODO May need to use libdap directly. return -ENOSYS; } static int dapfs_rename(const char *from, const char *to) { // TODO May need to use libdap directly. return -ENOSYS; } static int dapfs_truncate(const char *path, off_t size) { // TODO return -ENOSYS; } static int dapfs_utime(const char *path, struct utimbuf *buf) { // TODO return -ENOSYS; } static int dapfs_open(const char *path, struct fuse_file_info *fi) { RMSHANDLE h; char fullname[2048]; // TODO: This WILL break on VMS - we need to nick the Unix->VMS path stuff from FAL sprintf(fullname, "%s%s", prefix, path); syslog(1, "dapfs: filename: %s\n", fullname); h = rms_open(fullname, fi->flags, NULL); syslog(1, "dapfs: rms_open %p, %d\n", h, errno); if (!h) return -errno; fi->fh = (unsigned long)h; return 0; } static int dapfs_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { int res; int got = 0; struct RAB rab; RMSHANDLE h = (RMSHANDLE)fi->fh; // TODO Detect if offset hasn't changed... memset(&rab, 0, sizeof(rab)); if (offset) { rab.rab$l_kbf = &offset; rab.rab$b_rac = 2;//FB$RFA; rab.rab$b_ksz = sizeof(offset); } do { res = rms_read(h, buf+got, size-got, &rab); if (res) got += res; syslog(1, "rms_read returned %d (errno=%d) size = %d\n", res, errno, size); } while (res > 0); if (res >= 0) res = got; if (res == -1) res = -errno; return res; } static int dapfs_write(const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { // TODO return -ENOSYS; } static int dapfs_release(const char *path, struct fuse_file_info *fi) { return rms_close((RMSHANDLE)fi->fh); } static int dapfs_getattr(const char *path, struct stat *stbuf) { int res; syslog(1, "dapfs - getattr on %s\n", path); if (strcmp(path, "/") == 0) { res = stat("/", stbuf); } else { res = dapfs_getattr_dap(path, stbuf); } return res; } static struct fuse_operations dapfs_oper = { .unlink = dapfs_unlink, .getattr = dapfs_getattr, .truncate = dapfs_truncate, .open = dapfs_open, .read = dapfs_read, .write = dapfs_write, .readdir = dapfs_readdir, .rmdir = dapfs_rmdir, .rename = dapfs_rename, .utime = dapfs_utime, .release = dapfs_release, }; int main(int argc, char *argv[]) { // This is the host name ending :: (eg zarqon"patrick password"::) strcpy(prefix, argv[1]); return fuse_main(argc-1, argv+1, &dapfs_oper); } --- NEW FILE: dapfs_dap.cc --- #define _FILE_OFFSET_BITS 64 #define FUSE_USE_VERSION 22 #include <fuse.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <syslog.h> #include <dirent.h> #include <errno.h> #include <sys/statfs.h> #include <netdnet/dn.h> #include "connection.h" #include "protocol.h" #include "dapfs_dap.h" int dapfs_getattr_dap(const char *path, struct stat *stbuf) { dap_connection conn(0); char dirname[256] = {'\0'}; char name[80],cdt[25],owner[20],prot[22]; int size; if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { return -ENOTCONN; } // Exchange config messages if (!conn.exchange_config()) { fprintf(stderr, "Error in config: %s\n", conn.get_error()); return -1; } dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); acc.set_filespec(path); // PJC TODO Translate to VMS format... acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | dap_access_message::DISPLAY_PROT_MASK); acc.write(conn); bool name_pending = false; dap_message *m; char volname[256]; // Loop through the files we find while ( ((m=dap_message::read_message(conn, true) )) ) { switch (m->get_type()) { case dap_message::NAME: break; case dap_message::PROTECT: { dap_protect_message *pm = (dap_protect_message *)m; stbuf->st_mode = pm->get_mode(); stbuf->st_uid = 0; stbuf->st_gid = 0; } break; case dap_message::ATTRIB: { dap_attrib_message *am = (dap_attrib_message *)m; stbuf->st_size = am->get_size(); stbuf->st_blksize = am->get_bsz(); stbuf->st_blocks = am->get_alq(); } break; case dap_message::DATE: { dap_date_message *dm = (dap_date_message *)m; stbuf->st_atime = dm->get_rdt_time(); stbuf->st_ctime = dm->get_cdt_time(); stbuf->st_mtime = dm->get_cdt_time(); } break; case dap_message::ACK: break; case dap_message::STATUS: case dap_message::ACCOMP: delete m; goto finished; } } // TODO if name ends in .DIR;1 then add DIRECTORY to st_mode // TODO Errors; finished: conn.close(); return 0; } int dapfs_readdir_dap(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) { dap_connection conn(0); char dirname[256] = {'\0'}; char name[80],cdt[25],owner[20],prot[22]; int size; if (!conn.connect(prefix, dap_connection::FAL_OBJECT, dirname)) { return -ENOTCONN; } // Exchange config messages if (!conn.exchange_config()) { fprintf(stderr, "Error in config: %s\n", conn.get_error()); return -1; } dap_access_message acc; acc.set_accfunc(dap_access_message::DIRECTORY); acc.set_accopt(1); acc.set_filespec(path); // PJC TODO Translate to VMS format... acc.set_display(dap_access_message::DISPLAY_MAIN_MASK | dap_access_message::DISPLAY_DATE_MASK | dap_access_message::DISPLAY_PROT_MASK); acc.write(conn); bool name_pending = false; dap_message *m; char volname[256]; // Loop through the files we find while ( ((m=dap_message::read_message(conn, true) )) ) { switch (m->get_type()) { case dap_message::NAME: { if (name_pending) { name_pending = false; // TODO fill stat filler(buf, name, NULL, 0); } dap_name_message *nm = (dap_name_message *)m; if (nm->get_nametype() == dap_name_message::VOLUME) { strcpy(volname, nm->get_namespec()); } if (nm->get_nametype() == dap_name_message::FILENAME) { strcpy(name, nm->get_namespec()); name_pending = true; } } break; case dap_message::PROTECT: { dap_protect_message *pm = (dap_protect_message *)m; strcpy(owner, pm->get_owner()); strcpy(prot, pm->get_protection()); } break; case dap_message::ATTRIB: { dap_attrib_message *am = (dap_attrib_message *)m; size = am->get_size(); } break; case dap_message::DATE: { dap_date_message *dm = (dap_date_message *)m; strcpy(cdt, dm->make_y2k(dm->get_cdt())); } break; case dap_message::ACK: { } break; case dap_message::STATUS: { // Send a SKIP if the file is locked, else it's an error dap_status_message *sm = (dap_status_message *)m; if (sm->get_code() == 0x4030) { dap_contran_message cm; cm.set_confunc(dap_contran_message::SKIP); if (!cm.write(conn)) { fprintf(stderr, "Error sending skip: %s\n", conn.get_error()); goto finished; } } else { printf("Error opening %s: %s\n", dirname, sm->get_message()); name_pending = false; goto flush; } break; } case dap_message::ACCOMP: goto flush; } delete m; } finished: // An error: fprintf(stderr, "Error: %s\n", conn.get_error()); conn.close(); return 2; flush: if (name_pending) { // TODO fill stat filler(buf, name, NULL, 0); } conn.close(); return 0; } --- NEW FILE: dapfs_dap.h --- #ifdef __cplusplus extern "C" { #endif int dapfs_readdir_dap(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi); int dapfs_getattr_dap(const char *path, struct stat *stbuf); #ifdef __cplusplus } #endif extern char prefix[]; |
From: Patrick C. <pa...@us...> - 2005-10-07 13:39:48
|
Update of /cvsroot/linux-decnet/dnprogs/dapfs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21247/dapfs Log Message: Directory /cvsroot/linux-decnet/dnprogs/dapfs added to the repository |
From: Patrick C. <pa...@us...> - 2005-09-30 10:24:29
|
Update of /cvsroot/linux-decnet/latd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9828 Modified Files: configure.in Log Message: Version 1.24 Index: configure.in =================================================================== RCS file: /cvsroot/linux-decnet/latd/configure.in,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -r1.14 -r1.15 *** configure.in 6 Mar 2005 13:39:24 -0000 1.14 --- configure.in 30 Sep 2005 10:24:20 -0000 1.15 *************** *** 3,7 **** dnl Checks that we are given a good source directory. AC_INIT(latcp.cc) ! AM_INIT_AUTOMAKE(latd, 1.23) dnl Checks for programs. --- 3,7 ---- dnl Checks that we are given a good source directory. AC_INIT(latcp.cc) ! AM_INIT_AUTOMAKE(latd, 1.24) dnl Checks for programs. |
From: Patrick C. <pa...@us...> - 2005-09-30 10:21:47
|
Update of /cvsroot/linux-decnet/latd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9220 Modified Files: interfaces-bpf.cc Log Message: Use AF_LINK rather than AF_UNSPEC (if available) for setting multicast address. Index: interfaces-bpf.cc =================================================================== RCS file: /cvsroot/linux-decnet/latd/interfaces-bpf.cc,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** interfaces-bpf.cc 5 Jan 2004 15:22:04 -0000 1.10 --- interfaces-bpf.cc 30 Sep 2005 10:21:33 -0000 1.11 *************** *** 527,530 **** --- 527,542 ---- } + /* This is the LAT multicast address */ + static void store_lat_multicast(unsigned char *addr) + { + addr[0] = 0x09; + addr[1] = 0x00; + addr[2] = 0x2b; + addr[3] = 0x00; + addr[4] = 0x00; + addr[5] = 0x0f; + } + + // Open a connection on an interface int BPFInterfaces::set_lat_multicast(int ifn) *************** *** 533,536 **** --- 545,553 ---- struct bpf_program program; int dummy_fd; + #ifdef HAVE_AF_LINK + struct sockaddr_dl *sockdl; + #endif + + memset(&interface_ifreq, 0, sizeof(interface_ifreq)); /* if we don't have an interface, bail: */ *************** *** 580,594 **** } ! /* This is the LAT multicast address */ interface_ifreq.ifr_addr.sa_family = AF_UNSPEC; #ifdef HAVE_SOCKADDR_SA_LEN interface_ifreq.ifr_addr.sa_len = sizeof(interface_ifreq.ifr_addr); #endif /* HAVE_SOCKADDR_SA_LEN */ ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[0] = 0x09; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[1] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[2] = 0x2b; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[3] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[4] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[5] = 0x0f; if (ioctl(dummy_fd, SIOCADDMULTI, &interface_ifreq) < 0) { debuglog(("bpf: failed to add to the multicast list for interface for %s: %s\n", --- 597,614 ---- } ! #ifdef HAVE_AF_LINK ! sockdl = (sockaddr_dl *)&interface_ifreq.ifr_addr; ! sockdl->sdl_family = AF_LINK; ! sockdl->sdl_alen = 6; ! store_lat_multicast((unsigned char *)sockdl->sdl_data); ! #else interface_ifreq.ifr_addr.sa_family = AF_UNSPEC; + store_lat_multicast((unsigned char *)interface_ifreq.ifr_addr.sa_data); + #endif #ifdef HAVE_SOCKADDR_SA_LEN interface_ifreq.ifr_addr.sa_len = sizeof(interface_ifreq.ifr_addr); #endif /* HAVE_SOCKADDR_SA_LEN */ ! ! if (ioctl(dummy_fd, SIOCADDMULTI, &interface_ifreq) < 0) { debuglog(("bpf: failed to add to the multicast list for interface for %s: %s\n", *************** *** 610,613 **** --- 630,638 ---- struct ifreq interface_ifreq; int dummy_fd; + #ifdef HAVE_AF_LINK + struct sockaddr_dl *sockdl; + #endif + + memset(&interface_ifreq, 0, sizeof(interface_ifreq)); /* if we don't have an interface, bail: */ *************** *** 626,640 **** } ! /* This is the LAT multicast address */ interface_ifreq.ifr_addr.sa_family = AF_UNSPEC; #ifdef HAVE_SOCKADDR_SA_LEN interface_ifreq.ifr_addr.sa_len = sizeof(interface_ifreq.ifr_addr); #endif /* HAVE_SOCKADDR_SA_LEN */ ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[0] = 0x09; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[1] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[2] = 0x2b; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[3] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[4] = 0x00; ! ((unsigned char *) interface_ifreq.ifr_addr.sa_data)[5] = 0x0f; if (ioctl(dummy_fd, SIOCDELMULTI, &interface_ifreq) < 0) { debuglog(("bpf: failed to delete from the multicast list for interface for %s: %s\n", --- 651,667 ---- } ! #ifdef HAVE_AF_LINK ! sockdl = (sockaddr_dl *)&interface_ifreq.ifr_addr; ! sockdl->sdl_family = AF_LINK; ! sockdl->sdl_alen = 6; ! store_lat_multicast((unsigned char *)sockdl->sdl_data); ! #else interface_ifreq.ifr_addr.sa_family = AF_UNSPEC; + store_lat_multicast((unsigned char *)interface_ifreq.ifr_addr.sa_data); + #endif #ifdef HAVE_SOCKADDR_SA_LEN interface_ifreq.ifr_addr.sa_len = sizeof(interface_ifreq.ifr_addr); #endif /* HAVE_SOCKADDR_SA_LEN */ ! if (ioctl(dummy_fd, SIOCDELMULTI, &interface_ifreq) < 0) { debuglog(("bpf: failed to delete from the multicast list for interface for %s: %s\n", |
From: Patrick C. <pa...@us...> - 2005-09-02 08:42:07
|
Update of /cvsroot/linux-decnet/dnprogs/debian In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22705/debian Modified Files: changelog Log Message: Update for 2.30 Index: changelog =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/debian/changelog,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -r1.32 -r1.33 *** changelog 2 May 2005 10:25:59 -0000 1.32 --- changelog 2 Sep 2005 08:41:59 -0000 1.33 *************** *** 1,2 **** --- 1,16 ---- + dnprogs (2.30) unstable; urgency=low + + * Add -l option to dncopy. (ignore interlocks) + * Add more RMS features to librms & libdap + + -- Patrick Caulfield <pa...@de...> Fri, 2 Sep 2005 09:24:41 +0100 + + dnprogs (2.29.2) unstable; urgency=low + + * Add Czech debconf translation. + Closes: #315989 + + -- Patrick Caulfield <pa...@de...> Thu, 30 Jun 2005 14:30:27 +0100 + dnprogs (2.29.1) unstable; urgency=low |
From: Patrick C. <pa...@us...> - 2005-09-01 12:53:19
|
Update of /cvsroot/linux-decnet/dnprogs/libdap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6167 Modified Files: protocol.cc protocol.h Log Message: Add some more DAP fields Index: protocol.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/libdap/protocol.cc,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -r1.11 -r1.12 *** protocol.cc 26 Jan 2005 14:06:59 -0000 1.11 --- protocol.cc 1 Sep 2005 12:53:04 -0000 1.12 *************** *** 934,937 **** --- 934,939 ---- if (ctlmenu.get_bit(4)) hsh.write(c); if (ctlmenu.get_bit(5)) display.write(c); + if (ctlmenu.get_bit(6)) blkcnt.write(c); + if (ctlmenu.get_bit(7)) usz.write(c); return c.write(); } *************** *** 947,950 **** --- 949,954 ---- if (ctlmenu.get_bit(4) && !hsh.read(c)) return false; if (ctlmenu.get_bit(5) && !display.read(c)) return false; + if (ctlmenu.get_bit(6) && !blkcnt.read(c)) return false; + if (ctlmenu.get_bit(7) && !usz.read(c)) return false; return true; } *************** *** 1051,1054 **** --- 1055,1080 ---- } + void dap_control_message::set_blkcnt(int f) + { + blkcnt.set_byte(0,f); + ctlmenu.set_bit(6); + } + + int dap_control_message::get_blkcnt() + { + return blkcnt.get_byte(0); + } + + void dap_control_message::set_usz(int f) + { + usz.set_short(f); + ctlmenu.set_bit(7); + } + + int dap_control_message::get_usz() + { + return usz.get_short(); + } + //------------------------ dap_contran_message() ------------------------------ Index: protocol.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/libdap/protocol.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** protocol.h 1 Sep 2005 08:20:49 -0000 1.6 --- protocol.h 1 Sep 2005 12:53:04 -0000 1.7 *************** *** 226,229 **** --- 226,242 ---- static const int OS_RSX11MP = 12; static const int OS_COPOS11 = 13; + static const int OS_POS = 14; + static const int OS_VAXLELN = 15; + static const int OS_CPM = 16; + static const int OS_MSDOS = 17; + static const int OS_ULTRIX = 18; + static const int OS_ULTRIX11 = 19; + static const int OS_DTF_MVS = 21; + static const int OS_MACOS = 22; + static const int OS_OS2 = 23; + static const int OS_DTF_VM = 24; + static const int OS_OSF1 = 25; + static const int OS_WIN_NT = 26; + static const int OS_WIN_95 = 27; private: *************** *** 350,353 **** --- 363,367 ---- static const int FB$BLK = 3; static const int FB$LSA = 6; + static const int FB$MACY11 = 7; //FOPs: *************** *** 479,482 **** --- 493,498 ---- static const int FB$BIO = 5; static const int FB$BRO = 6; + static const int FB$APP = 7; // FAC (Append) + static const int FB$NIL = 7; // SHR (no access by other users) // bits for DISPLAY *************** *** 489,492 **** --- 505,512 ---- static const int DISPLAY_ACL = 7; static const int DISPLAY_NAME = 8; + static const int DISPLAY_3PTNAME = 9; + static const int DISPLAY_COLLTBL = 10; + static const int DISPLAY_CDA = 11; + static const int DISPLAY_TCL = 12; // masks for DISPLAY *************** *** 499,502 **** --- 519,526 ---- static const int DISPLAY_ACL_MASK = 128; static const int DISPLAY_NAME_MASK = 256; + static const int DISPLAY_3PTNAME_MASK = 512; + static const int DISPLAY_COLLTBL_MASK = 1024; + static const int DISPLAY_CDA_MASK = 2048; + static const int DISPLAY_TCL_MASK = 4096; private: *************** *** 522,526 **** rop(6), hsh(5), ! display(4) {msg_type = CONTROL;} --- 546,552 ---- rop(6), hsh(5), ! display(4), ! blkcnt(1), ! usz(2) {msg_type = CONTROL;} *************** *** 536,539 **** --- 562,567 ---- void set_rop(int f); void set_display(int); + void set_blkcnt(int); + void set_usz(int); int get_ctlfunc(); *************** *** 544,547 **** --- 572,577 ---- int get_display(); unsigned long get_long_key(); + int get_blkcnt(); + int get_usz(); // ctlfunc - Control functions: *************** *** 607,610 **** --- 637,642 ---- dap_image hsh; dap_ex display; + dap_bytes blkcnt; + dap_bytes usz; }; *************** *** 624,627 **** --- 656,661 ---- static const int ABORT = 3; static const int RESUME = 4; + static const int TERMINATE = 5; + static const int RESYNC = 6; int get_confunc(); *************** *** 672,675 **** --- 706,712 ---- static const int END_OF_STREAM = 4; static const int SKIP = 5; + static const int CHANGE_BEGIN = 6; + static const int CHANGE_END = 7; + static const int TERMINATE = 8; private: |
From: Patrick C. <pa...@us...> - 2005-09-01 09:38:58
|
Update of /cvsroot/linux-decnet/dnprogs/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19075/scripts Modified Files: decnet.sh Log Message: Improve RPMs Index: decnet.sh =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/scripts/decnet.sh,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** decnet.sh 5 Nov 2003 11:48:17 -0000 1.9 --- decnet.sh 1 Sep 2005 09:28:01 -0000 1.10 *************** *** 49,53 **** if [ ! -f /etc/decnet.conf ] then ! echo "DECnet not started as it is not configured." exit 1 fi --- 49,53 ---- if [ ! -f /etc/decnet.conf ] then ! echo $"DECnet not started as it is not configured." exit 1 fi *************** *** 59,68 **** if [ ! -f /proc/net/decnet ] then ! echo "DECnet not started as it is not in the kernel." exit 1 fi fi ! echo -n "Starting DECnet: " NODE=`grep executor /etc/decnet.conf| awk '{print $2}'` --- 59,68 ---- if [ ! -f /proc/net/decnet ] then ! echo $"DECnet not started as it is not in the kernel." exit 1 fi fi ! echo -n $"Starting DECnet: " NODE=`grep executor /etc/decnet.conf| awk '{print $2}'` *************** *** 75,105 **** do $startcmd $prefix/sbin/$i ! echo -n " `eval echo $startecho`" done ! echo "$startendecho" ;; stop) ! echo -n "Stopping DECnet... " for i in $daemons do $stopcmd $prefix/sbin/$i done ! echo "$stopendecho" ;; restart|reload|force-reload) ! echo -n "Restarting DECnet: " for i in $daemons do $stopcmd $prefix/sbin/$i $startcmd $prefix/sbin/$i ! echo -n "$startecho" done ! echo "$stopendecho" ;; *) ! echo "Usage $0 {start|stop|restart|force-reload}" ;; esac --- 75,105 ---- do $startcmd $prefix/sbin/$i ! echo -n $" `eval echo $startecho`" done ! echo $"$startendecho" ;; stop) ! echo -n $"Stopping DECnet... " for i in $daemons do $stopcmd $prefix/sbin/$i done ! echo $"$stopendecho" ;; restart|reload|force-reload) ! echo -n $"Restarting DECnet: " for i in $daemons do $stopcmd $prefix/sbin/$i $startcmd $prefix/sbin/$i ! echo -n $"$startecho" done ! echo $"$stopendecho" ;; *) ! echo $"Usage $0 {start|stop|restart|force-reload}" ;; esac |
From: Patrick C. <pa...@us...> - 2005-09-01 09:35:01
|
Update of /cvsroot/linux-decnet/dnprogs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19075 Modified Files: Makefile rpm.spec Log Message: Improve RPMs Index: Makefile =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/Makefile,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -r1.23 -r1.24 *** Makefile 5 Nov 2003 11:48:17 -0000 1.23 --- Makefile 1 Sep 2005 09:28:01 -0000 1.24 *************** *** 69,73 **** echo "`rpm --showrc|grep \^macrofiles`:`pwd`/.rpmmacros" >.rpmrc make prefix=/usr RELEASE=true -j ! make DESTDIR=`pwd`/rpmbuild install ln -sf libdnet.so.2 rpmbuild/usr/lib/libdnet.so.1 make dist --- 69,73 ---- echo "`rpm --showrc|grep \^macrofiles`:`pwd`/.rpmmacros" >.rpmrc make prefix=/usr RELEASE=true -j ! make DESTDIR=`pwd`/rpmbuild RELEASE=true install ln -sf libdnet.so.2 rpmbuild/usr/lib/libdnet.so.1 make dist Index: rpm.spec =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/rpm.spec,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** rpm.spec 15 Oct 2003 15:46:52 -0000 1.7 --- rpm.spec 1 Sep 2005 09:28:01 -0000 1.8 *************** *** 4,8 **** Release: 1 Vendor: Patrick Caulfield and The Linux DECnet Project team ! Copyright: GPL Group: Networking/Utilities Source: http://download.sourceforge.net/linux-decnet/%%PACKAGENAME%%-%%VERSION%%.tar.gz --- 4,8 ---- Release: 1 Vendor: Patrick Caulfield and The Linux DECnet Project team ! License: GPL Group: Networking/Utilities Source: http://download.sourceforge.net/linux-decnet/%%PACKAGENAME%%-%%VERSION%%.tar.gz *************** *** 65,68 **** --- 65,70 ---- %%PREFIX%%/man/man3/setnodeent.3 %%PREFIX%%/man/man3/dnet_daemon.3 + %%PREFIX%%/man/man3/dnet_accept.3 + %%PREFIX%%/man/man3/dnet_reject.3 %%PREFIX%%/man/man5/decnet.conf.5 %%PREFIX%%/man/man5/decnet.proxy.5 |
From: Patrick C. <pa...@us...> - 2005-09-01 09:28:27
|
Update of /cvsroot/linux-decnet/dnprogs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19288 Modified Files: Makefile.common Log Message: Bump version Index: Makefile.common =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/Makefile.common,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** Makefile.common 28 Jan 2005 15:32:43 -0000 1.29 --- Makefile.common 1 Sep 2005 09:28:16 -0000 1.30 *************** *** 58,62 **** MAJOR_VERSION=2 ! MINOR_VERSION=29 VERSION=$(MAJOR_VERSION).$(MINOR_VERSION) --- 58,62 ---- MAJOR_VERSION=2 ! MINOR_VERSION=30 VERSION=$(MAJOR_VERSION).$(MINOR_VERSION) |
From: Patrick C. <pa...@us...> - 2005-09-01 09:10:16
|
Update of /cvsroot/linux-decnet/dnprogs/fal In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28037 Modified Files: task.cc Log Message: Set directory bit on directories Index: task.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/fal/task.cc,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** task.cc 8 Dec 2004 14:45:13 -0000 1.15 --- task.cc 1 Sep 2005 08:58:11 -0000 1.16 *************** *** 616,619 **** --- 616,622 ---- struct stat st; + if (stat(name, &st) == 0 && S_ISDIR(st.st_mode)) + attrib_msg->set_fop_bit(dap_attrib_message::FB$DIR); + // Ignore Directories if (stat(name, &st) == 0 && S_ISDIR(st.st_mode)) return false; |
From: Patrick C. <pa...@us...> - 2005-09-01 08:56:10
|
Update of /cvsroot/linux-decnet/dnprogs/dndir In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27367 Modified Files: dndir.cc Log Message: Display directory attribute. Bit pointless as VMS never seems to set it. But it was worth a try :) Index: dndir.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dndir/dndir.cc,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** dndir.cc 17 Jul 2002 09:24:24 -0000 1.5 --- dndir.cc 1 Sep 2005 08:56:01 -0000 1.6 *************** *** 673,676 **** --- 673,679 ---- } + if (attrib_msg->get_fop_bit(dap_attrib_message::FB$DIR)) + printf(" Directory file\n"); + printf("Record Format: "); switch (attrib_msg->get_rfm()) |
From: Patrick C. <pa...@us...> - 2005-09-01 08:34:54
|
Update of /cvsroot/linux-decnet/dnprogs/dncopy In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12793 Modified Files: dncopy.1 dncopy.cc dnetfile.cc dnetfile.h dnetfile_dap.cc file.h unixfile.cc unixfile.h Log Message: Add option to read file regardless of interlocks Index: dncopy.1 =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/dncopy.1,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** dncopy.1 26 Jan 2005 14:20:19 -0000 1.6 --- dncopy.1 1 Sep 2005 08:34:39 -0000 1.7 *************** *** 16,20 **** Options: .br ! [\-vdiskVh] [\-m mode] [\-a record attributes] [\-r record format] [\-b block size] [\-p VMS protection] .SH DESCRIPTION --- 16,20 ---- Options: .br ! [\-vdisklVh] [\-m mode] [\-a record attributes] [\-r record format] [\-b block size] [\-p VMS protection] .SH DESCRIPTION *************** *** 86,89 **** --- 86,93 ---- equivalent to the /CONFIRM qualifier on the DCL copy command. .TP + .I "\-l" + Ignore interlocks on files copied from VMS. This will do its best to read the + data regardless of record or file locking, but it won't always succeed. + .TP .I "\-s" Show transfer statistics. This shows the throughput of all copies (in the case Index: dncopy.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/dncopy.cc,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** dncopy.cc 26 Jan 2005 14:20:19 -0000 1.6 --- dncopy.cc 1 Sep 2005 08:34:39 -0000 1.7 *************** *** 1,4 **** /****************************************************************************** ! (c) 1998-2000 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify --- 1,4 ---- /****************************************************************************** ! (c) 1998-2005 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify *************** *** 38,42 **** int &rfm, int &rat, int &org, int &interactive, int &keep_version, int &user_bufsize, ! int &remove_cr, int &show_stats, int &verbose, char *protection); // Start here: --- 38,42 ---- int &rfm, int &rat, int &org, int &interactive, int &keep_version, int &user_bufsize, ! int &remove_cr, int &show_stats, int &verbose, int &rrl, char *protection); // Start here: *************** *** 59,62 **** --- 59,63 ---- int remove_cr = 0; int show_stats = 0; + int rrl = 0; char opt; char protection[255]; *************** *** 84,88 **** rfm, rat,org, interactive, keep_version, user_bufsize, ! remove_cr, show_stats, verbose, protection); --- 85,89 ---- rfm, rat,org, interactive, keep_version, user_bufsize, ! remove_cr, show_stats, verbose, rrl, protection); *************** *** 91,95 **** rfm, rat,org, interactive, keep_version, user_bufsize, ! remove_cr, show_stats, verbose, protection); // Work out the buffer size. The default for block transfers is 512 --- 92,96 ---- rfm, rat,org, interactive, keep_version, user_bufsize, ! remove_cr, show_stats, verbose, rrl, protection); // Work out the buffer size. The default for block transfers is 512 *************** *** 152,156 **** // Set up the network links if necessary ! if (out->setup_link(bufsize, rfm, rat, org)) { out->perror("Error setting up output link"); --- 153,157 ---- // Set up the network links if necessary ! if (out->setup_link(bufsize, rfm, rat, org, 0)) { out->perror("Error setting up output link"); *************** *** 163,167 **** for (filenum = optind; filenum < last_infile; filenum++) { ! in = getFile(argv[filenum], verbose); // Now we have the first file name, if it is the only input file then --- 164,168 ---- for (filenum = optind; filenum < last_infile; filenum++) { ! in = getFile(argv[filenum], verbose); // Now we have the first file name, if it is the only input file then *************** *** 177,181 **** } ! if (in->setup_link(bufsize, rfm, rat, org)) { in->perror("Error setting up input link"); --- 178,182 ---- } ! if (in->setup_link(bufsize, rfm, rat, org, rrl)) { in->perror("Error setting up input link"); *************** *** 355,358 **** --- 356,360 ---- fprintf(f, " -b <n> use a block size of <n> bytes\n"); fprintf(f, " -d (s)remove trailing CR on record (DOS file transfer)\n"); + fprintf(f, " -l (r)Ignore interlocks on remote file\n"); fprintf(f, " -V show version number\n"); fprintf(f, "\n"); *************** *** 435,444 **** int &rfm, int &rat, int &org, int &interactive, int &keep_version, int &user_bufsize, ! int &remove_cr, int &show_stats, int &verbose, char *protection) { int opt; opterr = 0; optind = 0; ! while ((opt=getopt(argc,argv,"?Vvhdr:a:b:kism:p:")) != EOF) { switch(opt) { --- 437,446 ---- int &rfm, int &rat, int &org, int &interactive, int &keep_version, int &user_bufsize, ! int &remove_cr, int &show_stats, int &verbose, int &rrl, char *protection) { int opt; opterr = 0; optind = 0; ! while ((opt=getopt(argc,argv,"?Vvhdr:a:b:kislm:p:")) != EOF) { switch(opt) { *************** *** 455,458 **** --- 457,464 ---- break; + case 'l': + rrl = 1; + break; + case 'r': if (tolower(optarg[0]) == 'f') rfm = file::RFM_FIX; *************** *** 511,523 **** case 'p': strcpy(protection, optarg); { ! // Validate protection ! dap_protect_message prot; ! if (prot.set_protection(protection) == -1) ! { ! fprintf(stderr, "Invalid VMS protection string\n"); ! exit(1); ! } ! } break; --- 517,530 ---- case 'p': strcpy(protection, optarg); + strcpy(protection, optarg); { ! // Validate protection ! dap_protect_message prot; ! if (prot.set_protection(protection) == -1) ! { ! fprintf(stderr, "Invalid VMS protection string\n"); ! exit(1); ! } ! } break; Index: dnetfile.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/dnetfile.cc,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** dnetfile.cc 26 Jan 2005 14:20:19 -0000 1.5 --- dnetfile.cc 1 Sep 2005 08:34:39 -0000 1.6 *************** *** 68,72 **** } ! int dnetfile::setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode) { // If there was a parse error in the file name then fail here --- 68,72 ---- } ! int dnetfile::setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode, int flags) { // If there was a parse error in the file name then fail here *************** *** 81,84 **** --- 81,85 ---- transfer_mode = xfer_mode; user_bufsize = bufsize; + user_flags = flags; struct accessdata_dn accessdata; Index: dnetfile.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/dnetfile.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** dnetfile.h 26 Jan 2005 14:20:19 -0000 1.3 --- dnetfile.h 1 Sep 2005 08:34:39 -0000 1.4 *************** *** 13,17 **** // Stuff overriden from file. ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode); virtual int open(char *mode); virtual int open(char *basename, char *mode); --- 13,17 ---- // Stuff overriden from file. ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode, int flags); virtual int open(char *mode); virtual int open(char *basename, char *mode); *************** *** 54,57 **** --- 54,58 ---- int file_rat, file_rfm; int user_rat, user_rfm; + int user_flags; int transfer_mode; int file_fsz; // Size of VFC fixed part. Index: dnetfile_dap.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/dnetfile_dap.cc,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** dnetfile_dap.cc 26 Jan 2005 14:20:19 -0000 1.7 --- dnetfile_dap.cc 1 Sep 2005 08:34:39 -0000 1.8 *************** *** 1,4 **** /****************************************************************************** ! (c) 1998-2002 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify --- 1,4 ---- /****************************************************************************** ! (c) 1998-2005 P.J. Caulfield pa...@ty... This program is free software; you can redistribute it and/or modify *************** *** 94,97 **** --- 94,103 ---- att.set_mrs(0); att.set_datatype(dap_attrib_message::IMAGE); + if (user_flags) { + acc.set_shr(1<<dap_access_message::FB$PUT | + 1<<dap_access_message::FB$UPD | + 1<<dap_access_message::FB$GET | + 1<<dap_access_message::FB$DEL); + } att.write(conn); *************** *** 217,220 **** --- 223,230 ---- ctl.set_ctlfunc(dap_control_message::PUT); } + else + { + ctl.set_rop_bit(dap_control_message::RB$RRL); + } return !ctl.write(conn); } *************** *** 338,343 **** { dap_protect_message prot; ! prot.set_protection(protection); ! prot.write(conn); } return conn.set_blocked(false); --- 348,355 ---- { dap_protect_message prot; ! if (prot.set_protection(protection) == -1) ! fprintf(stderr, "Error in protection string - not sent\n"); ! else ! prot.write(conn); } return conn.set_blocked(false); Index: file.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/file.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** file.h 26 Jan 2005 14:20:19 -0000 1.2 --- file.h 1 Sep 2005 08:34:39 -0000 1.3 *************** *** 18,22 **** virtual ~file() {}; ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode) = 0; virtual int open(char *mode) = 0; virtual int open(char *basename, char *mode) = 0; --- 18,22 ---- virtual ~file() {}; ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode, int flags) = 0; virtual int open(char *mode) = 0; virtual int open(char *basename, char *mode) = 0; Index: unixfile.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/unixfile.cc,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** unixfile.cc 4 May 2003 12:29:03 -0000 1.3 --- unixfile.cc 1 Sep 2005 08:34:39 -0000 1.4 *************** *** 172,176 **** } ! int unixfile::setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode) { // Save these for later --- 172,176 ---- } ! int unixfile::setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode, int flags) { // Save these for later Index: unixfile.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/dncopy/unixfile.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -r1.1.1.1 -r1.2 *** unixfile.h 26 Apr 2000 08:22:03 -0000 1.1.1.1 --- unixfile.h 1 Sep 2005 08:34:39 -0000 1.2 *************** *** 7,11 **** ~unixfile(); ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode); virtual int open(char *mode); --- 7,11 ---- ~unixfile(); ! virtual int setup_link(unsigned int bufsize, int rfm, int rat, int xfer_mode, int flags); virtual int open(char *mode); |
From: Patrick C. <pa...@us...> - 2005-09-01 08:27:48
|
Update of /cvsroot/linux-decnet/dnprogs/libdap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3373 Modified Files: protocol.h Log Message: Add some more DAP features Index: protocol.h =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/libdap/protocol.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** protocol.h 26 Jan 2005 14:06:59 -0000 1.5 --- protocol.h 1 Sep 2005 08:20:49 -0000 1.6 *************** *** 17,20 **** --- 17,21 ---- virtual bool read(dap_connection&) = 0; virtual bool write(dap_connection&) = 0; + virtual ~dap_item() {} }; *************** *** 355,358 **** --- 356,360 ---- static const int FB$POS = 3; static const int FB$DLK = 4; + static const int FB$DIR = 5; static const int LOCKED = 6; static const int FB$CTG = 7; *************** *** 588,592 **** static const int RB$RLK = 12; static const int RB$BIO = 13; ! static const int RB$NXR = 14; private: --- 590,600 ---- static const int RB$RLK = 12; static const int RB$BIO = 13; ! static const int RB$LIM = 14; ! static const int RB$NXR = 15; ! static const int RB$WAT = 16; ! static const int RB$RRL = 17; ! static const int RB$REA = 18; ! static const int RB$KLE = 19; ! static const int RB$KLT = 20; private: |
From: Patrick C. <pa...@us...> - 2005-09-01 08:25:40
|
Update of /cvsroot/linux-decnet/dnprogs/librms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4421/librms Modified Files: parse.cc Log Message: Add some more RMS features to librms Index: parse.cc =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/librms/parse.cc,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** parse.cc 13 Sep 2001 13:50:10 -0000 1.5 --- parse.cc 1 Sep 2005 08:21:56 -0000 1.6 *************** *** 405,408 **** --- 405,414 ---- if (strcmp(p, "bio") == 0) {*ptr |= RAB$M_BIO; goto ropdone;} if (strcmp(p, "nxr") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + if (strcmp(p, "wat") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + if (strcmp(p, "rrl") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + if (strcmp(p, "rea") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + if (strcmp(p, "kle") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + if (strcmp(p, "kgt") == 0) {*ptr |= RAB$M_NXR; goto ropdone;} + fprintf(stderr, "Error: unknown record option: %s\n", p); |
From: Patrick C. <pa...@us...> - 2005-09-01 08:22:06
|
Update of /cvsroot/linux-decnet/dnprogs/Documentation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4421/Documentation Modified Files: librms.README Log Message: Add some more RMS features to librms Index: librms.README =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/Documentation/librms.README,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** librms.README 15 Aug 2001 07:17:42 -0000 1.2 --- librms.README 1 Sep 2005 08:21:56 -0000 1.3 *************** *** 206,210 **** rac=seq,key,rfa ! rop=eof,fdl,uif,hsh,loa,ulk,tpt,rah,wbh,kge,kgt,nlk,rlk,bio,nxr kbf Key value krf Key number --- 206,210 ---- rac=seq,key,rfa ! rop=eof,fdl,uif,hsh,loa,ulk,tpt,rah,wbh,kge,kgt,nlk,rlk,bio,nxr,wat,rrl,rea,kle,kgt kbf Key value krf Key number |
From: Patrick C. <pa...@us...> - 2005-06-30 13:31:57
|
Update of /cvsroot/linux-decnet/dnprogs/debian/po In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23692 Added Files: cs.po Log Message: Add Czech po-debconf translation --- NEW FILE: cs.po --- # # Translators, if you are not familiar with the PO format, gettext # documentation is worth reading, especially sections dedicated to # this format, e.g. by running: # info -n '(gettext)PO Files' # info -n '(gettext)Header Entry' # # Some information specific to po-debconf are available at # /usr/share/doc/po-debconf/README-trans # or http://www.debian.org/intl/l10n/po-debconf/README-trans # # Developers do not need to manually edit POT or PO files. # msgid "" msgstr "" "Project-Id-Version: dnprogs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2004-07-09 13:38+0100\n" "PO-Revision-Date: 2005-06-27 13:54+0200\n" "Last-Translator: Miroslav Kure <ku...@de...>\n" "Language-Team: Czech <deb...@li...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../dnet-common.templates:4 msgid "DECnet node name" msgstr "Jméno uzlu v sÃti DECnet" #. Type: string #. Description #: ../dnet-common.templates:4 msgid "" "All nodes on a DECnet network have a node name. This is similar to the IP " "hostname but can only be a maximum of 6 characters long. . It is common that " "the DECnet name is the same as the IP name (if your machine has one). If you " "do not know the answer to this question please contact your system " "administrator." msgstr "" "VÅ¡echny uzly v sÃti DECnet majà své jméno. To je podobné jako jméno poÄÃtaÄe " "v IP sÃtÃch, avÅ¡ak je omezeno na maximálnÄ 6 znaků. BÄžnÄ se pro DECnet " "použije stejné jméno jako má poÄÃtaÄ v sÃti založené na protokolu IP (pokud " "nÄjaké máte). NevÃte-li co zadat, zeptejte se svého správce systému." #. Type: string #. Description #: ../dnet-common.templates:14 msgid "DECnet node address" msgstr "Adresa uzlu v sÃti DECnet" #. Type: string #. Description #: ../dnet-common.templates:14 msgid "" "All nodes on a DECnet network have a node address. This is two numbers " "seperated with a period (eg 3.45) where the first number denotes the area " "and the second is the node within that area." msgstr "" "VÅ¡echny uzly na sÃti DECnet majà svou adresu. Formát adresy jsou dvÄ ÄÃsla " "oddÄlená teÄkou (napÅ. 3.45), kde prvnà ÄÃslo oznaÄuje oblast a druhé uzel " "v dané oblasti." #. Type: string #. Description #: ../dnet-common.templates:14 msgid "" "Do not make up a number here. If you do not know your DECnet node address " "then ask your system administrator." msgstr "" "Adresu DECnet uzlu si nevymýšlejte. Pokud ji neznáte, zeptejte se svého " "systémového správce." #. Type: note #. Description #: ../dnet-common.templates:24 msgid "DECnet startup changes your ethernet hardware address" msgstr "SpuÅ¡tÄnà DECnetu zmÄnà vaÅ¡i ethernetovou hardwarovou adresu" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "The \"setether\" program in this package will change the hardware (MAC) " "address of all ethernet cards in your system (by default) to match the " "DECnet node address. This is essential for the operation of DECnet and so is " "not optional. However, if you have more than one ethernet card you may want " "to edit /etc/default/decnet to alter the list of cards whose hardware " "addresses are changed." msgstr "" "Program \"setether\" zmÄnà hardwarovou (MAC) adresu vÅ¡ech ethernetových karet " "v systému, aby odpovÃdaly adrese uzlu DECnet. To je nezbytné pro správné " "fungovánà DECnetu a tudÞ se musà provést. Pokud vÅ¡ak máte vÃce sÃÅ¥ových " "karet, můžete v souboru /etc/default/decnet upravit seznam karet, jejichž " "hardwarová adresa se má zmÄnit." #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "Be aware that any other machines that have your system's MAC address in " "their ARP cache may no longer be able to communicate with you via IP " "protocols until this cache has timed out or been flushed." msgstr "" "Pamatujte, že okolnà poÄÃtaÄe, které majà MAC adresu vašà sÃÅ¥ové karty " "uloženu ve své ARP tabulce, s vámi nebudou moci komunikovat pÅes IP " "protokoly do té doby, než jim platnost vaÅ¡eho záznamu v ARP tabulce vyprÅ¡Ã, " "nebo dokud ARP tabulku nevyprázdnÃte." #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "The MAC address cannot be changed on-the-fly so you will need to reboot your " "machine before DECnet can function." msgstr "" "MAC adresy nemohou být mÄnÄny za bÄhu a proto budete muset pÅed použitÃm " "DECnetu restartovat svůj poÄÃtaÄ." #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "You should also edit /etc/decnet.conf to add the names and addresses of " "DECnet nodes you want to communicate with." msgstr "" "Také byste mÄli do souboru /etc/decnet.conf pÅidat jména a adresy DECnet " "uzlů, se kterými chcete komunikovat." |
From: Patrick C. <pa...@us...> - 2005-05-21 14:21:57
|
Update of /cvsroot/linux-decnet/latd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26038 Modified Files: server.cc server.h Log Message: Make it compile cleanly on Mac OS/X "Tiger" Index: server.cc =================================================================== RCS file: /cvsroot/linux-decnet/latd/server.cc,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -r1.81 -r1.82 *** server.cc 6 Mar 2005 13:37:51 -0000 1.81 --- server.cc 21 May 2005 14:21:46 -0000 1.82 *************** *** 64,68 **** #include "dn_endian.h" ! #ifdef __APPLE__ typedef int socklen_t; #endif --- 64,68 ---- #include "dn_endian.h" ! #if defined (__APPLE__) && !defined(_SOCKLEN_T) typedef int socklen_t; #endif *************** *** 343,348 **** void LATServer::send_solicit_messages(int sig) { ! static int counter = 0; ! static int last_list_size = 0; if (alarm_mode == 0) { --- 343,349 ---- void LATServer::send_solicit_messages(int sig) { ! static unsigned int counter = 0; ! static unsigned int last_list_size = 0; ! if (alarm_mode == 0) { *************** *** 526,529 **** --- 527,531 ---- struct timeval next_circuit_time; next_circuit_time.tv_sec = 0; + next_circuit_time.tv_usec = 0; #endif Index: server.h =================================================================== RCS file: /cvsroot/linux-decnet/latd/server.h,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -r1.44 -r1.45 *** server.h 4 Jan 2004 15:49:04 -0000 1.44 --- server.h 21 May 2005 14:21:46 -0000 1.45 *************** *** 278,282 **** // LATCP configurable parameters int circuit_timer; // Default 8 (=80 ms) ! int multicast_timer; // Default 60 (seconds) int retransmit_limit;// Default 20 int keepalive_timer; // Default 20 (seconds) --- 278,282 ---- // LATCP configurable parameters int circuit_timer; // Default 8 (=80 ms) ! unsigned int multicast_timer; // Default 60 (seconds) int retransmit_limit;// Default 20 int keepalive_timer; // Default 20 (seconds) |
From: Patrick C. <pa...@us...> - 2005-05-02 10:26:38
|
Update of /cvsroot/linux-decnet/dnprogs/debian In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19388/debian Modified Files: changelog Log Message: 2.29.1 Debian release Index: changelog =================================================================== RCS file: /cvsroot/linux-decnet/dnprogs/debian/changelog,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** changelog 28 Jan 2005 15:32:43 -0000 1.31 --- changelog 2 May 2005 10:25:59 -0000 1.32 *************** *** 1,2 **** --- 1,9 ---- + dnprogs (2.29.1) unstable; urgency=low + + * Add Japanese debconf translation from Kenshi Muto. + Closes: #307049 + + -- Patrick Caulfield <pa...@de...> Mon, 2 May 2005 11:07:22 +0100 + dnprogs (2.29) unstable; urgency=low |
From: Patrick C. <pa...@us...> - 2005-05-02 10:26:19
|
Update of /cvsroot/linux-decnet/dnprogs/debian/po In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19388/debian/po Added Files: ja.po Log Message: 2.29.1 Debian release --- NEW FILE: ja.po --- # # Translators, if you are not familiar with the PO format, gettext # documentation is worth reading, especially sections dedicated to # this format, e.g. by running: # info -n '(gettext)PO Files' # info -n '(gettext)Header Entry' # # Some information specific to po-debconf are available at # /usr/share/doc/po-debconf/README-trans # or http://www.debian.org/intl/l10n/po-debconf/README-trans # # Developers do not need to manually edit POT or PO files. # msgid "" msgstr "" "Project-Id-Version: dnprogs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2004-07-09 13:38+0100\n" "PO-Revision-Date: 2005-04-30 18:27+0900\n" "Last-Translator: Kenshi Muto <km...@de...>\n" "Language-Team: Japanese <deb...@li...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=EUC-JP\n" "Content-Transfer-Encoding: 8bit\n" #. Type: string #. Description #: ../dnet-common.templates:4 msgid "DECnet node name" msgstr "DECnet ¤Î¥Î¡¼¥É̾" #. Type: string #. Description #: ../dnet-common.templates:4 msgid "" "All nodes on a DECnet network have a node name. This is similar to the IP " "hostname but can only be a maximum of 6 characters long. . It is common that " "the DECnet name is the same as the IP name (if your machine has one). If you " "do not know the answer to this question please contact your system " "administrator." msgstr "DECnet ¥Í¥Ã¥È¥ï¡¼¥¯¤Î¤¹¤Ù¤Æ¤Î¥Î¡¼¥É¤Ï¡¢¥Î¡¼¥É̾¤ò»ý¤Á¤Þ¤¹¡£¤³¤ì¤Ï IP ¥Û¥¹¥È̾¤Ë»÷¤Æ¤¤¤Þ¤¹¤¬¡¢ºÇÂç 6 ʸ»ú¤È¤¤¤¦À©¸Â¤¬¤¢¤ê¤Þ¤¹¡£°ìÈÌŪ¤Ë¡¢DECnet ̾¤Ï IP ̾ (¤â¤·¥Þ¥·¥ó¤¬¤½¤ì¤ò»ý¤Ã¤Æ¤¤¤ë¤Ê¤é) ¤ÈƱ¤¸¤Ë¤·¤Þ¤¹¡£¼ÁÌä¤ÎÅú¤¨¤¬¤ï¤«¤é¤Ê¤±¤ì¤Ð¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à´ÉÍý¼Ô¤ËÌ䤤¹ç¤ï¤»¤Æ¤¯¤À¤µ¤¤¡£" #. Type: string #. Description #: ../dnet-common.templates:14 msgid "DECnet node address" msgstr "DECnet ¥Î¡¼¥É¥¢¥É¥ì¥¹" #. Type: string #. Description #: ../dnet-common.templates:14 msgid "" "All nodes on a DECnet network have a node address. This is two numbers " "seperated with a period (eg 3.45) where the first number denotes the area " "and the second is the node within that area." msgstr "DECnet ¥Í¥Ã¥È¥ï¡¼¥¯¤Î¤¹¤Ù¤Æ¤Î¥Î¡¼¥É¤Ï¥Î¡¼¥É¥¢¥É¥ì¥¹¤ò»ý¤Á¤Þ¤¹¡£¤³¤ì¤Ï¡¢¥Ô¥ê¥ª¥É¤Ç¶èÀÚ¤é¤ì¤¿ 2 ¤Ä¤Î¿ô (¤¿¤È¤¨¤Ð 3.45) ¤Ç¡¢ºÇ½é¤Î¿ô¤¬¥¨¥ê¥¢¡¢2 ÈÖÌܤοô¤¬¥¨¥ê¥¢Æâ¤Î¥Î¡¼¥É¤ò°ÕÌ£¤·¤Þ¤¹¡£" #. Type: string #. Description #: ../dnet-common.templates:14 msgid "" "Do not make up a number here. If you do not know your DECnet node address " "then ask your system administrator." msgstr "¤³¤Î¿ô¤òŬÅö¤Ë¤Ç¤Ã¤Á¾å¤²¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£DECnet ¥Î¡¼¥É¥¢¥É¥ì¥¹¤¬¤ï¤«¤é¤Ê¤¤¤È¤¤Ë¤Ï¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à´ÉÍý¼Ô¤ËÌ䤤¹ç¤ï¤»¤Æ¤¯¤À¤µ¤¤¡£" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "DECnet startup changes your ethernet hardware address" msgstr "DECnet ¥¹¥¿¡¼¥È¥¢¥Ã¥×¤Ï¡¢¤¢¤Ê¤¿¤Î¥¤¡¼¥µ¥Í¥Ã¥È¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤òÊѹ¹¤·¤Þ¤¹" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "The \"setether\" program in this package will change the hardware (MAC) " "address of all ethernet cards in your system (by default) to match the " "DECnet node address. This is essential for the operation of DECnet and so is " "not optional. However, if you have more than one ethernet card you may want " "to edit /etc/default/decnet to alter the list of cards whose hardware " "addresses are changed." msgstr "¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Î \"setether\" ¥×¥í¥°¥é¥à¤Ï¡¢¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¤Î¤¹¤Ù¤Æ¤Î¥¤¡¼¥µ¥Í¥Ã¥È¥«¡¼¥É¤Î¥Ï¡¼¥É¥¦¥§¥¢ (MAC) ¥¢¥É¥ì¥¹¤ò¡¢DECnet ¥Î¡¼¥É¥¢¥É¥ì¥¹¤ËŬ¹ç¤¹¤ë¤è¤¦ (¥Ç¥Õ¥©¥ë¥È¤Ç) Êѹ¹¤·¤Þ¤¹¡£¤³¤ì¤Ï DECnet ¤ÎÁàºî¤Ë¤ª¤¤¤Æ´ðËܤǤ¢¤ê¡¢¿ï°Õ¤Ë¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£¤¿¤À¤·¡¢2 ¤Ä°Ê¾å¤Î¥¤¡¼¥µ¥Í¥Ã¥È¥«¡¼¥É¤ò»ý¤Ã¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤¬Êѹ¹¤µ¤ì¤ë¥«¡¼¥É¤Î¥ê¥¹¥È¤òÄ´À°¤¹¤ë¤¿¤á¤Ë¡¢/etc/default/decnet ¤òÊÔ½¸¤Ç¤¤Þ¤¹¡£" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "Be aware that any other machines that have your system's MAC address in " "their ARP cache may no longer be able to communicate with you via IP " "protocols until this cache has timed out or been flushed." msgstr "ARP ¥¥ã¥Ã¥·¥å¤Ë¤¢¤Ê¤¿¤Î¥·¥¹¥Æ¥à¤Î MAC ¥¢¥É¥ì¥¹¤ò»ý¤Ä¤Û¤«¤Î¥Þ¥·¥ó¤Ï¡¢¥¥ã¥Ã¥·¥å¤¬¥¿¥¤¥à¥¢¥¦¥È¤¹¤ë¤«¥Õ¥é¥Ã¥·¥å¤µ¤ì¤ë¤Þ¤Ç¡¢¤â¤¦¤¢¤Ê¤¿¤Î¥Þ¥·¥ó¤È¤Ï IP ¥×¥í¥È¥³¥ë·Ðͳ¤ÇÄÌ¿®¤Ç¤¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤³¤È¤Ëµ¤¤òÉÕ¤±¤Æ¤¯¤À¤µ¤¤¡£" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "The MAC address cannot be changed on-the-fly so you will need to reboot your " "machine before DECnet can function." msgstr "MAC ¥¢¥É¥ì¥¹¤ÏưŪ¤ËÊѹ¹¤Ç¤¤Ê¤¤¤Î¤Ç¡¢DECnet ¤òµ¡Ç½¤µ¤»¤ëÁ°¤Ë¤¢¤Ê¤¿¤Î¥Þ¥·¥ó¤òºÆµ¯Æ°¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£" #. Type: note #. Description #: ../dnet-common.templates:24 msgid "" "You should also edit /etc/decnet.conf to add the names and addresses of " "DECnet nodes you want to communicate with." msgstr "¤ä¤ê¼è¤ê¤·¤¿¤¤ DECnet ¥Î¡¼¥É¤Î̾Á°¤È¥¢¥É¥ì¥¹¤òÄɲ乤뤿¤á¤Ë¡¢/etc/decnet.conf ¤âÊÔ½¸¤¹¤Ù¤¤Ç¤¹¡£" |