>>> Takeshi Nakayama <t...@catvmics.ne.jp> wrote

> >>> Justin Cormack <jus...@specialbusservice.com> wrote
> 
> > Er, you can't do that.
> > 
> > 1. It breaks the rump builds on most platforms
> > http://build.myriabit.eu:8012/waterfall as the prototypes dont match
> > eg see 
> > http://build.myriabit.eu:8012/builders/ppc64-cross/builds/5585/steps/shell_3/logs/stdio
> 
> It seems that posix says 2nd arg of iconv(3) is char **, but
> NetBSD's one is const char **.
> 
> > 2. There is no requirement that rump runs on a platform that has iconv
> > anyway, it may be running on bare metal, or non Posix platform.
> > 
> > Not sure what the intention was though - I am sure we can find a way
> > around it...
> 
> I would like to include this at least on NetBSD host since we don't
> have kernel iconv and then mount_smbfs(8) is useless for filename
> conversions.
> 
> So is it ok to add a compile-time option as below and define it
> somewhere?  Or are there any more appropriate make variables to
> detect host OS?

On second thought, it seems user component can use __NetBSD__
definition, how about this change?

-- Takeshi Nakayama


Index: netsmb_user.c
===================================================================
RCS file: /cvsroot/src/sys/rump/dev/lib/libnetsmb/netsmb_user.c,v
retrieving revision 1.1
diff -u -d -r1.1 netsmb_user.c
--- netsmb_user.c       15 Nov 2014 18:49:04 -0000      1.1
+++ netsmb_user.c       16 Nov 2014 00:21:28 -0000
@@ -36,6 +36,7 @@
 int
 rumpcomp_netsmb_iconv_open(const char *to, const char *from, void **handle)
 {
+#ifdef __NetBSD__
        iconv_t cd;
        int rv;
 
@@ -49,11 +50,16 @@
        }
 
        return rumpuser_component_errtrans(rv);
+#else
+       /* fallback to use stub functions */
+       return 0;
+#endif
 }
 
 int
 rumpcomp_netsmb_iconv_close(void *handle)
 {
+#ifdef __NetBSD__
        int rv;
 
        if (iconv_close((iconv_t)handle) == -1)
@@ -62,12 +68,17 @@
                rv = 0;
 
        return rumpuser_component_errtrans(rv);
+#else
+       /* do nothing */
+       return 0;
+#endif
 }
 
 int
 rumpcomp_netsmb_iconv_conv(void *handle, const char **inbuf,
     size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
 {
+#ifdef __NetBSD__
        int rv;
 
        if (iconv((iconv_t)handle, inbuf, inbytesleft, outbuf, outbytesleft)
@@ -77,5 +88,9 @@
                rv = 0;
 
        return rumpuser_component_errtrans(rv);
+#else
+       /* do nothing */
+       return 0;
+#endif
 }
 #endif

Reply via email to