FileWrapper::FileWrapper(string in_fileName, bool in_isDir, string in_path) { fileName = in_fileName; isDir = in_isDir; path = in_path; extension = parseExtension(); }
void PresetLoader::rescan() { // std::cerr << "Rescanning..." << std::endl; // Clear the directory entry collection clear(); // If directory already opened, close it first if ( _dir ) { closedir ( _dir ); _dir = 0; } // Allocate a new a stream given the current directory name if ( ( _dir = opendir ( _dirname.c_str() ) ) == NULL ) { handleDirectoryError(); return; // no files loaded. _entries is empty } struct dirent * dir_entry; std::set<std::string> alphaSortedFileSet; std::set<std::string> alphaSortedPresetNameSet; while ( ( dir_entry = readdir ( _dir ) ) != NULL ) { if (dir_entry->d_name == 0) continue; std::ostringstream out; // Convert char * to friendly string std::string filename ( dir_entry->d_name ); // Verify extension is projectm or milkdrop if (!_presetFactoryManager.extensionHandled(parseExtension(filename))) continue; if ( filename.length() > 0 && filename[0] == '.' ) continue; // Create full path name out << _dirname << PATH_SEPARATOR << filename; // Add to our directory entry collection alphaSortedFileSet.insert ( out.str() ); alphaSortedPresetNameSet.insert ( filename ); // the directory entry struct is freed elsewhere } // Push all entries in order from the file set to the file entries member (which is an indexed vector) for ( std::set<std::string>::iterator pos = alphaSortedFileSet.begin(); pos != alphaSortedFileSet.end();++pos ) _entries.push_back ( *pos ); // Push all preset names in similar fashion for ( std::set<std::string>::iterator pos = alphaSortedPresetNameSet.begin(); pos != alphaSortedPresetNameSet.end();++pos ) _presetNames.push_back ( *pos ); // Give all presets equal rating of 3 - why 3? I don't know _ratings = std::vector<RatingList>(TOTAL_RATING_TYPES, RatingList( _presetNames.size(), 3 )); _ratingsSums = std::vector<int>(TOTAL_RATING_TYPES, 3 * _presetNames.size()); assert ( _entries.size() == _presetNames.size() ); }
void DirectiveParser::parseDirective(Token *token) { assert(token->type == Token::PP_HASH); mTokenizer->lex(token); if (isEOD(token)) { // Empty Directive. return; } DirectiveType directive = getDirective(token); // While in an excluded conditional block/group, // we only parse conditional directives. if (skipping() && !isConditionalDirective(directive)) { skipUntilEOD(mTokenizer, token); return; } switch(directive) { case DIRECTIVE_NONE: mDiagnostics->report(Diagnostics::PP_DIRECTIVE_INVALID_NAME, token->location, token->text); skipUntilEOD(mTokenizer, token); break; case DIRECTIVE_DEFINE: parseDefine(token); break; case DIRECTIVE_UNDEF: parseUndef(token); break; case DIRECTIVE_IF: parseIf(token); break; case DIRECTIVE_IFDEF: parseIfdef(token); break; case DIRECTIVE_IFNDEF: parseIfndef(token); break; case DIRECTIVE_ELSE: parseElse(token); break; case DIRECTIVE_ELIF: parseElif(token); break; case DIRECTIVE_ENDIF: parseEndif(token); break; case DIRECTIVE_ERROR: parseError(token); break; case DIRECTIVE_PRAGMA: parsePragma(token); break; case DIRECTIVE_EXTENSION: parseExtension(token); break; case DIRECTIVE_VERSION: parseVersion(token); break; case DIRECTIVE_LINE: parseLine(token); break; default: assert(false); break; } skipUntilEOD(mTokenizer, token); if (token->type == Token::LAST) { mDiagnostics->report(Diagnostics::PP_EOF_IN_DIRECTIVE, token->location, token->text); } }
bool QSslCertificatePrivate::parse(const QByteArray &data) { QAsn1Element root; QDataStream dataStream(data); if (!root.read(dataStream) || root.type() != QAsn1Element::SequenceType) return false; QDataStream rootStream(root.value()); QAsn1Element cert; if (!cert.read(rootStream) || cert.type() != QAsn1Element::SequenceType) return false; // version or serial number QAsn1Element elem; QDataStream certStream(cert.value()); if (!elem.read(certStream)) return false; if (elem.type() == QAsn1Element::Context0Type) { QDataStream versionStream(elem.value()); if (!elem.read(versionStream) || elem.type() != QAsn1Element::IntegerType) return false; versionString = QByteArray::number(elem.value()[0] + 1); if (!elem.read(certStream)) return false; } else { versionString = QByteArray::number(1); } // serial number if (elem.type() != QAsn1Element::IntegerType) return false; serialNumberString = colonSeparatedHex(elem.value()); // algorithm ID if (!elem.read(certStream) || elem.type() != QAsn1Element::SequenceType) return false; // issuer info if (!elem.read(certStream) || elem.type() != QAsn1Element::SequenceType) return false; QByteArray issuerDer = data.mid(dataStream.device()->pos() - elem.value().length(), elem.value().length()); issuerInfo = elem.toInfo(); // validity period if (!elem.read(certStream) || elem.type() != QAsn1Element::SequenceType) return false; QDataStream validityStream(elem.value()); if (!elem.read(validityStream) || (elem.type() != QAsn1Element::UtcTimeType && elem.type() != QAsn1Element::GeneralizedTimeType)) return false; notValidBefore = elem.toDateTime(); if (!elem.read(validityStream) || (elem.type() != QAsn1Element::UtcTimeType && elem.type() != QAsn1Element::GeneralizedTimeType)) return false; notValidAfter = elem.toDateTime(); // subject name if (!elem.read(certStream) || elem.type() != QAsn1Element::SequenceType) return false; QByteArray subjectDer = data.mid(dataStream.device()->pos() - elem.value().length(), elem.value().length()); subjectInfo = elem.toInfo(); subjectMatchesIssuer = issuerDer == subjectDer; // public key qint64 keyStart = certStream.device()->pos(); if (!elem.read(certStream) || elem.type() != QAsn1Element::SequenceType) return false; publicKeyDerData.resize(certStream.device()->pos() - keyStart); QDataStream keyStream(elem.value()); if (!elem.read(keyStream) || elem.type() != QAsn1Element::SequenceType) return false; // key algorithm if (!elem.read(elem.value()) || elem.type() != QAsn1Element::ObjectIdentifierType) return false; const QByteArray oid = elem.toObjectId(); if (oid == RSA_ENCRYPTION_OID) publicKeyAlgorithm = QSsl::Rsa; else if (oid == DSA_ENCRYPTION_OID) publicKeyAlgorithm = QSsl::Dsa; else if (oid == EC_ENCRYPTION_OID) publicKeyAlgorithm = QSsl::Ec; else publicKeyAlgorithm = QSsl::Opaque; certStream.device()->seek(keyStart); certStream.readRawData(publicKeyDerData.data(), publicKeyDerData.size()); // extensions while (elem.read(certStream)) { if (elem.type() == QAsn1Element::Context3Type) { if (elem.read(elem.value()) && elem.type() == QAsn1Element::SequenceType) { QDataStream extStream(elem.value()); while (elem.read(extStream) && elem.type() == QAsn1Element::SequenceType) { QSslCertificateExtension extension; if (!parseExtension(elem.value(), &extension)) return false; extensions << extension; if (extension.oid() == QLatin1String("2.5.29.17")) { // subjectAltName QAsn1Element sanElem; if (sanElem.read(extension.value().toByteArray()) && sanElem.type() == QAsn1Element::SequenceType) { QDataStream nameStream(sanElem.value()); QAsn1Element nameElem; while (nameElem.read(nameStream)) { if (nameElem.type() == QAsn1Element::Rfc822NameType) { subjectAlternativeNames.insert(QSsl::EmailEntry, nameElem.toString()); } else if (nameElem.type() == QAsn1Element::DnsNameType) { subjectAlternativeNames.insert(QSsl::DnsEntry, nameElem.toString()); } } } } } } } } derData = data.left(dataStream.device()->pos()); null = false; return true; }
void processStaticFile(const char* ccp_path) { FILE* file = NULL; int i_fd = -1; struct stat stat_buffer; char* cp_content_type = NULL; int i_content_length = 0; int i_success = 0; if(ccp_path == NULL) { debugVerbose(STATIC_FILE, "Error, no file path specified.\n"); secExit(STATUS_INTERNAL_SERVER_ERROR); } if(lstat(ccp_path, &stat_buffer) < 0) { debugVerbose(STATIC_FILE, "Opening file %s failed: %d\n", ccp_path, errno); secExit(STATUS_INTERNAL_SERVER_ERROR); } i_content_length = stat_buffer.st_size; file = fopen(ccp_path, "r"); if(file == NULL) { debugVerbose(STATIC_FILE, "Opening file %s failed: %d\n", ccp_path, errno); secExit(STATUS_INTERNAL_SERVER_ERROR); } i_fd = fileno(file); if(i_fd < 0) { debugVerbose(STATIC_FILE, "Retreiving a file descriptor from file pointer failed.\n"); secExit(STATUS_INTERNAL_SERVER_ERROR); } cp_content_type = parseExtension(ccp_path); i_success = sendHTTPResponseHeaderExplicit("200 OK", cp_content_type, i_content_length); if(i_success == EXIT_FAILURE) { debugVerbose(STATIC_FILE, "Sending header failed.\n"); secExit(STATUS_CANCEL); } debugVerbose(STATIC_FILE, "Sent HTTP response header to client.\n"); if(e_used_method != HEAD) { i_success = writeFileTo(i_fd, STDOUT_FILENO); if(i_success == EXIT_FAILURE) { debugVerbose(STATIC_FILE, "Sending file failed.\n"); fclose(file); secExit(STATUS_CANCEL); } debugVerbose(STATIC_FILE, "Sent file to client.\n"); } if(fclose(file) != 0) { //Everything is finished, here, no need to do something special debugVerbose(STATIC_FILE, "Could not close file.\n"); } }