/*
- * $Id: desktop.c,v 1.26.2.4.2.11 2004-03-11 16:16:40 didg Exp $
+ * $Id: desktop.c,v 1.26.2.4.2.18.2.5 2006-09-15 00:35:03 didg Exp $
*
* See COPYRIGHT.
*
int afp_opendt(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
+AFPObj *obj _U_;
char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
u_int16_t vid;
}
int afp_closedt(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+AFPObj *obj _U_;
+char *ibuf _U_, *rbuf _U_;
+int ibuflen _U_, *rbuflen;
{
*rbuflen = 0;
return( AFP_OK );
}
-struct savedt si = { { 0, 0, 0, 0 }, -1, 0 };
+struct savedt si = { { 0, 0, 0, 0 }, -1, 0, 0 };
+
+static char *icon_dtfile(struct vol *vol, u_char creator[ 4 ])
+{
+ return dtfile( vol, creator, ".icon" );
+}
static int iconopen( vol, creator, flags, mode )
struct vol *vol;
u_char creator[ 4 ];
+int flags;
+int mode;
{
char *dtf, *adt, *adts;
si.sdt_fd = -1;
}
- dtf = dtfile( vol, creator, ".icon" );
+ dtf = icon_dtfile( vol, creator);
if (( si.sdt_fd = open( dtf, flags, ad_mode( dtf, mode ))) < 0 ) {
if ( errno == ENOENT && ( flags & O_CREAT )) {
*adts = '/';
if (( si.sdt_fd = open( dtf, flags, ad_mode( dtf, mode ))) < 0 ) {
- LOG(log_error, logtype_afpd, "iconopen: open %s: %s", dtf, strerror(errno) );
+ LOG(log_error, logtype_afpd, "iconopen(%s): open: %s", dtf, strerror(errno) );
return -1;
}
} else {
}
int afp_addicon(obj, ibuf, ibuflen, rbuf, rbuflen)
-AFPObj *obj;
+AFPObj *obj;
char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
+#ifndef NO_DDP
struct iovec iov[ 2 ];
+#endif
u_char fcreator[ 4 ], imh[ 12 ], irh[ 12 ], *p;
int itype, cc = AFP_OK, iovcnt = 0, buflen;
u_int32_t ftype, itag;
if (lseek( si.sdt_fd, (off_t) 0L, SEEK_SET ) < 0) {
close(si.sdt_fd);
si.sdt_fd = -1;
- LOG(log_error, logtype_afpd, "afp_addicon: lseek: %s", strerror(errno) );
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): lseek: %s", icon_dtfile(vol, fcreator), strerror(errno) );
cc = AFPERR_PARAM;
goto addicon_err;
}
}
if ( lseek( si.sdt_fd, (off_t) rsize, SEEK_CUR ) < 0 ) {
- LOG(log_error, logtype_afpd, "afp_addicon: lseek: %s", strerror(errno) );
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): lseek: %s", icon_dtfile(vol, fcreator),strerror(errno) );
cc = AFPERR_PARAM;
}
}
*/
addicon_err:
if ( cc < 0 ) {
- LOG(log_error, logtype_afpd, "afp_addicon: %s", strerror(errno) );
if (obj->proto == AFPPROTO_DSI) {
dsi_writeinit(obj->handle, rbuf, buflen);
dsi_writeflush(obj->handle);
return cc;
}
-
switch (obj->proto) {
#ifndef NO_DDP
case AFPPROTO_ASP:
}
if ( writev( si.sdt_fd, iov, iovcnt ) < 0 ) {
- LOG(log_error, logtype_afpd, "afp_addicon: writev: %s", strerror(errno) );
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): writev: %s", icon_dtfile(vol, fcreator), strerror(errno) );
return( AFPERR_PARAM );
}
break;
/* add headers at end of file */
if ((cc == 0) && (write(si.sdt_fd, imh, sizeof(imh)) < 0)) {
- LOG(log_error, logtype_afpd, "afp_addicon: write: %s", strerror(errno));
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): write: %s", icon_dtfile(vol, fcreator), strerror(errno));
dsi_writeflush(dsi);
return AFPERR_PARAM;
}
if ((cc = write(si.sdt_fd, rbuf, iovcnt)) < 0) {
- LOG(log_error, logtype_afpd, "afp_addicon: write: %s", strerror(errno));
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): write: %s", icon_dtfile(vol, fcreator), strerror(errno));
dsi_writeflush(dsi);
return AFPERR_PARAM;
}
}
#endif
if ((cc = write(si.sdt_fd, rbuf, iovcnt)) < 0) {
- LOG(log_error, logtype_afpd, "afp_addicon: write: %s", strerror(errno));
+ LOG(log_error, logtype_afpd, "afp_addicon(%s): write: %s", icon_dtfile(vol, fcreator), strerror(errno));
dsi_writeflush(dsi);
return AFPERR_PARAM;
}
return( AFP_OK );
}
-u_char utag[] = { 0, 0, 0, 0 };
-u_char ucreator[] = { 'U', 'N', 'I', 'X' };
-u_char utype[] = { 'T', 'E', 'X', 'T' };
-short usize = 256;
-u_char uicon[] = {
+static const u_char utag[] = { 0, 0, 0, 0 };
+static const u_char ucreator[] = { 0, 0, 0, 0 };/* { 'U', 'N', 'I', 'X' };*/
+static const u_char utype[] = { 0, 0, 0, 0 };/* { 'T', 'E', 'X', 'T' };*/
+static const short usize = 256;
+
+#if 0
+static const u_char uicon[] = {
0x1F, 0xFF, 0xFC, 0x00, 0x10, 0x00, 0x06, 0x00,
0x10, 0x00, 0x05, 0x00, 0x10, 0x00, 0x04, 0x80,
0x10, 0x00, 0x04, 0x40, 0x10, 0x00, 0x04, 0x20,
0x1F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF0,
0x1F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF0,
};
+#endif
int afp_geticoninfo(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
+AFPObj *obj _U_;
char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
u_char fcreator[ 4 ], ih[ 12 ];
memcpy( &bsize, ih + 10, sizeof( bsize ));
bsize = ntohs(bsize);
if ( lseek( si.sdt_fd, (off_t) bsize, SEEK_CUR ) < 0 ) {
- LOG(log_error, logtype_afpd, "afp_iconinfo: lseek: %s", strerror(errno) );
+ LOG(log_error, logtype_afpd, "afp_iconinfo(%s): lseek: %s", icon_dtfile(vol, fcreator), strerror(errno) );
return( AFPERR_PARAM );
}
if ( si.sdt_index == iindex ) {
int afp_geticon(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
+AFPObj *obj;
char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
off_t offset;
memcpy( &bsize, ibuf, sizeof( bsize ));
bsize = ntohs( bsize );
+#if 0
if ( memcmp( fcreator, ucreator, sizeof( ucreator )) == 0 &&
memcmp( ftype, utype, sizeof( utype )) == 0 &&
itype == 1 &&
*rbuflen = bsize;
return( AFP_OK );
}
+#endif
if ( iconopen( vol, fcreator, O_RDONLY, 0 ) < 0) {
return( AFPERR_NOITEM );
if ( lseek( si.sdt_fd, (off_t) 0L, SEEK_SET ) < 0 ) {
close(si.sdt_fd);
si.sdt_fd = -1;
- LOG(log_error, logtype_afpd, "afp_geticon: lseek: %s", strerror(errno));
+ LOG(log_error, logtype_afpd, "afp_geticon(%s): lseek: %s", icon_dtfile(vol, fcreator), strerror(errno));
return( AFPERR_PARAM );
}
memcpy( &rsize, ih + 10, sizeof( rsize ));
rsize = ntohs( rsize );
if ( lseek( si.sdt_fd, (off_t) rsize, SEEK_CUR ) < 0 ) {
- LOG(log_error, logtype_afpd, "afp_geticon: lseek: %s", strerror(errno) );
+ LOG(log_error, logtype_afpd, "afp_geticon(%s): lseek: %s", icon_dtfile(vol, fcreator), strerror(errno) );
return( AFPERR_PARAM );
}
offset += rsize;
}
if ( rc < 0 ) {
- LOG(log_error, logtype_afpd, "afp_geticon: read: %s", strerror(errno));
+ LOG(log_error, logtype_afpd, "afp_geticon(%s): read: %s", icon_dtfile(vol, fcreator), strerror(errno));
return( AFPERR_PARAM );
}
return AFP_OK;
geticon_exit:
- LOG(log_info, logtype_afpd, "afp_geticon: %s", strerror(errno));
+ LOG(log_info, logtype_afpd, "afp_geticon(%s): %s", icon_dtfile(vol, fcreator), strerror(errno));
dsi_readdone(dsi);
- obj->exit(1);
+ obj->exit(EXITERR_SYS);
return AFP_OK;
} else {
}
/* ---------------------- */
-static char hexdig[] = "0123456789abcdef";
+static const char hexdig[] = "0123456789abcdef";
char *dtfile(const struct vol *vol, u_char creator[], char *ext )
{
static char path[ MAXPATHLEN + 1];
mpath[outlen] = 0;
if (!(flags & CONV_REQMANGLE))
flags = 0;
+ else
+ flags = 1;
- m = mangle(vol, mpath, upath, id, flags);
+ if (utf8)
+ flags |= 2;
+
+ m = mangle(vol, mpath, outlen, upath, id, flags);
#ifdef DEBUG
LOG(log_debug, logtype_afpd, "utompath: '%s':'%s':'%2.2X'", upath, m, ntohl(id));
utompath_error:
u = "???";
- m = mangle(vol, u, upath, id, 1);
+ m = mangle(vol, u, strlen(u), upath, id, (utf8)?3:1);
return(m);
}
isadir = path_isadir(path);
if (isadir || !(of = of_findname(path))) {
- ad_init(&ad, vol->v_adouble);
+ ad_init(&ad, vol->v_adouble, vol->v_ad_options);
adp = &ad;
} else
adp = of->of_ad;
return( AFPERR_ACCESS );
}
- if (!ad_getentryoff(adp, ADEID_COMMENT)) {
- /* not defined, save nothing but return success */
- return AFP_OK;
- }
-
- if ( (ad_getoflags( adp, ADFLAGS_HF ) & O_CREAT) ) {
- if ( *path->m_name == '\0' ) {
- name = curdir->d_m_name;
- } else {
- name = path->m_name;
+ if (ad_getentryoff(adp, ADEID_COMMENT)) {
+ if ( (ad_getoflags( adp, ADFLAGS_HF ) & O_CREAT) ) {
+ if ( *path->m_name == '\0' ) {
+ name = curdir->d_m_name;
+ } else {
+ name = path->m_name;
+ }
+ ad_setname(adp, name);
}
- ad_setname(adp, name);
+ ad_setentrylen( adp, ADEID_COMMENT, clen );
+ memcpy( ad_entry( adp, ADEID_COMMENT ), ibuf, clen );
+ ad_flush( adp, ADFLAGS_HF );
}
-
- ad_setentrylen( adp, ADEID_COMMENT, clen );
- memcpy( ad_entry( adp, ADEID_COMMENT ), ibuf, clen );
- ad_flush( adp, ADFLAGS_HF );
ad_close( adp, ADFLAGS_HF );
return( AFP_OK );
}
/* ----------------------------- */
int afp_addcomment(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+AFPObj *obj _U_;
+char *ibuf, *rbuf _U_;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
struct dir *dir;
upath = path->u_name;
isadir = path_isadir(path);
if (isadir || !(of = of_findname(path))) {
- ad_init(&ad, vol->v_adouble);
+ ad_init(&ad, vol->v_adouble, vol->v_ad_options);
adp = &ad;
} else
adp = of->of_ad;
- if ( ad_open( upath,
- ( isadir) ? ADFLAGS_HF|ADFLAGS_DIR : ADFLAGS_HF,
- O_RDONLY, 0666, adp) < 0 ) {
+ if ( ad_metadata( upath,( isadir) ? ADFLAGS_DIR : 0, adp) < 0 ) {
return( AFPERR_NOITEM );
}
if (!ad_getentryoff(adp, ADEID_COMMENT)) {
+ ad_close( adp, ADFLAGS_HF );
return AFPERR_NOITEM;
}
/*
* Make sure the AD file is not bogus.
*/
- if ( ad_getentrylen( adp, ADEID_COMMENT ) < 0 ||
+ if ( ad_getentrylen( adp, ADEID_COMMENT ) <= 0 ||
ad_getentrylen( adp, ADEID_COMMENT ) > 199 ) {
ad_close( adp, ADFLAGS_HF );
return( AFPERR_NOITEM );
*rbuflen = ad_getentrylen( adp, ADEID_COMMENT ) + 1;
ad_close( adp, ADFLAGS_HF );
- /* return AFPERR_NOITEM if len == 0 ? */
return( AFP_OK );
}
/* -------------------- */
int afp_getcomment(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
+AFPObj *obj _U_;
char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
struct dir *dir;
isadir = path_isadir(path);
if (isadir || !(of = of_findname(path))) {
- ad_init(&ad, vol->v_adouble);
+ ad_init(&ad, vol->v_adouble, vol->v_ad_options);
adp = &ad;
} else
adp = of->of_ad;
}
}
- if (!ad_getentryoff(adp, ADEID_COMMENT)) {
- return AFP_OK;
+ if (ad_getentryoff(adp, ADEID_COMMENT)) {
+ ad_setentrylen( adp, ADEID_COMMENT, 0 );
+ ad_flush( adp, ADFLAGS_HF );
}
-
- ad_setentrylen( adp, ADEID_COMMENT, 0 );
- ad_flush( adp, ADFLAGS_HF );
ad_close( adp, ADFLAGS_HF );
return( AFP_OK );
}
/* ----------------------- */
int afp_rmvcomment(obj, ibuf, ibuflen, rbuf, rbuflen )
-AFPObj *obj;
-char *ibuf, *rbuf;
-int ibuflen, *rbuflen;
+AFPObj *obj _U_;
+char *ibuf, *rbuf _U_;
+int ibuflen _U_, *rbuflen;
{
struct vol *vol;
struct dir *dir;