|
Lines 831-839
Link Here
|
| 831 |
DIRENTRY *dp; |
831 |
DIRENTRY *dp; |
| 832 |
struct stat tmp_stbuf, arc_stbuf, fil_stbuf; |
832 |
struct stat tmp_stbuf, arc_stbuf, fil_stbuf; |
| 833 |
|
833 |
|
| 834 |
strcpy(newname, name); |
834 |
strncpy(newname, name, sizeof(newname)); |
|
|
835 |
newname[sizeof(newname)-1] = 0; |
| 835 |
len = strlen(name); |
836 |
len = strlen(name); |
| 836 |
if (len > 0 && newname[len - 1] != '/') |
837 |
if (len > 0 && newname[len - 1] != '/' && len < (sizeof(newname)-1)) |
| 837 |
newname[len++] = '/'; |
838 |
newname[len++] = '/'; |
| 838 |
|
839 |
|
| 839 |
dirp = opendir(name); |
840 |
dirp = opendir(name); |
|
Lines 847-852
Link Here
|
| 847 |
|
848 |
|
| 848 |
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { |
849 |
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { |
| 849 |
n = NAMLEN(dp); |
850 |
n = NAMLEN(dp); |
|
|
851 |
if( len >= (sizeof(newname)-1) || |
| 852 |
(len+n) >= (sizeof(newname)-1) || |
| 853 |
n <= 0 || |
| 854 |
(len+n) <= 0) |
| 855 |
break; |
| 850 |
strncpy(newname + len, dp->d_name, n); |
856 |
strncpy(newname + len, dp->d_name, n); |
| 851 |
newname[len + n] = '\0'; |
857 |
newname[len + n] = '\0'; |
| 852 |
if (GETSTAT(newname, &fil_stbuf) < 0) |
858 |
if (GETSTAT(newname, &fil_stbuf) < 0) |
|
Lines 904-910
Link Here
|
| 904 |
strcpy(temporary_name, TMP_FILENAME_TEMPLATE); |
910 |
strcpy(temporary_name, TMP_FILENAME_TEMPLATE); |
| 905 |
} |
911 |
} |
| 906 |
else { |
912 |
else { |
| 907 |
sprintf(temporary_name, "%s/lhXXXXXX", extract_directory); |
913 |
snprintf(temporary_name, sizeof(temporary_name), "%s/lhXXXXXX", extract_directory); |
| 908 |
} |
914 |
} |
| 909 |
#ifdef MKSTEMP |
915 |
#ifdef MKSTEMP |
| 910 |
mkstemp(temporary_name); |
916 |
mkstemp(temporary_name); |
|
Lines 914-923
Link Here
|
| 914 |
#else |
920 |
#else |
| 915 |
char *p, *s; |
921 |
char *p, *s; |
| 916 |
|
922 |
|
| 917 |
strcpy(temporary_name, archive_name); |
923 |
strncpy(temporary_name, archive_name, sizeof(temporary_name)); |
|
|
924 |
temporary_name[sizeof(temporary_name)-1] = 0; |
| 918 |
for (p = temporary_name, s = (char *) 0; *p; p++) |
925 |
for (p = temporary_name, s = (char *) 0; *p; p++) |
| 919 |
if (*p == '/') |
926 |
if (*p == '/') |
| 920 |
s = p; |
927 |
s = p; |
|
|
928 |
|
| 929 |
if( sizeof(temporary_name) - ((size_t) (s-temporary_name)) - 1 |
| 930 |
<= strlen("lhXXXXXX")) |
| 931 |
exit(-1); |
| 932 |
|
| 921 |
strcpy((s ? s + 1 : temporary_name), "lhXXXXXX"); |
933 |
strcpy((s ? s + 1 : temporary_name), "lhXXXXXX"); |
| 922 |
#ifdef MKSTEMP |
934 |
#ifdef MKSTEMP |
| 923 |
mkstemp(temporary_name); |
935 |
mkstemp(temporary_name); |
|
Lines 935-940
Link Here
|
| 935 |
{ |
947 |
{ |
| 936 |
register char *p, *dot; |
948 |
register char *p, *dot; |
| 937 |
|
949 |
|
|
|
950 |
/* XXX thomas: this can loop "forever", classical semi-decidable problem ;) */ |
| 938 |
for (p = buffer, dot = (char *) 0; *p; p++) { |
951 |
for (p = buffer, dot = (char *) 0; *p; p++) { |
| 939 |
if (*p == '.') |
952 |
if (*p == '.') |
| 940 |
dot = p; |
953 |
dot = p; |
|
Lines 945-950
Link Here
|
| 945 |
if (dot) |
958 |
if (dot) |
| 946 |
p = dot; |
959 |
p = dot; |
| 947 |
|
960 |
|
|
|
961 |
/* XXX thomas: this may overflow */ |
| 948 |
strcpy(p, ext); |
962 |
strcpy(p, ext); |
| 949 |
} |
963 |
} |
| 950 |
|
964 |
|
|
Lines 955-960
Link Here
|
| 955 |
char *buffer; |
969 |
char *buffer; |
| 956 |
char *original; |
970 |
char *original; |
| 957 |
{ |
971 |
{ |
|
|
972 |
/* XXX thomas: this may overflow */ |
| 958 |
strcpy(buffer, original); |
973 |
strcpy(buffer, original); |
| 959 |
modify_filename_extention(buffer, BACKUPNAME_EXTENTION); /* ".bak" */ |
974 |
modify_filename_extention(buffer, BACKUPNAME_EXTENTION); /* ".bak" */ |
| 960 |
} |
975 |
} |
|
Lines 965-970
Link Here
|
| 965 |
char *buffer; |
980 |
char *buffer; |
| 966 |
char *orginal; |
981 |
char *orginal; |
| 967 |
{ |
982 |
{ |
|
|
983 |
/* XXX thomas: this may overflow */ |
| 968 |
strcpy(buffer, orginal); |
984 |
strcpy(buffer, orginal); |
| 969 |
modify_filename_extention(buffer, ARCHIVENAME_EXTENTION); /* ".lzh" */ |
985 |
modify_filename_extention(buffer, ARCHIVENAME_EXTENTION); /* ".lzh" */ |
| 970 |
} |
986 |
} |
|
Lines 993-999
Link Here
|
| 993 |
xfopen(name, mode) |
1009 |
xfopen(name, mode) |
| 994 |
char *name, *mode; |
1010 |
char *name, *mode; |
| 995 |
{ |
1011 |
{ |
| 996 |
FILE *fp; |
1012 |
FILE *fp = NULL; |
| 997 |
|
1013 |
|
| 998 |
if (mode[0] == '!') { |
1014 |
if (mode[0] == '!') { |
| 999 |
int fd; |
1015 |
int fd; |
|
Lines 1047-1053
Link Here
|
| 1047 |
else |
1063 |
else |
| 1048 |
return NULL; |
1064 |
return NULL; |
| 1049 |
} |
1065 |
} |
| 1050 |
if (p = (char *) rindex(archive_name, '.')) { |
1066 |
if ( (p = (char *) rindex(archive_name, '.')) ) { |
| 1051 |
if (strucmp(".LZH", p) == 0 |
1067 |
if (strucmp(".LZH", p) == 0 |
| 1052 |
|| strucmp(".LHA", p) == 0 /* Amiga */ |
1068 |
|| strucmp(".LHA", p) == 0 /* Amiga */ |
| 1053 |
|| strucmp(".LZS", p) == 0 |
1069 |
|| strucmp(".LZS", p) == 0 |
|
Lines 1062-1073
Link Here
|
| 1062 |
|
1078 |
|
| 1063 |
if (open_old_archive_1(archive_name, &fp)) |
1079 |
if (open_old_archive_1(archive_name, &fp)) |
| 1064 |
return fp; |
1080 |
return fp; |
| 1065 |
sprintf(expanded_archive_name, "%s." ARCHIVEEXT_OLD, archive_name); |
1081 |
snprintf(expanded_archive_name, sizeof(expanded_archive_name), |
|
|
1082 |
"%s." ARCHIVEEXT_OLD, archive_name); |
| 1066 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1083 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
| 1067 |
archive_name = expanded_archive_name; |
1084 |
archive_name = expanded_archive_name; |
| 1068 |
return fp; |
1085 |
return fp; |
| 1069 |
} |
1086 |
} |
| 1070 |
sprintf(expanded_archive_name, "%s.lzh", archive_name); |
1087 |
snprintf(expanded_archive_name, sizeof(expanded_archive_name), |
|
|
1088 |
"%s.lzh", archive_name); |
| 1071 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1089 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
| 1072 |
archive_name = expanded_archive_name; |
1090 |
archive_name = expanded_archive_name; |
| 1073 |
return fp; |
1091 |
return fp; |
|
Lines 1076-1082
Link Here
|
| 1076 |
* if ( (errno&0xffff)!=E_PNNF ) { archive_name = |
1094 |
* if ( (errno&0xffff)!=E_PNNF ) { archive_name = |
| 1077 |
* expanded_archive_name; return NULL; } |
1095 |
* expanded_archive_name; return NULL; } |
| 1078 |
*/ |
1096 |
*/ |
| 1079 |
sprintf(expanded_archive_name, "%s.lzs", archive_name); |
1097 |
snprintf(expanded_archive_name, sizeof(expanded_archive_name), |
|
|
1098 |
"%s.lzs", archive_name); |
| 1080 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1099 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
| 1081 |
archive_name = expanded_archive_name; |
1100 |
archive_name = expanded_archive_name; |
| 1082 |
return fp; |
1101 |
return fp; |
|
Lines 1106-1111
Link Here
|
| 1106 |
|
1125 |
|
| 1107 |
fgets(buffer, 1024, stdin); |
1126 |
fgets(buffer, 1024, stdin); |
| 1108 |
|
1127 |
|
|
|
1128 |
/* XXX thomas: this may loop "forever" */ |
| 1109 |
for (p = selective; *p; p++) |
1129 |
for (p = selective; *p; p++) |
| 1110 |
if (buffer[0] == *p) |
1130 |
if (buffer[0] == *p) |
| 1111 |
return p - selective; |
1131 |
return p - selective; |