mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
Turn 'Filename' into a dynamically allocated type with no arbitrary
length limit, just as I did to FontSpec yesterday. [originally from svn r9316]
This commit is contained in:
@ -14,27 +14,58 @@ char *platform_get_x_display(void) {
|
||||
return dupstr(getenv("DISPLAY"));
|
||||
}
|
||||
|
||||
Filename filename_from_str(const char *str)
|
||||
Filename *filename_from_str(const char *str)
|
||||
{
|
||||
Filename ret;
|
||||
strncpy(ret.path, str, sizeof(ret.path));
|
||||
ret.path[sizeof(ret.path)-1] = '\0';
|
||||
Filename *ret = snew(Filename);
|
||||
ret->path = dupstr(str);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Filename *filename_copy(const Filename *fn)
|
||||
{
|
||||
return filename_from_str(fn->path);
|
||||
}
|
||||
|
||||
const char *filename_to_str(const Filename *fn)
|
||||
{
|
||||
return fn->path;
|
||||
}
|
||||
|
||||
int filename_equal(Filename f1, Filename f2)
|
||||
int filename_equal(const Filename *f1, const Filename *f2)
|
||||
{
|
||||
return !strcmp(f1.path, f2.path);
|
||||
return !strcmp(f1->path, f2->path);
|
||||
}
|
||||
|
||||
int filename_is_null(Filename fn)
|
||||
int filename_is_null(const Filename *fn)
|
||||
{
|
||||
return !*fn.path;
|
||||
return !*fn->path;
|
||||
}
|
||||
|
||||
void filename_free(Filename *fn)
|
||||
{
|
||||
sfree(fn->path);
|
||||
sfree(fn);
|
||||
}
|
||||
|
||||
int filename_serialise(const Filename *f, void *vdata)
|
||||
{
|
||||
char *data = (char *)vdata;
|
||||
int len = strlen(f->path) + 1; /* include trailing NUL */
|
||||
if (data) {
|
||||
strcpy(data, f->path);
|
||||
}
|
||||
return len;
|
||||
}
|
||||
Filename *filename_deserialise(void *vdata, int maxsize, int *used)
|
||||
{
|
||||
char *data = (char *)vdata;
|
||||
char *end;
|
||||
end = memchr(data, '\0', maxsize);
|
||||
if (!end)
|
||||
return NULL;
|
||||
end++;
|
||||
*used = end - data;
|
||||
return filename_from_str(data);
|
||||
}
|
||||
|
||||
char *get_username(void)
|
||||
|
Reference in New Issue
Block a user