resolved problem with proprietary KOBIL windoze driver

master
Marc Wäckerlin 15 years ago
parent fb1d4e16e4
commit b3fa59e04e
  1. 19
      src/pcsc.hxx

@ -368,14 +368,14 @@ namespace pcsc {
Strings res;
std::string grp(join(groups));
DWORD num(0);
if (!check(SCardListReaders(_id, grp.size()?strconv(grp).data():0, 0,
if (!check(SCardListReaders(_id, groups.size()?strconv(grp).data():0, 0,
&num),
"(1) smartcard list readers of groups "+grp))
"smartcard get size of readers of groups "+grp))
return res;
std::auto_ptr<char_t> nm(new char_t[num]);
if (!check(SCardListReaders(_id, grp.size()?strconv(grp).data():0,
if (!check(SCardListReaders(_id, groups.size()?strconv(grp).data():0,
nm.get(), &num),
"(2) smartcard list readers of groups "+grp))
"smartcard list reader names of groups "+grp))
return res;
return res = split(strconv(string(nm.get(), num-1)));
}
@ -667,7 +667,7 @@ namespace pcsc {
//! Splits a buffer with 0 separators into a vector of strings.
Strings split(const std::string& in) {
Strings res;
for (std::string::size_type pos(0); pos<in.size();
for (std::string::size_type pos(0); pos<in.size() && in[pos]!=0;
pos+=res.rbegin()->size()+1)
res.push_back(in.substr(pos).c_str());
return res;
@ -676,9 +676,12 @@ namespace pcsc {
//! Joins a vector of strings into a buffer with 0 separators.
std::string join(const Strings& in) {
std::string res;
for (Strings::const_iterator it(in.begin());
it!=in.end(); ++it)
res+=*it+'\0';
if (in.size()) {
for (Strings::const_iterator it(in.begin());
it!=in.end(); ++it)
res+=*it+'\0';
res+='\0';
}
return res;
}

Loading…
Cancel
Save