Esempio n. 1
0
/**
* @brief Verify that the searchAndReplace function correctly spot remain of an old value and replace them by a new value according to the current step in initialization phase.
*/
void verifySearchAndReplace() {
    GRID grid;
    grid.height = 5;
    grid.width = 5;

    int matrix[5][5] = {
        {WALL, WALL, WALL, WALL, WALL},
        {WALL, 1, 2, 2, WALL},
        {WALL, 1, WALL, 2, WALL},
        {WALL, 1, 1, 2, WALL},
        {WALL, WALL, WALL, WALL, WALL}
    };

    grid.matrix = (int**) matrix;

    searchAndReplace(&grid, 1, 2);

    CU_ASSERT(grid.height == 5);
    CU_ASSERT(grid.width == 5);
    CU_ASSERT(grid.matrix[1][1] == 2);
    CU_ASSERT(grid.matrix[1][2] == 2);
    CU_ASSERT(grid.matrix[1][3] == 2);
    CU_ASSERT(grid.matrix[2][1] == 2);
    CU_ASSERT(grid.matrix[2][3] == 2);
    CU_ASSERT(grid.matrix[3][1] == 2);
    CU_ASSERT(grid.matrix[3][2] == 2);
    CU_ASSERT(grid.matrix[3][3] == 2);
}
Esempio n. 2
0
//---------------------------------------------------------------------------
int APIENTRY
ListLoadNext( HWND parentWin, HWND listWin, char* fileToLoad, int showFlags)
{
    g_text = elfdump( fileToLoad );
    if ( g_text.empty() ) {
        return LISTPLUGIN_ERROR;
    }

    searchAndReplace( g_text, "\n", "\r\n" );
    g_text_lo.resize( g_text.length() );
    std::transform( g_text.begin(), g_text.end(), g_text_lo.begin(), ::tolower );

    HFONT font;
    if ( showFlags & lcp_ansi ) {
        font = (HFONT)GetStockObject( ANSI_FIXED_FONT );
    }
    else {
        font = (HFONT)GetStockObject( SYSTEM_FIXED_FONT );
    }
    SendMessage( listWin, WM_SETFONT, (WPARAM)font, MAKELPARAM( true, 0 ) );

    SendMessage( listWin, WM_SETTEXT, 0, (LPARAM)g_text.c_str() ); 

    PostMessage( parentWin, WM_COMMAND, MAKELONG( 0, itm_percent ), (LPARAM)listWin );

    return LISTPLUGIN_OK;
}
Esempio n. 3
0
void writeShader(osg::Shader* shader, const std::string& cppFileName, const std::string& variableName)
{
    osgDB::ofstream fout(cppFileName.c_str());
    if (!fout)
    {
        std::cout<<"Error: could not open file `"<<cppFileName<<"` for writing."<<std::endl;
    }

    std::string shaderSource = shader->getShaderSource();
    searchAndReplace(shaderSource, "\r\n", "\n");
    searchAndReplace(shaderSource, "\r", "\n");
    searchAndReplace(shaderSource, "\"", "\\\"");

    std::string variableString = std::string("char ")+variableName+std::string("[] = ");

    std::string::size_type startOfLine = 0;
    std::string::size_type endOfLine = shaderSource.find_first_of('\n', startOfLine);

    if (endOfLine==std::string::npos)
    {
        fout<<variableString<<shaderSource<<"\\n\";"<<std::endl;
    }
    else
    {
        std::string padding(variableString.size(),' ');

        fout<<variableString<<"\""<<shaderSource.substr(startOfLine,endOfLine-startOfLine)<<"\\n\""<<std::endl;
        startOfLine = endOfLine+1;
        endOfLine = shaderSource.find_first_of('\n', startOfLine);

        while (endOfLine != std::string::npos)
        {
            fout<<padding<<"\""<<shaderSource.substr(startOfLine,endOfLine-startOfLine)<<"\\n\""<<std::endl;
            startOfLine = endOfLine + 1;
            endOfLine = shaderSource.find_first_of('\n', startOfLine);
        }
        fout<<padding<<"\""<<shaderSource.substr(startOfLine,endOfLine-startOfLine)<<"\\n\";"<<std::endl;
    }
    std::cout<<"Written shader to `"<<cppFileName<<"`"<<std::endl;
}
Esempio n. 4
0
bool GLShader::buildLightShaderVariant(int lightType, int variantFlag)
{
	const char *lightIds[MAX_LIGHTS] = {"0","1","2","3","4","5","6","7"};
	const char *lightIdToken = "%LIGHTID%";
	const char *lightLoopStartToken = "%LIGHTLOOP:START%";
	const char *lightLoopEndToken = "%LIGHTLOOP:END%";
	
	int lightLoopStartTokenLen = 17;
	int lightLoopEndTokenLen = 15;
	
	bool isMultiLight = light_multi[lightType];
		
	std::string lightFrag;
	std::string lightVert;
	
	lightFrag.append(light_frag_str[lightType]);
	lightVert.append(light_vert_str[lightType]);
	
	searchAndReplace(lightFrag,"%hasColorMap%",(variantFlag & SHADER_VARIANT_COLOR)?"1":"0"); 
	searchAndReplace(lightVert,"%hasColorMap%",(variantFlag & SHADER_VARIANT_COLOR)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasAlphaMap%",(variantFlag & SHADER_VARIANT_ALPHA)?"1":"0"); 
	searchAndReplace(lightVert,"%hasAlphaMap%",(variantFlag & SHADER_VARIANT_ALPHA)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasSpecMap%",(variantFlag & SHADER_VARIANT_SPECULAR)?"1":"0"); 
	searchAndReplace(lightVert,"%hasSpecMap%",(variantFlag & SHADER_VARIANT_SPECULAR)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasLumiMap%",(variantFlag & SHADER_VARIANT_LUMINOSITY)?"1":"0"); 
	searchAndReplace(lightVert,"%hasLumiMap%",(variantFlag & SHADER_VARIANT_LUMINOSITY)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasBumpMap%",(variantFlag & SHADER_VARIANT_BUMP)?"1":"0"); 
	searchAndReplace(lightVert,"%hasBumpMap%",(variantFlag & SHADER_VARIANT_BUMP)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap0%",(variantFlag & SHADER_VARIANT_SHADOW0)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap0%",(variantFlag & SHADER_VARIANT_SHADOW0)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap1%",(variantFlag & SHADER_VARIANT_SHADOW1)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap1%",(variantFlag & SHADER_VARIANT_SHADOW1)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap2%",(variantFlag & SHADER_VARIANT_SHADOW2)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap2%",(variantFlag & SHADER_VARIANT_SHADOW2)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap3%",(variantFlag & SHADER_VARIANT_SHADOW3)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap3%",(variantFlag & SHADER_VARIANT_SHADOW3)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap4%",(variantFlag & SHADER_VARIANT_SHADOW4)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap4%",(variantFlag & SHADER_VARIANT_SHADOW4)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap5%",(variantFlag & SHADER_VARIANT_SHADOW5)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap5%",(variantFlag & SHADER_VARIANT_SHADOW5)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap6%",(variantFlag & SHADER_VARIANT_SHADOW6)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap6%",(variantFlag & SHADER_VARIANT_SHADOW6)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasShadowMap7%",(variantFlag & SHADER_VARIANT_SHADOW7)?"1":"0"); 
	searchAndReplace(lightVert,"%hasShadowMap7%",(variantFlag & SHADER_VARIANT_SHADOW7)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasReflectionMap%",(variantFlag & SHADER_VARIANT_REFLECTION)?"1":"0"); 
	searchAndReplace(lightVert,"%hasReflectionMap%",(variantFlag & SHADER_VARIANT_REFLECTION)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasEnvSphereMap%",(variantFlag & SHADER_VARIANT_ENVSPHEREMAP)?"1":"0"); 
	searchAndReplace(lightVert,"%hasEnvSphereMap%",(variantFlag & SHADER_VARIANT_ENVSPHEREMAP)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasLightMap%",(variantFlag & SHADER_VARIANT_LIGHTMAP)?"1":"0"); 
	searchAndReplace(lightVert,"%hasLightMap%",(variantFlag & SHADER_VARIANT_LIGHTMAP)?"1":"0"); 
	
	searchAndReplace(lightFrag,"%hasParallaxMap%",(variantFlag & SHADER_VARIANT_PARALLAX)?"1":"0"); 
	searchAndReplace(lightVert,"%hasParallaxMap%",(variantFlag & SHADER_VARIANT_PARALLAX)?"1":"0"); 

	
	if (isMultiLight)
	{
		std::vector<unsigned int> loopStarts;
		std::vector<unsigned int> loopEnds;
				
		for (int i = 0; i < MAX_LIGHTS; i++)
		{			
			GLShader *tmpShader = new GLShader();

			std::string thisFrag;
			std::string thisVert;
			std::vector<std::string> lightVertLoops;
			std::vector<std::string> lightFragLoops;

			std::vector<std::string> lightVertLoopsAccum;
			std::vector<std::string> lightFragLoopsAccum;

			std::vector<unsigned int> startFragLoops;
			std::vector<unsigned int> endFragLoops;

			std::vector<unsigned int> startVertLoops;
			std::vector<unsigned int> endVertLoops;

//			printf("finding loops..");
			findLoops(lightVert,lightLoopStartToken,lightLoopEndToken,startVertLoops,endVertLoops);
			findLoops(lightFrag,lightLoopStartToken,lightLoopEndToken,startFragLoops,endFragLoops);
//			printf("done.\n");
			
			if (startVertLoops.size() != endVertLoops.size())
			{
				Logger::log(LOG_ERROR,"Error multilight type %d: Mismatched vertex shader light loop scopes\n",lightType);
				return false;
			}

			if (startFragLoops.size() != endFragLoops.size())
			{
				Logger::log(LOG_ERROR,"Error multilight type %d: Mismatched fragment shader light loop scopes\n",lightType);
				return false;
			}
			
			lightFragLoops.resize(startFragLoops.size());
			lightVertLoops.resize(startVertLoops.size());
			lightFragLoopsAccum.resize(startFragLoops.size());
			lightVertLoopsAccum.resize(startVertLoops.size());
			thisFrag.append(lightFrag);
			thisVert.append(lightVert);
			
			int numVertLoops = startVertLoops.size();
			int numFragLoops = startFragLoops.size();
			
			for (int j = 0; j < numVertLoops; j++)
			{
				lightVertLoops[j].append(lightVert.substr(startVertLoops[j], endVertLoops[j]-startVertLoops[j]+lightLoopEndTokenLen));

//				printf("lightVertLoops %d: %s\n\n",j,lightVertLoops[j].c_str());
				
				for (int k = 0; k <= i; k++)
				{
					std::string thisVertLoop;
					
					thisVertLoop.append(lightVert.substr(startVertLoops[j]+lightLoopStartTokenLen, endVertLoops[j]-startVertLoops[j]-lightLoopStartTokenLen));
					
					searchAndReplace(thisVertLoop,lightIdToken,lightIds[k]);

//					printf("thisVertLoop %d: %s\n\n",j,thisVertLoop.c_str());

					lightVertLoopsAccum[j].append(thisVertLoop);
				}
//				printf("lightVertLoopsAccum %d: %s\n\n",j,lightVertLoopsAccum[j].c_str());
			}
				
			
			for (int j = 0; j < numFragLoops; j++)
			{
				lightFragLoops[j].append(lightFrag.substr(startFragLoops[j], endFragLoops[j]-startFragLoops[j]+lightLoopEndTokenLen));

//				printf("lightFragLoops %d: %s\n\n",j,lightFragLoops[j].c_str());

				for (int k = 0; k <= i; k++)
				{
					std::string thisFragLoop;
					thisFragLoop.append(lightFrag.substr(startFragLoops[j]+lightLoopStartTokenLen, endFragLoops[j]-startFragLoops[j]-lightLoopStartTokenLen));
					searchAndReplace(thisFragLoop,lightIdToken,lightIds[k]);
					lightFragLoopsAccum[j].append(thisFragLoop);

//					printf("lightFragLoop %d: %s\n\n",j,thisFragLoop.c_str());
				}

//				printf("lightFragLoopsAccum %d: %s\n\n",j,lightFragLoopsAccum[j].c_str());

			}
			
			
			for (int j = 0; j < numFragLoops; j++)
			{
				searchAndReplace(thisFrag,lightFragLoops[j].c_str(),lightFragLoopsAccum[j].c_str());
			}
			
			for (int j = 0; j < numVertLoops; j++)
			{
				searchAndReplace(thisVert,lightVertLoops[j].c_str(),lightVertLoopsAccum[j].c_str());
			}
			
			//printf("building variant light shader %d, light #%d, variant flag %d\n\n",lightType,i,variantFlag);
			
			if (!tmpShader->setup(thisVert.c_str(),thisFrag.c_str(),NULL))
			{
				//printf("light shader variant build failure.\n\n");
				return false;
			}
			lightShader[lightType][variantFlag].push_back(tmpShader);
		}
	}
	else
	{
		for (int i = 0; i < MAX_LIGHTS; i++)
		{
			GLShader *tmpShader = new GLShader();
			
			std::string thisFrag;
			std::string thisVert;
			
			thisFrag.append(lightFrag);
			thisVert.append(lightVert);

			searchAndReplace(thisFrag,lightIdToken,lightIds[i]);
			searchAndReplace(thisVert,lightIdToken,lightIds[i]);

			
			//printf("building variant light shader %d, light #%d, variant flag %d\n\n",lightType,i,variantFlag);
			
			if (!tmpShader->setup(thisVert.c_str(),thisFrag.c_str(),NULL))
			{
				//printf("light shader variant build failure.\n\n");
				return false;
			}
			lightShader[lightType][variantFlag].push_back(tmpShader);
		}
	}
	
	return true;
}
Esempio n. 5
0
/* OS_CustomLog: v0.1, 2012/10/10*/
void OS_CustomLog(Eventinfo *lf,char* format)
{
  char *log;
  char *tmp_log;
  char tmp_buffer[1024];
  //Replace all the tokens:
  os_strdup(format,log);

  snprintf(tmp_buffer, 1024, "%d", lf->time);
  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_TIMESTAMP], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }
  snprintf(tmp_buffer, 1024, "%ld", __crt_ftell);
  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_FTELL], tmp_buffer);
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }


  snprintf(tmp_buffer, 1024, "%s", (lf->generated_rule->alert_opts & DO_MAILALERT)?"mail " : "");
  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_RULE_ALERT_OPTIONS], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }


  snprintf(tmp_buffer, 1024, "%s",lf->hostname?lf->hostname:"None");
  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_HOSTNAME], tmp_buffer);
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%s",lf->location?lf->location:"None");
  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_LOCATION], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }


  snprintf(tmp_buffer, 1024, "%d", lf->generated_rule->sigid);
  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_RULE_ID], tmp_buffer);
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%d", lf->generated_rule->level);
  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_RULE_LEVEL], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%s",lf->srcip?lf->srcip:"None");
  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_SRC_IP], tmp_buffer);
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%s",lf->srcuser?lf->srcuser:"******");

  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_DST_USER], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }
  char * escaped_log;
  escaped_log = escape_newlines(lf->full_log);

  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_FULL_LOG],escaped_log );
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }

  if(escaped_log)
  {
    os_free(escaped_log);
    escaped_log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%s",lf->generated_rule->comment?lf->generated_rule->comment:"");
  tmp_log = searchAndReplace(log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_RULE_COMMENT], tmp_buffer);
  if(log)
  {
    os_free(log);
    log=NULL;
  }

  snprintf(tmp_buffer, 1024, "%s",lf->generated_rule->group?lf->generated_rule->group:"");
  log = searchAndReplace(tmp_log, CustomAlertTokenName[CUSTOM_ALERT_TOKEN_RULE_GROUP], tmp_buffer);
  if (tmp_log)
  {
    os_free(tmp_log);
    tmp_log=NULL;
  }


  fprintf(_aflog,log);
  fprintf(_aflog,"\n");
  fflush(_aflog);

  if(log)
  {
    os_free(log);
    log=NULL;
  }

  return;
}
Esempio n. 6
0
int readconfig(struct passwd *pwd, pam_handle_t * pamh, const char *user,
               char *path, char *targetpath, char *encfs_options,
               char *fuse_options)
{
    FILE *conffile;
    char line[BUFSIZE];
    char username[USERNAME_MAX];
    int parsed;
    const char *tmp;

    // Return 1 = error, 2 = silent error (ie already mounted)

    if ((conffile = fopen(CONFIGFILE, "r")) == NULL)
    {
        _pam_log(LOG_ERR, "Failed to open conffile %s", CONFIGFILE);
        return 0;
    }

    while (fgets(line, BUFSIZE, conffile) != NULL)
    {
        if (line[0] == '#')
            continue;
        parsed =
            sscanf(line, "%s%s%s%s%s", username, path, targetpath,
                   encfs_options, fuse_options);
        if (parsed == -1)
            continue;
        if (strcmp("drop_permissions", username) == 0)
        {
            drop_permissions = 1;
            continue;
        }
        if (strcmp("encfs_default", username) == 0)
        {
            if (parsed == 2 && !strcmp("-",path) == 0)
                strcpy(default_encfs_options, path);
            continue;
        }
        if (strcmp("fuse_default", username) == 0)
        {
            if (parsed == 2 && !strcmp("-",path) == 0)
                strcpy(default_fuse_options, path);
            continue;
        }

        if (parsed == 5)
        {
            // Parsing user:
            if (strcmp("-", encfs_options) == 0)
                strcpy(encfs_options, "");
            if (strcmp("-", fuse_options) == 0)
                strcpy(fuse_options, "");

            searchAndReplace(default_encfs_options);
            searchAndReplace(encfs_options);
            
            // Check if this is the right user / default user.
            if ((strcmp("-",username) != 0) && (strcmp(user,username) != 0)
                && (strcmp("*",username) !=0))
              continue;
            
            
            if (strcmp("-",username) == 0) {
              strcat(path, "/");
                strcat(path, user);
                // Todo check if dir exists and give better error msg.
            }
            
            // If username is '*', paths are relative to $HOME
            if (strcmp("*", username) == 0
                && strcmp("-", targetpath) != 0)
            {
                if ((tmp = getHome(pwd, pamh)))
                {
                        char home[PATH_MAX];

                        strcpy(home, tmp);
                        strcat(home, "/");
                        strcat(home, path);
                        strcpy(path, home);

                        strcpy(home, tmp);
                        strcat(home, "/");
                        strcat(home, targetpath);
                        strcpy(targetpath, home);
                }
            }
            
            if (strcmp("-", targetpath) == 0)
            {
                // We do not have targetpath, construct one.
                strcpy(targetpath, "");

                if ((tmp = getHome(pwd, pamh)))
                {
                    strcpy(targetpath, tmp);
                }
            }



            // Done, check targetpath and return.

            if (!targetpath || *targetpath == '\0')
            {
                _pam_log(LOG_ERR, "Can't get to HOME dir for user %s", user);
                fclose(conffile);
                return 0;
            }

            // Check if path exists, if we're "-" then we dont care, if not we give error.
            if (is_dir(path))
            {
                // We may fail to stat this directory (EPERM) if it's mounted because of fuse's funky permission system.
                if (!is_dir(targetpath))
                {
                    if (checkmnt(targetpath))
                    {
                        // Doublecheck if we're mounted, for some reason we can't stat the dir even when root if it's mounted.
                        // we are mounted, but we return 1 anyway so we can store targetpath
                        fclose(conffile);
                        return 1;
                    }
                    _pam_log(LOG_ERR, "TargetPath for %s does not exist (%s)",
                             user, targetpath);
                    fclose(conffile);
                    return 0;
                }
                fclose(conffile);
                return 1;
            }

            // Path does not exist, if we're a specified user give error, if not keep looking.

            if ((strcmp("-", username) != 0)
              && (strcmp("*", username) != 0))
            {
                _pam_log(LOG_ERR, "Path for %s does not exist (%s)", user,
                         path);
                fclose(conffile);
                return 0;
            }
            continue;

        }

        continue;
    }


    fclose(conffile);
    return 0;
}