{
struct passwd *pwd;
- if (!(pwd = getpwuid(getuid())))
- return "ANONYMOUS";
+ if ((pwd = getpwuid(getuid())) == NULL)
+ return ANONYMOUS_NAME;
else
return pwd->pw_name;
}
+char *getRealName()
+{
+#ifndef MSDOS
+ struct passwd *pwd;
+
+ if ((pwd = getpwuid(getuid())) == NULL || strlen(pwd->pw_gecos) == 0)
+ return ANONYMOUS_NAME;
+ else
+ {
+ static char real_name[1024];
+ char *from_ptr = pwd->pw_gecos, *to_ptr = real_name;
+
+ if (strchr(pwd->pw_gecos, 'ß') == NULL)
+ return pwd->pw_gecos;
+
+ /* the user's real name contains a 'ß' character (german sharp s),
+ which has no equivalent in upper case letters (which our fonts use) */
+ while (*from_ptr != '\0' && (long)(to_ptr - real_name) < 1024 - 2)
+ {
+ if (*from_ptr != 'ß')
+ *to_ptr++ = *from_ptr++;
+ else
+ {
+ from_ptr++;
+ *to_ptr++ = 's';
+ *to_ptr++ = 's';
+ }
+ }
+ *to_ptr = '\0';
+
+ return real_name;
+ }
+#else
+ return ANONYMOUS_NAME;
+#endif
+}
+
char *getHomeDir()
{
#ifndef MSDOS
return ptr;
}
+void getFileChunk(FILE *file, char *chunk_buffer, int *chunk_length,
+ int byte_order)
+{
+ const int chunk_identifier_length = 4;
+
+ fgets(chunk_buffer, chunk_identifier_length + 1, file);
+
+ if (byte_order == BYTE_ORDER_BIG_ENDIAN)
+ *chunk_length = ((fgetc(file) << 24) |
+ (fgetc(file) << 16) |
+ (fgetc(file) << 8) |
+ (fgetc(file) << 0));
+ else /* BYTE_ORDER_LITTLE_ENDIAN */
+ *chunk_length = ((fgetc(file) << 0) |
+ (fgetc(file) << 8) |
+ (fgetc(file) << 16) |
+ (fgetc(file) << 24));
+}
+
+void putFileChunk(FILE *file, char *chunk_name, int chunk_length,
+ int byte_order)
+{
+ fputs(chunk_name, file);
+
+ if (byte_order == BYTE_ORDER_BIG_ENDIAN)
+ {
+ fputc((chunk_length >> 24) & 0xff, file);
+ fputc((chunk_length >> 16) & 0xff, file);
+ fputc((chunk_length >> 8) & 0xff, file);
+ fputc((chunk_length >> 0) & 0xff, file);
+ }
+ else /* BYTE_ORDER_LITTLE_ENDIAN */
+ {
+ fputc((chunk_length >> 0) & 0xff, file);
+ fputc((chunk_length >> 8) & 0xff, file);
+ fputc((chunk_length >> 16) & 0xff, file);
+ fputc((chunk_length >> 24) & 0xff, file);
+ }
+}
+
#define TRANSLATE_KEYSYM_TO_KEYNAME 0
#define TRANSLATE_KEYSYM_TO_X11KEYNAME 1
#define TRANSLATE_X11KEYNAME_TO_KEYSYM 2