예제 #1
0
파일: nilib2.c 프로젝트: 9crk/EasyDarwin
ni_status ni2_copydirtoparentdir(void *srcdomain, ni_id *srcdir, void*dstdomain, ni_id *dstdir , bool recursive)
{
    ni_status ret;
    ni_idlist children;
    int i, len;
    ni_proplist p;
    ni_id dir, newdstdir;

    NI_INIT(&p);
    
    /* get proplist from src dir */
    ret = ni_read(srcdomain, srcdir, &p);
    if (ret != NI_OK) {
        return ret;
    }

    /* create the destination dir */
    ret = ni_create(dstdomain, dstdir, p, &newdstdir, NI_INDEX_NULL);
    if (ret != NI_OK) {
        ni_proplist_free(&p);
        return ret;
    }
    
    ni_proplist_free(&p);

    if (recursive) {
        NI_INIT(&children);

        /* get list of children */
        ret = ni_children(srcdomain, srcdir, &children);
        if (ret != NI_OK) {
            return ret;
        }

        len = children.ni_idlist_len;
        for (i = 0; i < len; i++) {
            dir.nii_object = children.ni_idlist_val[i];
            ret = ni_self(srcdomain, &dir);
            if (ret != NI_OK) {
                ni_idlist_free(&children);
                return ret;
            }
            ret = ni2_copydirtoparentdir(srcdomain,&dir,dstdomain, &newdstdir,recursive);
        }
    
        ni_idlist_free(&children);
    }

    return NI_OK;
}
예제 #2
0
파일: iface.c 프로젝트: fjanssen/Car2X
int
new_iface(void * pio)
{
   int   i;
   int   err;
   NET   net;
   char *   name;
   char *   type;
   char *   cp =  nextarg(((GEN_IO)pio)->inbuf);

   if (!*cp)   /* no arg given */
   {
      ns_printf(pio, "please enter a name & type for new loopback iface\n");
      ns_printf(pio, "valid types include:\n");
#ifdef MAC_LOOPBACK
      ns_printf(pio, "   lo\n");
#endif
#ifdef USE_PPP
      ns_printf(pio, "   ppp\n");
#endif
      return -1;
   }

   /* get name buffer for ni_create to use */
   name = NULL;
   for(i = 0; i < IF_MAXNAMES; i++)
   {
      if(ifnames[i][0] == 0)  /* unused entry */
      {
         name = &ifnames[i][0];
         break;
      }
   }
   if (!name)
      return -1;

   strcpy(name, cp);       /* copy name arg into new buffer */
   type = nextarg(cp);
   cp = strchr(name, ' '); /* get end of first arg (name) */
   if(cp)
      *cp = '\0';          /* null terminate first arg */

   err = -1;               /* assume error */

#ifdef MUTE_WARNS
   /* some compilers give a bogus warning below if we don't assign a
    * gratuitous default value to net.
    */
    net = (NET)(netlist.q_head);
#endif   /* MUTE_WARNS */
#ifdef MAC_LOOPBACK
   if(strnicmp(type, "lo", 2) == 0)
   {
      err = ni_create(&net, lb_create, name, NULL);
   }
#endif   /* MAC_LOOPBACK */
#ifdef USE_PPP
   if(strnicmp(type, "ppp", 3) == 0)
   {
      err = ni_create(&net, ppp_create, name, NULL);
   }
#endif   /* USE_PPP */

   if (err)
   {
      ns_printf(pio, "Error %d creating iface name '%s' of type '%s'\n", 
         err, name, type);
      *name = 0;     /* free name buffer (mark as unused) */
   }
   else
      ns_printf(pio, "Created iface %s, - %s\n", name, net->n_mib->ifDescr);

   return err;
}
예제 #3
0
파일: nilib2.c 프로젝트: 9crk/EasyDarwin
ni_status ni2_createchild(void *domain, ni_id *dir, const ni_name dirname)
{
    /* make a child directory with the given name */

    ni_status ret;
    ni_proplist p;
    ni_id child;
    int i, j, k, len;
    char *key = NULL;
    char *value = NULL;

    /* if the name contains "=", then we've got "foo=bar" */
    /* property key is "foo", not "name" */

    len = 0;
    for (i = 0; dirname[i] != '\0' && dirname[i] != '='; i++);
    if (dirname[i] == '=') len = i;

    if (len > 0) {
        key = malloc(len + 1);
        /* check for backslashes in property key */
        for (i = 0, j = 0; i < len; i++, j++) {
            if (dirname[i] == '\\' && dirname[i+1] == '/') i++;
            key[j] = dirname[i];
        }
        key[j] = '\0';
        i = len + 1;
    }
    else {
        key = malloc(5);
        strcpy(key, "name");
        i = 0;
    }

    /* compress out backslashes in value */
    j = strlen(dirname);
    len = j - i;
    value = malloc(len + 1);
    for (k = 0; i < j; k++, i++) {
        if (dirname[i] == '\\' && dirname[i+1] == '/') i++;
        value[k] = dirname[i];
    }
    value[k] = '\0';
        
    /* set up the new directory */
    NI_INIT(&p);
    nipl_createprop(&p, key);
    nipl_appendprop(&p, key, value);

    /* create it */
    ret = ni_create(domain, dir, p, &child, NI_INDEX_NULL);
    if (ret != NI_OK) {
        ni_proplist_free(&p);
        return ret;
    }

    ni_proplist_free(&p);
    free(key);
    free(value);
    *dir = child;
    return NI_OK;
}