diff --git a/src/homemade_speedstep.c b/src/homemade_speedstep.c index af90dce..26c4179 100644 --- a/src/homemade_speedstep.c +++ b/src/homemade_speedstep.c @@ -88,6 +88,17 @@ int countblanks(char line[]){ return j; } +void newlinetonullbyte(char string[]){ + int i = 0; + while (string[i] != '\0'){ + if (string[i] == '\n'){ + string[i] = '\0'; + break; + } + i++; + } +} + int main(int argc, char** argv){ /* check for no arguments or help */ if (argc == 1 || comparestrings(argv[1], "-h") == 0 @@ -153,13 +164,53 @@ int main(int argc, char** argv){ /* free memory and close file */ free(freqsfilec); fclose(freqsfile); + /* try to open scaling_maximum_frequency, exit on fail */ + FILE* curmaxfile = fopen(MAXSPDPATH, "r"); + if (curmaxfile == NULL){ + fprintf(stderr, "error: couldn't open scaling_maximum_frequency\n"); + fprintf(stderr, " check that you have support for cpufreq\n"); + fprintf(stderr, " in your kernel and that the program is\n"); + fprintf(stderr, " running as root\n"); + return 5; + } + /* assign content of curmaxfile to a temporary char array */ + char *curmaxfreq = malloc(sizeof(char) * 20); + getfilec(curmaxfile, curmaxfreq); + newlinetonullbyte(curmaxfreq); + /* figure out what step we're on */ + int curstep = -1; + for(i = 0; i < stepc; i++){ + if (comparestrings(steps[i], curmaxfreq) == 0){ + curstep = i; + break; + } + } + /* free memory and close file */ + free(curmaxfreq); + fclose(curmaxfile); + /* check if we didn't find our current step, exit on fail */ + if (curstep == -1){ + fprintf(stderr, "error: couldn't figure out the current frequency\n"); + fprintf(stderr, " check that you have support for cpufreq\n"); + fprintf(stderr, " in your kernel and that the program is\n"); + fprintf(stderr, " running as root\n"); + return 6; + } + FILE* curtempfile; /* from here onwards an infinite while loop should start */ + while((curtempfile = fopen(CURTEMPPATH, "r")) != NULL){ + char* temperature = malloc(sizeof(char) * 8); + getfilec(curtempfile, temperature); + newlinetonullbyte(temperature); + if (stringtoint(temperature, stringlength(temperature)) >= maxtemp + && curstep <= stepc){ + } + free(temperature); + fclose(curtempfile); + } /* cleanup for graceful exit */ free(steps); - FILE* curmaxfile = fopen(MAXSPDPATH, "r"); - FILE* setspeedfile = fopen(SETSPDPATH, "r"); - FILE* curtempfile = fopen(CURTEMPPATH, "r"); - fclose(curmaxfile); + FILE* setspeedfile = fopen(SETSPDPATH, "w"); fclose(setspeedfile); fclose(curtempfile); return 0;