code: func (h Osxkeychain) List() (map[string]string, error) {
  	credsLabelC := C.CString(credentials.CredsLabel)
  	defer C.free(unsafe.Pointer(credsLabelC))
  
  	var pathsC **C.char
  	defer C.free(unsafe.Pointer(pathsC))
  	var acctsC **C.char
  	defer C.free(unsafe.Pointer(acctsC))
  	var listLenC C.uint
  	errMsg := C.keychain_list(credsLabelC, &pathsC, &acctsC, &listLenC)
  	if errMsg != nil {
  		defer C.free(unsafe.Pointer(errMsg))
  		goMsg := C.GoString(errMsg)
  		if goMsg == errCredentialsNotFound {
  			return make(map[string]string), nil
  		}
  
  		return nil, errors.New(goMsg)
  	}
  
  	defer C.freeListData(&pathsC, listLenC)
  	defer C.freeListData(&acctsC, listLenC)
  
  	var listLen int
  	listLen = int(listLenC)
  	pathTmp := (*[1 << 30]*C.char)(unsafe.Pointer(pathsC))[:listLen:listLen]
  	acctTmp := (*[1 << 30]*C.char)(unsafe.Pointer(acctsC))[:listLen:listLen]
  	//taking the array of c strings into go while ignoring all the stuff irrelevant to credentials-helper
  	resp := make(map[string]string)
  	for i := 0; i < listLen; i++ {
  		if C.GoString(pathTmp[i]) == "0" {
  			continue
  		}
  		resp[C.GoString(pathTmp[i])] = C.GoString(acctTmp[i])
  	}
  	return resp, nil
  }
docs: // List returns the stored URLs and corresponding usernames.