-
Function not reusable?
Im attempting to figure out what a packages name is based on its file name(package-version-extension like format).
I made a function to gets a package's version, i figure ill just use that to find its version and copy up to that point.
Im getting a segfaul when i call version from name.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getpackagename(char *package, char **dest);
int getpackageversion(char *package, char **dest);
int getpackageversion(char *package, char **dest) {
int length = ( strlen(package) - 1 );
int start = 0;
int end = 0;
while(length > 0) {
if( package[length] > 47 && package[length] < 58 ) {
end = length;
while(package[length] != '-' && length > 0) {
--length;
}
if(package[length+1] == 'r' && package[length+2] == 'c') {
--length;
while(package[length] != '-' && length > 0) {
--length;
}
start = (length + 1);
} else {
start = (length + 1);
}
break;
}
--length;
}
length = 0;
*dest = malloc( end - start + 2 );
while(start < end) {
(*dest)[length] = package[start];
++length;
++start;
}
*dest[length] = '\0';
return 0;
}
int getpackagename(char *package, char **dest) {
char *version = NULL;
char *nameend = NULL;
getpackageversion(package, &version);
nameend = strstr(package, version);
*dest = malloc( strlen(package) - strlen(nameend) + 1 );
strncpy(*dest, package, (strlen(package) - strlen(nameend));
return 0;
}
int main() {
char package[] = "no1willno-4.5.1.24_rc4.tar";
char *temp = NULL;
getpackagename(package, &temp);
printf("%s\n", temp);
free(temp);
return 0;
}
-
>*dest[length] = '\0';
Should be
Code:
(*dest)[length] = '\0';
-
[nitpick]
Code:
if( package[length] > 47 && package[length] < 58 ) {
Why not use a clearer, potentially more optimized, and certainly more portable method (assuming of course this code intends to check whether a character represents a[n ASCII] digit)?
Code:
if( isdigit(package[length]) ) {
[/nitpick]
-
Thats what I shoudl do Dave_Sinkula, I just wrote the quickly. Ill change it someday....