]> arthur.barton.de Git - netatalk.git/blobdiff - bin/nbp/nbprgstr.c
- merge branch-netatalk-afp-3x-dev, HEAD was tagged before
[netatalk.git] / bin / nbp / nbprgstr.c
index a3c9d6ea66d6ba8edcb85be202b6b05bdd76a43f..ca740577a64f55dc11ff7af3c8e56243fbc8c4ef 100644 (file)
@@ -1,13 +1,16 @@
 /*
+ * $Id: nbprgstr.c,v 1.5 2005-04-28 20:49:20 bfernhomberg Exp $
+ *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
  */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
+#endif /* HAVE_CONFIG_H */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/param.h>
 #include <netatalk/endian.h>
 #include <netatalk/at.h>
 #include <atalk/netddp.h>
+#include <atalk/nbp.h>
 #include <atalk/util.h>
+#include <atalk/unicode.h>
 
-Usage( av0 )
+void Usage( av0 )
     char       *av0;
 {
     char       *p;
@@ -28,24 +33,26 @@ Usage( av0 )
        p++;
     }
 
-    fprintf( stderr, "Usage: %s [ -A address ] obj:type@zone\n", p );
+    fprintf( stderr, "Usage: %s [ -A address ] [-m Mac charset] [ -p port] obj:type@zone\n", p );
     exit( 1 );
 }
 
-main( ac, av )
+int main( ac, av )
     int                ac;
     char       **av;
 {
     struct sockaddr_at addr;
     struct at_addr      ataddr;
     char               *Obj = 0, *Type = 0, *Zone = 0;
+    char               *convname = 0;
     int                        s, c, port = 0;
+    charset_t          chMac = CH_MAC;
     
     extern char                *optarg;
     extern int         optind;
 
     memset(&ataddr, 0, sizeof(ataddr));
-    while (( c = getopt( ac, av, "p:A:" )) != EOF ) {
+    while (( c = getopt( ac, av, "p:A:m:" )) != EOF ) {
        switch ( c ) {
        case 'A':
            if (!atalk_aton(optarg, &ataddr)) {
@@ -54,6 +61,13 @@ main( ac, av )
            }
            break;
 
+        case 'm':
+            if ((charset_t)-1 == (chMac = add_charset(optarg)) ) {
+                fprintf(stderr, "Invalid Mac charset.\n");
+                exit(1);
+            }
+            break;
+
        case 'p' :
            port = atoi( optarg );
            break;
@@ -67,10 +81,15 @@ main( ac, av )
        Usage( av[ 0 ] );
     }
 
+    /* Convert the name */
+    if ((size_t)(-1) == convert_string_allocate(CH_UNIX, chMac,
+                        av[optind], strlen(av[optind]), &convname))
+        convname = av[optind];
+
     /*
      * Get the name. If Type or Obj aren't specified, error.
      */
-    if ( nbp_name( av[ optind ], &Obj, &Type, &Zone ) || !Obj || !Type ) {
+    if ( nbp_name( convname, &Obj, &Type, &Zone ) || !Obj || !Type ) {
        Usage( av[ 0 ] );
     }
 
@@ -90,4 +109,6 @@ main( ac, av )
        exit( 1 );
     }
     netddp_close(s);
+
+    return 0;
 }